使用监听器对Spring bean id进行唯一校验


       因为Spring IOC容器启动加载时会检查bean定义是否有重复,如果有重复则会根据AbstractRefreshableApplicationContext类中的allowBeanDefinitionOverriding属性值进行判断,如果值为true,则把后加载的bean覆盖前面加载的bean定义,如果为false则抛出BeanDefinitionStoreException异常。 所以,解决这个问题的办法就比较简单了,只要将这个allowBeanDefinitionOverriding值在spring初始化的时候设置为false就行了。具体步骤如下:

1.自定义一个ContextLoader

Java代码    收藏代码
  1. /** 
  2.  * ClassName:MyContextLoader <br/> 
  3.  * Function: 自定义ContextLoader. <br/> 
  4.  * Date:     2013-1-18 下午03:53:16 <br/> 
  5.  * @author   chenzhou 
  6.  * @version   
  7.  * @since    JDK 1.6 
  8.  */  
  9. public class MyContextLoader extends ContextLoader {  
  10.   
  11.     /** 
  12.      * 设置allowBeanDefinitionOverriding属性为false,spring ioc容器在加载bean的过程中会去判断beanName 是否有重复,. <br/> 
  13.      * 如果发现重复的话再根据allowBeanDefinitionOverriding 这个成员变量,. <br/> 
  14.      * 如果是false的话则抛出BeanDefinitionStoreException 这个异常,如果为true的话就会覆盖这个bean的定义. <br/> 
  15.      * @see org.springframework.web.context.ContextLoader#customizeContext(javax.servlet.ServletContext,  
  16.      *      org.springframework.web.context.ConfigurableWebApplicationContext) 
  17.      */  
  18.     @Override  
  19.     protected void customizeContext(ServletContext servletContext, ConfigurableWebApplicationContext applicationContext){  
  20.         super.customizeContext(servletContext, applicationContext);  
  21.         XmlWebApplicationContext context = (XmlWebApplicationContext) applicationContext;  
  22.         //设置allowBeanDefinitionOverriding属性为false  
  23.         context.setAllowBeanDefinitionOverriding(false);  
  24.     }  
  25.       
  26. }  

 2.自定义一个ContextLoaderListener

Java代码    收藏代码
  1. /** 
  2.  * ClassName:MyContextLoaderListener <br/> 
  3.  * Function: 自定义ContextLoaderListener. <br/> 
  4.  * Date:     2013-1-18 下午04:12:00 <br/> 
  5.  * @author   chenzhou 
  6.  * @version   
  7.  * @since    JDK 1.6 
  8.  */  
  9. public class MyContextLoaderListener extends ContextLoaderListener {  
  10.     @Override  
  11.     protected ContextLoader createContextLoader(){  
  12.         return new MyContextLoader();  
  13.     }  
  14.   
  15. }  

 3.修改web.xml文件的监听器配置

Xml代码    收藏代码
  1. <!-- 自定义的ContextLoaderListener -->  
  2. <listener>  
  3.     <listener-class>com.chenzhou.examples.erm.util.listener.MyContextLoaderListener</listener-class>  
  4. </listener>  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值