由于权限缘由要在filter里使用spring- service所产生的问题

参考:web

加载顺序 http://blog.csdn.net/wayfoon322/article/details/2418011   spring

filter 使用注入bean  http://zy116494718.iteye.com/blog/1918131spa


1. 项目spring使用的是注解方式:在filter里debug看源码,类型里.net

allBeanNamesByType ConcurrentHashMap<K,V>  (id=169) ,是有想要的roleService的,可是在以下代码里就是取不到。总报异常:debug

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'roleManageService' is definedcode


WebApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(request.getServletContext());xml

RoleManageService roleManageService = (RoleManageService) ac.getBean("roleManageService"); blog


2. 试了使用网上的各类接口:接口

实现ApplicationContextAware接口get

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里获取到注解的实例呢?哎,才蔬学浅好郁闷。。

相关文章
相关标签/搜索