Spring spring中InitializingBean接口和ApplicationContextAware接口
来源:互联网 发布:2017手机淘宝装修教程 编辑:程序博客网 时间:2024/05/29 08:57
ApplicationContextAware接口
1.首先什么是ApplicationContext
ApplicationContext的BeanFactory 的子类, 拥有更强大的功能,ApplicationContext可以在服务器启动的时候自动实例化所有的bean,而 BeanFactory只有在调用getBean()的时候才去实例化那个bean, 这也是我们为什么要得到一个ApplicationContext对象, 事实上Spring2相关的web应用默认使用的是ApplicationContext对象去实例化bean, 换一句话说, 在服务器启动的时候,Spring容器就已经实例化好了一个ApplicationContext对象,所以我们要在老的代码里尝试去获取这个对象。
2.这个接口有什么用?
当一个类实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得一个ApplicationContext对象,从而获取到ApplicationContext中的所有bean。换句话说,就是这个类可以直接获取spring配置文件中,所有有引用到的bean对象。
加载Spring配置文件时,如果Spring配置文件中所定义的Bean类实现了ApplicationContextAware 接口,那么在加载Spring配置文件时,会自动调用ApplicationContextAware 接口中的setApplicationContext(ApplicationContext context) 方法,获得ApplicationContext对象。在项目中即可通过这个SpringContextHelper调用getBean()方法得到Spring容器中的对象了。
/** * applicationContext静态化 * 使用了ApplicationContextAware接口的类,如果受spring容器管理的 * 话,那么就会自动的调用ApplicationContextAware中的setApplicationContext方法 */public class SpringContextHelper implements ApplicationContextAware { private ApplicationContext context; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { context = applicationContext; } //获取Bean XxxDAO xxxDAO = (xxxDAO)context.getBean("xxxDAO");}
因为我们在做开发的时候,并不是说在每一个地方都能将属性注入到我们想要的地方去的,比如在Utils使用到dao,我们就不能直接注入了,这个时候就是我们需要封装springContext的时候了,而ApplicationContextAware就起了关键性的作用。
InitializingBean接口
1.InitializingBean接口的作用
InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候会执行该方法。
当你实现了afterPropertiesSet方法后,spring就会对你提供框架级的支持:当你通过sring容器生产出实现了该接口的类的实例后,它就会调用afterPropertiesSet方法,通过这个方法,你可以检查你的bean是否正确地被初始化了.当然,你也可以用init-method方法.这两种方式可以同时使用,调用的顺序为init-method后调用。
测试程序如下:
import org.springframework.beans.factory.InitializingBean;public class TestInitializingBean implements InitializingBean{ @Override public void afterPropertiesSet() throws Exception { System.out.println("测试 InitializingBean"); } public void testInit(){ System.out.println("测试 init-method"); }}
在spring初始化bean的时候,如果bean实现了InitializingBean接口,会自动调用afterPropertiesSet方法。
输出:
测试 InitializingBean
修改配置文件,加上init-method配置,修改如下:
<bean id="testInitializingBean" class="com.TestInitializingBean" init-method="testInit"></bean>
在配置文件中加入init-method=”testInit”。
spring初始化bean的时候,打印如下结果:
测试 InitializingBean测试 init-method
由结果可看出,在spring初始化bean的时候,如果该bean是实现了InitializingBean接口,并且同时在配置文件中指定了init-method,系统则是先调用afterPropertiesSet方法,然后在调用init-method中指定的方法。
总结
1:spring为bean提供了两种初始化bean的方式,实现InitializingBean接口,实现afterPropertiesSet方法,或者在配置文件中同过init-method指定,两种方式可以同时使用
2:实现InitializingBean接口是直接调用afterPropertiesSet方法,比通过反射调用init-method指定的方法效率相对来说要高点。但是init-method方式消除了对spring的依赖
3:如果调用afterPropertiesSet方法时出错,则不调用init-method指定的方法。
- Spring spring中InitializingBean接口和ApplicationContextAware接口
- spring中多例、BeanFactoryAware、ApplicationContextAware、InitializingBean接口
- spring中ApplicationContextAware接口
- Spring中ApplicationContextAware接口用法
- Spring中InitializingBean接口使用
- spring中ApplicationContextAware接口ServletContextAware接口
- spring ApplicationContextAware接口介绍
- Spring ApplicationContextAware接口
- spring InitializingBean接口
- spring InitializingBean接口问题
- spring InitializingBean接口
- spring InitializingBean接口
- spring InitializingBean接口
- zt spring InitializingBean接口
- spring InitializingBean接口
- spring InitializingBean接口
- spring InitializingBean接口
- spring InitializingBean接口
- virtualenv env出错问题
- MSP430学习笔记-时钟
- Mysql InnoDB删除数据后释放磁盘空间的方法
- 底层:http模块express
- cocos2d-lua3.7组件篇(二)-两帧图片互相跳动
- Spring spring中InitializingBean接口和ApplicationContextAware接口
- Part2-HttpClient官方教程-Chapter1-基础
- 使用FFMPeg解码显示ts流
- 拓扑排序-邻接矩阵表示
- oracle动态游标中的强类型和弱类型
- ORACLE sid,pid,spid和v$session中的saddr,paddr和taddr总结
- 5.zk实现-分布式排它锁
- freeCodeCamp题目:No repeats please(排列组合题)
- Java 根据银行卡号获取银行名称以及图标