• 关于Spring的BeanPostProcessor


    BeanPostProcessor接口作用是:如果我们需要在Spring容器完成Bean的实例化、配置和其他的初始化前后添加一些自己的逻辑处理,我们就可以定义一个或者多个BeanPostProcessor接口的实现,然后注册到容器中。、

    比如如果我们使用spring整合hibernate,我们可以在容器实例化前先加载hibernate的配置文件:

    public class MappingFactoryBean implements FactoryBean {
        private static Logger log = LoggerFactory
                .getLogger(MappingFactoryBean.class);

        public Object getObject() throws Exception {
            List<String> configs = ApplicationContext.getContext().getApplication()
                    .getMappingConfigs();
            log.debug("************* hibernate configs: " + configs);
            return configs.toArray(new String[configs.size()]);
        }

        public Class<?> getObjectType() {
            return String[].class;
        }

        public boolean isSingleton() {
            return true;
        }
    }

    public class MappingAutowiring implements BeanPostProcessor {
        private static Logger log = LoggerFactory
                .getLogger(MappingAutowiring.class);

        private String[] mappingResources;

        public String[] getMappingResources() {
            return mappingResources;
        }

        public void setMappingResources(String[] mappingResources) {
            this.mappingResources = mappingResources;
        }

        public Object postProcessBeforeInitialization(Object bean, String beanName)
                throws BeansException {
            if (bean instanceof LocalSessionFactoryBean) {
                log.debug("============ MappingAutowiring: " + mappingResources);
                ((LocalSessionFactoryBean) bean)
                        .setMappingResources(mappingResources);
            }
            return bean;
        }

        public Object postProcessAfterInitialization(Object bean, String beanName)
                throws BeansException {
            return bean;
        }
    }    

    beans.xml 配置如下:  

        <bean id="mappingAutowiring"
            class="xx.MappingAutowiring">
            <property name="mappingResources" ref="mappingResources" />
        </bean>
        <bean id="mappingResources"
            class="xx.MappingFactoryBean" />


  • 相关阅读:
    [BZOJ2738]矩阵乘法
    [BZOJ2084][Poi2010]Antisymmetry
    [BZOJ2095][Poi2010]Bridges
    [BZOJ1294][SCOI2009]围豆豆Bean
    [AtCoderContest075F]Mirrored
    [AtCoderContest015D]A or...or B Problem
    [UOJ#276]【清华集训2016】汽水
    忠诚的皇家守卫团——中间件
    Django(五):视图和路由系统
    Django(四):ORM
  • 原文地址:https://www.cnblogs.com/xiaoblog/p/4102960.html
Copyright © 2020-2023  润新知