配置文件加载:
XML形式:
Java代码方式:
后置处理器:
Bean的生成过程:
BeanPostProcessor
BeanPostProcessor是针对Bean级别的处理,可以针对某个具体的Bean。
该接口提供了两个方法,分别在Bean的初始化方法前和方法后执行,具体的初始化方法是我们在定义bean的时候定义的方法。
定义一个类实现BeanPostProcessor接口,默认会对整个Spring容器中的所有bean进行处理。 如果要对具体的某个bean 处理,可以通过方法参数判断,两个参数类型分别是Object 和String, 第一个参数是每个bean的实例, 第二个参数是每个bean 的name 或者是 id的属性值。 我们可以通过第二个参数,来判断要处理的bean。
例如给bean增加属性:
/**
* 初始化 就是Bean的初始化方法
* @param bean
* @param beanName
* @return
* @throws BeansException
*/
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("在初始化之前");
System.out.println("bean.getClass() = " + bean.getClass());
System.out.println("beanName = " + beanName);
if (beanName.equals("user")){
User user = (User) bean;
System.out.println("((User) bean).getUsername() = " + ((User) bean).getUsername());
// ((User) bean).setUsername("zhangsan");
return bean;
}
return BeanPostProcessor.super.postProcessBeforeInitialization(bean, beanName);
}
BenaFactoryPostProcessor
BeanFactory级别的处理,是针对整个Bean 的工厂进行处理,典型应用: PropertyPlaceholderConfiger
BenaFactoryPostProcessor在Spring 容器中有一个非常典型的应用。
当我们在Spring容器中配置数据源的时候,一般都是按照下面的方式进行配置,首先创建db.properties,将数据源信息写进去:
然后再Spring的配置文件中,首先把这个配置文件加载进来,然后就可以在Spring Bean中去使用对应的值,如下: