spring 解读之 基本bean装配
2015-09-08 14:27
561 查看
容器是spring的核心,spring容器使用DI管理所有组成应用系统的组件。
spring的IOC容器能够帮我们自动new对象,对象交给spring管之后我们不用自己手动去new对象了。
1.2 应用上下文(由ApplicationContext接口定义)建立在bean工厂之上,提供了系统构架服务。
2.1 XmlBeanFactory
spring中有几种BeanFactory的实现 其中最常用的是XmlBeanFactory。
使用XmlBeanFactory读取spring配置文件,可以如下:
------下面是spring配置部分:
上面的代码告诉Bean工厂从XML文件中读取Bean的定义信息。但是现在Bean工厂还没有本实例化Bean。
Bean是被延迟加载到Bean工厂中的,就是说Bean工厂会立刻把Bean的基本信息载入进来,但是Bean只有在需要的时候才会被实例化。
为了从Bean工厂得到一个Bean,只要简单地调用getBean()方法。
当getBean()方法被调用的时候,工厂就会实例化Bean并且使用依赖注入设置Bean的属性。这样就在spring容器里面开始了Bean的生命。
ApplicationContext的诸多实现中,以下三种经常用到:
ClassPathXmlApplicationContext
FileSystemXmlApplicationContext
XmlWebApplicationContext
第一种和第二种的区别在于,ClassPath可以在整个类路径(包括JAR文件)中寻找定义Bean的XML文件;而FileSystem只能在指定路径中寻找。
2 两者在加载Bean实例时的区别:
BeanFactory被初始化的时候,并没有加载所有的单实例Bean对象,而是等到调用getBean()方法的时候才初始化相应的Bean实例对象。
ApplicationContext被初始化的时候就已经检查所有的Bean对象并初始化,当调用getBean()方法的时候,直接可以从缓存中取出相应的Bean实例对象。
Spring通常通过配置文件定义Bean。如:
这个配置文件就定义了一个标识为 HelloWorld 的Bean。在一个配置文档中可以定义多个Bean。
5.2 Bean的初始化
有两种方式初始化Bean。
5.2.1在配置文档中通过指定init-method 属性来完成
在Bean的类中实现一个初始化Bean属性的方法,如init(),如:
然后,在配置文件中设置init-mothod属性:
5.2.2 实现 org.springframwork.beans.factory.InitializingBean接口
Bean实现InitializingBean接口,并且增加 afterPropertiesSet() 方法:
那么,当这个Bean的所有属性被Spring的BeanFactory设置完后,会自动调用afterPropertiesSet()方法对Bean进行初始化,于是,配置文件就不用指定 init-method属性了。
5.3 Bean的调用
有三种方式可以得到Bean并进行调用:
5.3.1 使用BeanWrapper
5.3.2 使用BeanFactory
5.3.3 使用ApplicationContext
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方法。
参考: http://www.cnblogs.com/likehua/archive/2011/12/16/2290737.html http://www.mianwww.com/html/2009/01/207.html
spring的IOC容器能够帮我们自动new对象,对象交给spring管之后我们不用自己手动去new对象了。
1.spring 容器分为两类:
1.1 bean工厂(由BeanFactory接口定义)是最简单的spring容器,提供了基本的依赖注入支持。1.2 应用上下文(由ApplicationContext接口定义)建立在bean工厂之上,提供了系统构架服务。
2.BeanFactory介绍:
采用工厂设计模式,就是说由这个类负责创建和分发Bean。2.1 XmlBeanFactory
spring中有几种BeanFactory的实现 其中最常用的是XmlBeanFactory。
使用XmlBeanFactory读取spring配置文件,可以如下:
------下面是spring配置部分:
${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);
上面的代码告诉Bean工厂从XML文件中读取Bean的定义信息。但是现在Bean工厂还没有本实例化Bean。
Bean是被延迟加载到Bean工厂中的,就是说Bean工厂会立刻把Bean的基本信息载入进来,但是Bean只有在需要的时候才会被实例化。
为了从Bean工厂得到一个Bean,只要简单地调用getBean()方法。
com.geostar.query.beans.DataSource ds=(com.geostar.query.beans.DataSource)factory.getBean("ds"); System.out.println(ds.getDriverClassName());
当getBean()方法被调用的时候,工厂就会实例化Bean并且使用依赖注入设置Bean的属性。这样就在spring容器里面开始了Bean的生命。
3.应用上下文:
使用ApplicationContext读取spring配置文件,可以如下: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区别:
1 两者都是通过xml配置文件加载bean,ApplicationContext和BeanFacotry相比,提供了更多的扩展功能,但其主要区别在于后者是延迟加载,如果Bean的某一个属性没有注入,BeanFacotry加载后,直至第一次使用调用getBean方法才会抛出异常;而ApplicationContext则在初始化自身是检验,这样有利于检查所依赖属性是否注入;所以通常情况下我们选择使用ApplicationContext.2 两者在加载Bean实例时的区别:
BeanFactory被初始化的时候,并没有加载所有的单实例Bean对象,而是等到调用getBean()方法的时候才初始化相应的Bean实例对象。
ApplicationContext被初始化的时候就已经检查所有的Bean对象并初始化,当调用getBean()方法的时候,直接可以从缓存中取出相应的Bean实例对象。
5.Bean的生命周期
5.1 Bean的定义Spring通常通过配置文件定义Bean。如:
<?xml version=”1.0″ encoding=”UTF-8″?> 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方法。
参考: http://www.cnblogs.com/likehua/archive/2011/12/16/2290737.html http://www.mianwww.com/html/2009/01/207.html
相关文章推荐
- java开发要点备份(一)
- Jenkins+maven+findbugs对java代码进行静态代码分析
- java 线程的优先级Priority
- Java NIO和IO的区别
- JAVA SE 基础复习-前言
- RabbitMQ 第三篇——路由选择
- java返回存储过程异常信息
- SpringMV 4000 C返回json数据的三种方式
- spring_150802_resource
- 使用java代码判断用户使用哪种方式登录的。
- 如何查看Eclipse版本
- Java的GC分代原理
- Struts2之文件上传与下载
- Java中Static Nested Class 和 Inner Class的不同
- java中的Maven项目的两种打包方法
- java socket内容回顾
- myeclipse优化配置指南、myeclipse常用功能设置、 myeclipse快捷键
- 关于百度地图 java.lang.NoSuchMethodError: com.baidu.location.BDLocation.getAddress
- java 实现全排列
- eclipse快捷键大全