使用Spring和SpringMVC管理bean时要注意的一个小细节
最近一直在做毕业设计...用到了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里的写法是
<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的启示以后又去网上搜索了下资料...发现确实是这样..
资料在这里:
我的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和SpringMVC管理bean时要注意的一个小细节的更多相关文章
- (转)让Spring自动扫描和管理Bean
http://blog.csdn.net/yerenyuan_pku/article/details/52861403 前面的例子我们都是使用XML的bean定义来配置组件.在一个稍大的项目中,通常会 ...
- Spring、Spring自动扫描和管理Bean
Spring2.5为我们引入了组件自动扫描机制,它可以在类路径下寻找标记了@Component.@Service.@Controller.@Repository注解的类,并把这些类纳入到spring容 ...
- Spring是如何管理Bean
容器是什么?spring中是如何体现的?一直有疑惑,这两天看了一下Spring管理bean的Demo,对于Spring中的容器有了简单的认识. 我们知道,容器是一个空间的概念,一般理解为可盛放物体的地 ...
- Spring第八发—自动装配及让Spring自动扫描和管理Bean
依赖注入–自动装配依赖对象(了解即可) 对于自动装配,大家了解一下就可以了,实在不推荐大家使用.例子: byName:按名称装配,可以根据属性的名称,在容器中寻找跟该属性名相同的bean,如果没有找到 ...
- Spring.Net在ASP.NET Mvc里使用的一个小例子
就贴个小例子,就不注意格式了. 1.下载dll NuGet的下载地址:http://docs.nuget.org/docs/start-here/installing-nuget 在vs的NuGet里 ...
- 写jsp文件时需要注意的一些小细节
①jsp文件的最开始的部分: <%@ page language="java" contentType="text/html; charset=UTF-8" ...
- 使用 Nexus 搭建私服仓库时我犯的一个小错误
私服搭建好,啥都配置好了,纳闷的是 Repositories 中的 group 为何总是空值?我还反反复复删了又重建,结果还是一样,不经意间再看 Configuration 选项卡的内容,发现左右两个 ...
- 开启新项目时启动tomcat的一个小问题
Application context 这里为啥只有是空的,才能正常启动tomcat?
- Spring中管理Bean以及解析XML
Spring是分层的轻量级框架 以IoC(Inverse of Control 反转控制)和AOP(Aspect Oriented Programming 面向切面编程)为核心 应用Spring的好处 ...
随机推荐
- Python简单爬虫入门二
接着上一次爬虫我们继续研究BeautifulSoup Python简单爬虫入门一 上一次我们爬虫我们已经成功的爬下了网页的源代码,那么这一次我们将继续来写怎么抓去具体想要的元素 首先回顾以下我们Bea ...
- git 设置代理服务器
git可以通过以下命令设置代理服务器 git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:proxypo ...
- js数组中的常用方法总结
栈方法(后进先出) ArrayObj.push()方法 ArrayObj.pop()方法 ArrayObj.push():就是向数组末尾添加新的元素,返回的是数组新的长度.ArrayObj.pop() ...
- UVA11525 Permutation[康托展开 树状数组求第k小值]
UVA - 11525 Permutation 题意:输出1~n的所有排列,字典序大小第∑k1Si∗(K−i)!个 学了好多知识 1.康托展开 X=a[n]*(n-1)!+a[n-1]*(n-2)!+ ...
- 十连测Day1 题解
A. 奥义商店 有一个商店,n个物品,每个物品有一个价格和一种颜色. 有m个操作,操作有两种,一种是修改一个位置的价格,另一种是购买,每次购买指定一个公差d和一个位置k,找到包含这个位置k公差为d的同 ...
- 国内外前端(js)开发框架对比
国内外前端开发框架对比 首先我们先对目前国内外主流前端开发框架做一个基本的了解,之后再对他们进行一个直观的对比. Bootstrap Bootstrap(http://www.bootcss.com) ...
- Dump中查看DataTime时间方法
例如: 步骤一:根据DumpVC命令获取时间对象信息.需要MT 和 Value参数. 步骤二:根据得到上上面值,执行:? & 0x3FFFFFFFFFFFFFFF.注意:0n 签名是零,不是英 ...
- 关于 MonoDevelop on Linux 单步调试问题的解决
在 MonoDevelop 中默认是关闭对外部程序集(.dll)的调试,可通过如下步骤来解决这个问题. 通过菜单[Edit]-[Preferences]-[Debugger]进入到调试器的设置页,把“ ...
- C#、ASP.NET获取当前应用程序的绝对路径,获取程序工作路径 (转帖)
C#.ASP.NET获取当前应用程序的绝对路径,获取程序工作路径 ============================================ 使用 Application.Start ...
- 用机器名访问和用Localhost访问时在IE中的区别(备忘)
meta中未指定文档模式的时候, localhost访问文档模式默认是Edge 机器名访问时文档模式默认是IE7 <head>中添加 <meta http-equiv="X ...