问题:bean重复加载
1.如下代码所示,开启Configuration注解,实现Bean代码注入,发现bean重复加载
@Configuration public class EhCacheConfig { @Bean(name="cacheManagerFactoryBean") public EhCacheManagerFactoryBean ehCacheManagerFactoryBean(){ EhCacheManagerFactoryBean cacheManagerFactoryBean = new EhCacheManagerFactoryBean(); cacheManagerFactoryBean.setConfigLocation(new ClassPathResource("ehcache.xml")); cacheManagerFactoryBean.setShared (true); return cacheManagerFactoryBean; } @Bean(name="ehCacheFactoryBean") public EhCacheFactoryBean ehCacheFactoryBean(){ EhCacheFactoryBean ehCacheFactoryBean = new EhCacheFactoryBean(); ehCacheFactoryBean.setCacheManager(ehCacheManagerFactoryBean().getObject()); ehCacheFactoryBean.setCacheName("accountCacheName"); return ehCacheFactoryBean; } @Bean(name="cache") public Cache cache(){ EhCacheCache cache = new EhCacheCache(ehCacheFactoryBean().getObject()); return cache; } }
2.spring.xml扫描配置
<context:component-scan base-package="com.bsoft.platform" > <context:include-filter type="annotation" expression="org.springframework.stereotype.Service" /> </context:component-scan>
3.spring-mvc扫描配置
<context:component-scan base-package="com.bsoft.platform" use-default-filters="true"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan>
4.解决:
在spring-mvc上加上exclude-filter,排除不需要扫描的注解,代码如下所示
<context:component-scan base-package="com.bsoft.platform" use-default-filters="true">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
<context:exclude-filter type="annotation" expression="org.springframework.context.annotation.Configuration" />
</context:component-scan>
或者这样排除springmvc不需要扫描的类
<context:exclude-filter type="regex" expression="com.bsoft.platform..*Config" />