SpringMvc+MyBatis+Shiro整合,shiro的realm不能注入Bean

springMvc+Mybatis和shiro整合,shiro的realm引入Autowire加入接口数据,但是一直无法成功注入,提示问题如下:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: 

No qualifying bean of type [com.sxkj.service.inter.UserServerInter] found for dependency: 

expected at least 1 bean which qualifies as autowire candidate for this dependency.

Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
碰到此问题,一开始以为是springmvc注入配置问题,但是controller注入又都正常,此时陷入百思不得解。一项项跟踪,发现原来shiro 自定义realm的认证阶段属于filter,当时的spring bean还没有读取进来。
最后通过配置web.xml文件,把spring mvc的xml提高一点优先级,才最终解决了这个问题。下面是web.xml完整配置:



  
    contextConfigLocation
    classpath:spring-mybatis.xml,classpath:dispatcher-servlet.xml,classpath:spring-shiro.xml
  
  
    dispatcher
    org.springframework.web.servlet.DispatcherServlet
    
      contextConfigLocation
      classpath:dispatcher-servlet.xml
    
    1
  
  
  
    dispatcher
    /
  

  
    org.springframework.web.context.ContextLoaderListener
  
  
    log4jContextName
    log4jContext
  
  
  
     shiroFilter
     org.springframework.web.filter.DelegatingFilterProxy
     true
    
      targetFilterLifecycle
      true
    
  
  
    shiroFilter 
    /*
  

红色为添加的部分,有碰到此问题的同学可以看看。

执行逻辑

     1 、启动一个 WEB 项目的时候, WEB 容器会去读取它的配置文件 web.xml ,读取  和  两个结点。

     2 、紧急着,容创建一个 ServletContext ( servlet 上下文),这个 web 项目的所有部分都将共享这个上下文。

     3 、容器将  转换为键值对,并交给 servletContext 。

     4 、容器创建  中的类实例,创建监听器。

web.xml 的加载顺序是: context-param -> listener -> filter -> servlet ,而同个类型之间的实际程序调用的时候的顺序是根据对应的 mapping 的顺序进行调用的。

 

 

你可能感兴趣的:(#,Shiro)