zoukankan      html  css  js  c++  java
  • 关于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" />


  • 相关阅读:
    [LeetCode] 90. 子集 II
    [LeetCode] 91. 解码方法
    [LeetCode] 89. 格雷编码
    [LeetCode] 88. 合并两个有序数组
    转:Google论文之三----MapReduce
    转:Google论文之二----Google文件系统(GFS)翻译学习
    转:Zend Framework 2.0 分析
    转:PHP include()和require()方法的区别
    转:cookie和session(二)——php应用
    转:cookie和session(一)——原理
  • 原文地址:https://www.cnblogs.com/xiaoblog/p/4102960.html
Copyright © 2011-2022 走看看