1 默认装配方式
调用bean类的无参构造,创建空值实例对象,故一般bean类写有参构造时需要写一个无参构造
2 动态工厂Bean
工厂类里方法返回bean
3 静态工厂Bean
方法用static修饰
4 bean的作用域
scope=“singleton”单例模式(默认,初始化时创建bean)
scope=“prototype”原型模式(使用时创建bean)
web应用中:
request:每次http请求产生一个bean
session:
global session:每个全局的http session产生一个bean,仅在集群中不同于session,多个web应用共享一个session。
5 Bean后处理器
一种特殊的bean
需要自定义类实现接口BeanPostProcessor,该接口中包含两个方法分别在bean初始化完毕之前与之后执行(类似拦截器),返回功能变动后bean对象
l类似拦截器,在bean初始化前后做什么
方法一:postProcessBeforeInitialization
方法二:postProcessAfterInitialization
Proxy代理进行增强bean,处理返回bean
6 定制bean的生命始末
init-method = “”
destroy-method = “”
关闭容器才能看到销毁,ApplicationContext接口容器没有关闭方法,
但其实现类ClassPathXmlApplicationContext有
销毁方法的执行条件:bean需要是singleton的;手工关闭容器close
7 bean的生命周期
(1)调用无参构造器,创建实例对象(构造方法)
(2)调用参数的setter,为属性注入值(属性<property>)
(3)若bean实现了BeanNameAware接口,则会执行接口方法setBeanName(String beanId),使Bean类可以获取其在容器中的id的名称
(4)若Bean实现了BeanFactoryAware接口,则执行接口方法setBeanFactory(BeanFactory factory),使Bean类可以获取到BeanFactory对象
(5)若定义并注册了bean后处理器beanPostProcessor,则执行接口方法postProcessBeforeInitialization.
(6)若Bean实现了InitializingBean接口,则执行接口方法afterPropertiesSet()。该方法在Bean的所有属性的set方法执行完毕后执行,是bean初始化结束的标志,即bean实例化结束
(7)若设置了init-method方法,则执行。
(8)若定义并注册了bean后处理器beanPostProcessor,则执行接口方法postProcessAfterInitialization
(9)执行业务方法
(10)若bean实现了DisposableBean接口,则执行接口方法destroy
(11)若设置了destroy-method方法,则执行。