容器是spring的核心,spring容器使用DI管理所有组成应用系统的组件。
spring的IOC容器能够帮我们自动new对象,对象交给spring管之后我们不用自己手动去new对象了。
1.spring 容器分为两类:
2.BeanFactory介绍:
${google.database.driverClassName}
${google.database.url}
${google.database.username}
${google.database.password}
${google.database.tablename}
${google.database.fieldname}
${google.database.orderfieldname}
Resource resource=new ClassPathResource("conf/spring/applicationContext.xml");
BeanFactory factory=new XmlBeanFactory(resource);
com.geostar.query.beans.DataSource ds=(com.geostar.query.beans.DataSource)factory.getBean("ds");
System.out.println(ds.getDriverClassName());
3.应用上下文:
ApplicationContext factory=new ClassPathXmlApplicationContext("classpath:conf/spring/applicationContext.xml");
DataSource ds=(DataSource)factory.getBean("ds");
System.out.println(ds.getDriverClassName());
ApplicationContext的诸多实现中,以下三种经常用到:
ClassPathXmlApplicationContext
FileSystemXmlApplicationContext
XmlWebApplicationContext
第一种和第二种的区别在于,ClassPath可以在整个类路径(包括JAR文件)中寻找定义Bean的XML文件;而FileSystem只能在指定路径中寻找。ApplicationContext context = new FileSystemXmlApplicationContext("c:/pirate.xml");
// or ~
ApplicationContext context = new ClassPathXmlApplicationContext("pirate.xml")
4.BeanFactory与ApplicationConText区别:
BeanFactory被初始化的时候,并没有加载所有的单实例Bean对象,而是等到调用getBean()方法的时候才初始化相应的Bean实例对象。
ApplicationContext被初始化的时候就已经检查所有的Bean对象并初始化,当调用getBean()方法的时候,直接可以从缓存中取出相应的Bean实例对象。
5.Bean的生命周期
5.1 Bean的定义
Spring通常通过配置文件定义Bean。如:
HelloWorld
这个配置文件就定义了一个标识为 HelloWorld 的Bean。在一个配置文档中可以定义多个Bean。
5.2 Bean的初始化
有两种方式初始化Bean。
5.2.1在配置文档中通过指定init-method 属性来完成
在Bean的类中实现一个初始化Bean属性的方法,如init(),如:
public class HelloWorld{
public String msg=null;
public Date date=null;
public void init() {
msg=”HelloWorld”;
date=new Date();
}
……
}
然后,在配置文件中设置init-mothod属性:
5.2.2 实现 org.springframwork.beans.factory.InitializingBean接口
Bean实现InitializingBean接口,并且增加 afterPropertiesSet() 方法:
public class HelloWorld implement InitializingBean {
public String msg=null;
public Date date=null;
public void afterPropertiesSet() {
msg=”向全世界问好!”;
date=new Date();
}
……
}
那么,当这个Bean的所有属性被Spring的BeanFactory设置完后,会自动调用afterPropertiesSet()方法对Bean进行初始化,于是,配置文件就不用指定 init-method属性了。
5.3 Bean的调用
有三种方式可以得到Bean并进行调用:
5.3.1 使用BeanWrapper
HelloWorld hw=new HelloWorld();
BeanWrapper bw=new BeanWrapperImpl(hw);
bw.setPropertyvalue(“msg”,”HelloWorld”);
system.out.println(bw.getPropertyCalue(“msg”));
5.3.2 使用BeanFactory
InputStream is=new FileInputStream(“config.xml”);
XmlBeanFactory factory=new XmlBeanFactory(is);
HelloWorld hw=(HelloWorld) factory.getBean(“HelloWorld”);
system.out.println(hw.getMsg());
5.3.3 使用ApplicationContext
ApplicationContext actx=new FleSystemXmlApplicationContext(“config.xml”);
HelloWorld hw=(HelloWorld) actx.getBean(“HelloWorld”);
System.out.println(hw.getMsg())
5.4 Bean的销毁
5.4.1 用配置文件中的 destory-method 属性
与初始化属性 init-methods类似,在Bean的类中实现一个撤销Bean的方法,然后在配置文件中通过 destory-method指定,那么当bean销毁时,Spring将自动调用指定的销毁方法。
5.4.2 实现 org.springframwork.bean.factory.DisposebleBean接口
如果实现了DisposebleBean接口,那么Spring将自动调用bean中的Destory方法进行销毁,所以,Bean中必须提供Destory方法。