今天玩这个挺Happy的~~~没有系统地学习,只是用到的时候临时抱抱佛脚,真的是汗颜啊~~
这篇应该是最不错的:
http://51mynet.blogcn.com/diary,5094753.shtml
它是用来做权限的。作为例子初学不错!嘎嘎~
因为现在系统中,要跟踪一些用户的操作信息,所以用到了代理~目前的实现思路是:
1。写一个接口 IActionProxy, 让每个Action 都实现它。
2。Spring四种通知(Advice)形式中,用到的是Interception Around通知,因为:前后拦截是唯一可以控制目标方法是否被真正调用的拦截类型,也可以控制返回对象。而前置拦截或后置拦截不能控制,它们不能印象目标方法的调用和返回。所以选择这种方式。并写了个拦截器,把要实现的操作都放在这里做。
3。ApplicationContext.xml的定义
- <bean id="actionInterceptor" class="com.ll.aop.ActionInterceptor">bean>
- <bean id="onlineAction" class="com.ll.aop.OnlineAction">bean>
- <bean id="doAction" class="org.springframework.aop.framework.ProxyFactoryBean">
- <property name="proxyInterfaces">
- <value>com.ll.aop.IActionProxyvalue>
- property>
- <property name="interceptorNames">
- <list>
- <value>actionInterceptorvalue>
- <list>
- property>
- <property name="target">
- <ref onlineAction/>
- <property>
- <bean>
在配置文件里头配置下就OK了。
再就是用到了单态模式,去获得下面代码中的代理的bean,在整个系统初始化的时候,就给他分配好了~
- ApplicationContext context = new FileSystemXmlApplicationContext("applicationContext.xml");
- IActionProxy iap = (IActionProxy)context.getBean("doAction");
在项目架构当中,就没必要这么写了.用的是如下的:
java 代码
- WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServletContext());
- IActionProxy iap=(IActionProxy )wac.getBean("doAction") ;
好象这样的思路不对哦,所以只好做费了.......因为target里头的ref只能配置一个,不能用list....所以不能用了.而且,项目比较大,不太好用.
估计是自己对AOP这种机制还不是很熟络的了解.有时间该系统地看看书了....嘎嘎~~~~
这种方式,只能实现单一类的代理,也就是说可以为一个类分配多个拦截器,但是不能把一个拦截器给多个类~~~~