ApplicationContext通常的实现是什么?
FileSystemXmlApplicationContext :此容器从一个XML文件中加载beans的定义,XML Bean 配置文件的全路径名必须提供给它的构造函数。
ClassPathXmlApplicationContext:此容器也从一个XML文件中加载beans的定义,这里,你需要正确设置classpath因为这个容器将在classpath里找bean配置。
WebXmlApplicationContext:此容器加载一个XML文件,此文件定义了一个WEB应用的所有bean Spring 中的 bean 生命周期?
解析类-》加载对象-》依赖注入-》回调Aware方法-》后置处理器处理(初始化及初始化前后)-》使用-》销毁
Bean 容器解析类得到配置文件中 Spring Bean 的定义(BeanDefinition)。(解析)
Bean 容器利用 Java Reflection API 创建一个Bean的实例。(加载对象)
如果涉及到一些属性值(加了@Autowride注解的属性)利用 set()方法给对象设置属性。(依赖注入)
回调Aware方法:如果实现了其他 *.Aware接口,就调用相应的方法。(回调Aware方法)
①如果 Bean 实现了 BeanNameAware 接口,调用 setBeanName()方法,传入Bean的名字。
②如果 Bean 实现了 BeanClassLoaderAware 接口,调用 setBeanClassLoader()方法,传入 ClassLoader对象的实例。
如果有和加载这个 Bean 的 Spring 容器相关的 BeanPostProcessor对象,执行
postProcessBeforeInitialization() 方法。(后置处理器初始化前方法)
如果Bean实现了InitializingBean接口,执行afterPropertiesSet()方法。(初始化方法)
如果 Bean 在配置文件中的定义包含 init-method 属性,执行指定的方法。
如果有和加载这个 Bean的 Spring 容器相关的 BeanPostProcessor 对象,执行
postProcessAfterInitialization() 方法。(后置处理器初始化后方法,会进行AOP)
当要销毁 Bean 的时候,如果 Bean 实现了 DisposableBean 接口,执行 destroy() 方法。
当要销毁 Bean 的时候,如果 Bean 在配置文件中的定义包含 destroy-method 属性,执行指定的方法。
后置处理器BeanPostProcessor :在Bean对象在实例化和依赖注入完毕后,在显示调用初始化方法的前后添加我们自己的逻辑。注意是Bean实例化完毕后及依赖注入完成后触发的。后置处理器分为 Bean Factory后置处理器(视线了Spring的扫描)和Bean后置处理器(实现了@ Autowired注解的属性自动赋值、AOP)
bean 标签有两个重要的属性(init-method和destroy-method)。用它们你可以自己定制初始化和注销方法。它们也有相应的注解