使用Spring和SpringMVC管理bean时要注意的一个小细节
2015-06-09 23:29
197 查看
最近一直在做毕业设计...用到了Shiro和SpringMVC..用过shiro的朋友都知道shiro需要自己去写Realm,然后把Realm注入到SecurityManager中.而SecurityManager是shiro自带的类..我不可能去修改源码,增加注解,所以配置这个Realm bean的时候使用的是XML的配置方式..而又因为整个项目使用到了SpringMVC,我自己写的类基本都是用注解去配置的..然后就有了这么一个问题...我的问题与配置和http://www.oschina.net/question/238156_142131这篇文章基本一样.
简单来说就是我在shiro.xml里配置了一个Realm bean,然后要在Realm类里注入注解配置的XXXDao..
shiro.xml通过Spring的ContextLoaderListener来加载.
我一开始在shiro.xml里的写法是
然后再这个Realm里
结果是我得到的Realm里面注入的XXXDao都是null...
然后我网上搜索了下...但是感觉都不太靠谱...然后去CSDN上请教了下大神们
http://bbs.csdn.net/topics/391014289
得到2L的启示以后又去网上搜索了下资料...发现确实是这样..
资料在这里:
http://www.dewen.io/q/16682/spring%20mvc%E7%9A%84%E7%88%B6%E5%AD%90%E4%B8%8A%E4%B8%8B%E6%96%87(WebApplicationContext)%E7%9A%84%E4%BD%9C%E7%94%A8%E8%8C%83%E5%9B%B4%EF%BC%8C%E5%8C%BA%E5%88%AB%E3%80%81%E5%BD%B1%E5%93%8D%E9%9D%A2%E6%8F%90%E7%8E%B0%E5%9C%A8%E5%93%AA%E9%87%8C%EF%BC%9F
我的XXXDao配置在了SpringMVC的配置里(mvc-dispatcher-servlet.xml)..而SpringMVC是子上下文环境(通过servlet来配置,指定配置文件位置)..shiro是在父上下文环境里配置的(通过ContextLoaderListener来加载)..所以读取不到SpringMVC里配置的bean....
知道问题以后解决方案就明晰了..将XXXDao配置到父环境里就OK了..
比如:
web.xml里
shiro.xml里就原样配置..
spring.xml里配置
这样注解读取的bean也就在父环境里了(我原来component-scan是配置在mvc-dispatcher-servlet.xml子环境里的)...
简单来说就是我在shiro.xml里配置了一个Realm bean,然后要在Realm类里注入注解配置的XXXDao..
shiro.xml通过Spring的ContextLoaderListener来加载.
我一开始在shiro.xml里的写法是
<bean id="mySQLRealm" class="jiang.app.realm.MySQLRealm"/>
然后再这个Realm里
public class MySQLRealm extends AuthorizingRealm { private static Logger logger = Logger.getLogger(AuthorizingRealm.class); @Resource RoleDao roleDao; @Resource UserDao userDao; ......... }
结果是我得到的Realm里面注入的XXXDao都是null...
然后我网上搜索了下...但是感觉都不太靠谱...然后去CSDN上请教了下大神们
http://bbs.csdn.net/topics/391014289
得到2L的启示以后又去网上搜索了下资料...发现确实是这样..
资料在这里:
http://www.dewen.io/q/16682/spring%20mvc%E7%9A%84%E7%88%B6%E5%AD%90%E4%B8%8A%E4%B8%8B%E6%96%87(WebApplicationContext)%E7%9A%84%E4%BD%9C%E7%94%A8%E8%8C%83%E5%9B%B4%EF%BC%8C%E5%8C%BA%E5%88%AB%E3%80%81%E5%BD%B1%E5%93%8D%E9%9D%A2%E6%8F%90%E7%8E%B0%E5%9C%A8%E5%93%AA%E9%87%8C%EF%BC%9F
我的XXXDao配置在了SpringMVC的配置里(mvc-dispatcher-servlet.xml)..而SpringMVC是子上下文环境(通过servlet来配置,指定配置文件位置)..shiro是在父上下文环境里配置的(通过ContextLoaderListener来加载)..所以读取不到SpringMVC里配置的bean....
知道问题以后解决方案就明晰了..将XXXDao配置到父环境里就OK了..
比如:
web.xml里
<context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:spring.xml classpath:spring-hibernate.xml, classpath:shiro.xml </param-value> </context-param>
shiro.xml里就原样配置..
spring.xml里配置
<context:component-scan base-package="jiang" />
这样注解读取的bean也就在父环境里了(我原来component-scan是配置在mvc-dispatcher-servlet.xml子环境里的)...
相关文章推荐
- spring配置hibernate的sessionFactory的几种方法
- Spring使用教程(三)注解1
- 读书笔记 之 java编程思想3
- 如何让Java类不可变
- 2015第24周二Spring事务2
- 初学struts心得体会
- java之Set源码浅析
- 创建和导入java doc
- Eclipse与MyEclipse的选择问题
- 用java将excel中数据导入mysql
- java api sort的使用
- java框架中的适配器模式
- java的replace和replaceAll
- java中length、length()、size()的区别
- 添加JavaDoc
- java集合框架详解(三)、List接口
- Java String类型时间比较大小
- java中a++和++a在较复杂的运算中分析
- java中队和栈的区别<摘自百度知道>
- java实现qq聊天室功能