标签:
参考:
加载顺序 http://blog.csdn.net/wayfoon322/article/details/2418011
filter 使用注入bean http://zy116494718.iteye.com/blog/1918131
1. 项目spring使用的是注解方式:在filter里debug看源码,类型里
allBeanNamesByType ConcurrentHashMap<K,V> (id=169) ,是有想要的roleService的,但是在如下代码里就是取不到。总报异常:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named ‘roleManageService‘ is defined
WebApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(request.getServletContext());
RoleManageService roleManageService = (RoleManageService) ac.getBean("roleManageService");
2. 试了使用网上的各种接口:
实现ApplicationContextAware接口
extends ContextLoaderListener implements ServletContextListener
等等,还是获取不到bean实例
3. 最后试着将这个RoleManageService改成了xml配置方式, 终于在filter里获取到了,还是用1。的方法获取,观察下面这两张debug的截图
<bean id="roleManageService" class="com.ljq.service.RoleManageService" > <property name="roleManageDao"> <ref bean="roleManageDao"/> </property> </bean>
图1
图2
图1是使用注解的方式,allBeanNamesByType里有role的实例,构造器没有role实例,getBean的时候获取异常。
图2是使用XML配置的方式,allBeanNamesByType里有role的实例,构造器有role实例,getBean的时候正常。
4.基于上述原因,我想应该是在web加载顺序的时候,
spring容器的注解方式在filter之后,导致获取不到报异常。
spring容器的xml配置方式在filter之前,所以能获取到。
so.将这些要使用在filter的实例改成了xml配置方式,其它的还是用注解
但我参考别人的文章,人家为什么能在filter里获取到注解的实例呢?哎,才蔬学浅好郁闷。。
因为权限原因要在filter里使用spring- service所产生的问题
标签:
原文地址:http://my.oschina.net/kelvinline/blog/486685