1. 三种实例化Bean的方式
a.使用类构造器实例化(默认无参数)
<bean id=“personService" class="com.baidu..PersonServiceImpl"/>
b.使用静态工厂方法实例化(简单工厂模式)
<bean id="personService"
class="com.baidu.factory.PersonServiceFactory" factory-method="createPersonService" />
public class PersonServiceFactory {
public static PersonService createPersonService(){
return new PersonServiceImpl();
}
}
c.使用实例工厂方法实例化(工厂方法模式):
<bean id=“personServiceFactory" class="com.baidu.factory.PersonServiceFactory"/>
<bean id="personService" factory-bean=“personServiceFactory"
factory-method="createPersonService" />
public class PersonServiceFactory {
public PersonService createPersonService(){
return new PersonServiceImpl();
}
}
Bean的命名 id属性和name属性
- 一般情况下,装配一个Bean时,通过指定一个id属性作为Bean的名称
- id 属性在IoC容器中必须是唯一的
- id 的命名要满足XML对ID属性命名规范,必须以字母开始,可以使用字母、数字、连字符、下划线、句号、冒号
注意:
如果Bean的名称中含有特殊字符,就需要使用name属性。
例如:<bean name="#person" class="com.baidu.pojo.Person"/
>
因为name属性可以相同,所以后出现Bean会覆盖之前出现的同名的Bean
Bean的作用域
Spring容器中Bean的生命周期
<bean id=“foo” class=“...Foo”
init-method=“setup”
destory-method=“teardown”/>
注意
当bean被载入到容器的时候调用setup
当bean从容器中删除的时候调用teardown(scope= singleton有效)
- instantiate bean对象实例化
- populate properties 封装属性
- 如果Bean实现BeanNameAware 执行 setBeanName
- 如果Bean实现BeanFactoryAware 或者 ApplicationContextAware 设置工厂 setBeanFactory 或者上下文对象 setApplicationContext
- 如果存在类实现 BeanPostProcessor(后处理Bean) ,执行postProcessBeforeInitialization
- 如果Bean实现InitializingBean 执行 afterPropertiesSet
- 调用 指定初始化方法 init
- 如果存在类实现 BeanPostProcessor(处理Bean) ,执行postProcessAfterInitialization
- 执行业务处理
- 如果Bean实现 DisposableBean 执行 destroy
- 调用 指定销毁方法 customerDestroy