8、配置文件加载与后置处理器

70 阅读1分钟

配置文件加载:

XML形式:

image.png

Java代码方式:

image.png

后置处理器:

Bean的生成过程:

image.png

BeanPostProcessor

BeanPostProcessor是针对Bean级别的处理,可以针对某个具体的Bean。

image.png

该接口提供了两个方法,分别在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);
    }

image.png

BenaFactoryPostProcessor

BeanFactory级别的处理,是针对整个Bean 的工厂进行处理,典型应用: PropertyPlaceholderConfiger

BenaFactoryPostProcessor在Spring 容器中有一个非常典型的应用。

当我们在Spring容器中配置数据源的时候,一般都是按照下面的方式进行配置,首先创建db.properties,将数据源信息写进去:

image.png

然后再Spring的配置文件中,首先把这个配置文件加载进来,然后就可以在Spring Bean中去使用对应的值,如下:

image.png

image.png

image.png

image.png

image.png