一个XML只能被一个dtd约束,但是可以被多个 Schema 约束
id:使用了约束的唯一约束。 不能出现一些特殊字符。
name:没有使用约束的唯一约束(理论上是可以重复的,但是实际开发当中是不能出现重复)。 里面可以出现特殊字符。
Spring和Struts1框架整合的时候 < bean id ="/user" class=" " / > Struts1现在很少用所以name和id可以理解为一样的
class:要生成类的全路径
init-method :自动执行的初始化方法,Bean被初始化的时候执行的方法 destroy-method:销毁的方法,Bean被销毁的时候执行的方法(Bean必须是单例创建的,工厂关闭)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- Spring的Bean生命周期的配置 init-method设置该类初始化方法 setup会自动执行 destroy-method 设置要销毁的方法 --> <bean id="customerDAO" class="com.itzheng.spring.demo2.CustomerDAOImpl" init-method="setup" destroy-method="destroy"> </bean> </beans> package com.itzheng.spring.demo2; public interface CustomerDAO { public void save(); } package com.itzheng.spring.demo2; public class CustomerDAOImpl implements CustomerDAO { public void setup() { System.out.println("CustomerDAOImpl被初始化了、、、、、"); } @Override public void save() { // TODO Auto-generated method stub System.out.println("CustomerDAOImpl的save方法执行了。。。。"); } public void destroy() { System.out.println("CustomerDAOImpl被销毁了、、、、、"); } }测试:
package com.itzheng.spring.demo2; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class SpringDemo2 { @Test /* * 生命周期的配置 */ public void demo1() { ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); CustomerDAO customerDAO = (CustomerDAO) applicationContext.getBean("customerDAO"); //customerDAOImpl 当中的SetUp会自动执行 customerDAO.save(); applicationContext.close(); } }结果
scope的五个取值: singleton:默认值,Spring会采用单例模式创建该对象。 prototype:多例模式。(在Struts2和Spring整合的时候一定会用到)。
request:应用在web项目中,Spring创建这个类以后,将这个类传入到request域当中。 session:应用在web项目中,Spring创建这个类以后,将这个类传入到session域当中。 globalsession:应用在web项目中,必须在prolet环境下使用。(在一个地方存入数据以后在子系统当中也拥有该数据)。 如果没有这种环境,配置globalsession就相当于session。
创建两个工厂(测试是否是同一个对象)。
@Test /* * Bean的作用 */ public void demo2() { ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext( "applicationContext.xml"); CustomerDAO customerDAO1 = (CustomerDAO) applicationContext.getBean("customerDAO"); CustomerDAO customerDAO2 = (CustomerDAO) applicationContext.getBean("customerDAO"); System.out.println(customerDAO1 == customerDAO2); applicationContext.close(); }被初始化一次,true证明是同一个对象
将bean当中的scope=“singleton” 效果一样说明默认值就是scope=“singleton”
false证明初始化两次,创建两个对象,因为工厂当中有两个对象
所以不知道该关闭那个对象,所以没有销毁。