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" />


  • 相关阅读:
    P3图片导致iOS9.3以下崩溃问题
    [ios] 如何调用其他app h5界面调用打开app
    Swift学习中遇到的小坑
    代码行数统计(mac)
    路径专题 绝对路径 根路径 相对路径
    java.lang.StackOverflowError 解决办法
    Myeclipse运行提示错误: 找不到或无法加载主类 test.test1 终极解决办法
    myeclipse的最有用的设置
    关闭myeclipse可视化视图
    数据三大范式
  • 原文地址:https://www.cnblogs.com/xiaoblog/p/4102960.html
Copyright © 2011-2022 走看看