Hello Mr.J——请把我埋在这Spring里
来源:互联网 发布:伟尔金融软件 编辑:程序博客网 时间:2024/04/30 15:30
上上篇博客中写的要逐个击破SSH,先从Spring开始。
Spring主要常用的有两个方面,控制反转实现依赖注入和面向切面编程。
控制反转这边好说,我们用过很多次了,将对象交给容器来管理,并且用容器的getInstance等类似的方法通过反射得到对象。
这次来研究研究AOP。
在.Net权限中要用到动态设置数据源的情况,我们把数据库的连接字符串保存到一个表中,之后再查询数据或是提交数据的时候将数据库连接字符串一起传过来,然后再设置数据源。
效果是实现了,但是有一个很严峻的问题就是这样子做的话,需要更改的代码太多,是每一个WCF层的逻辑都要更改,因为你不知道用户第一次会使用哪一个方法,除非我们把业务逻辑写死,用户进来就必须先执行一个方法,再进行其他操作。
不过嘛,这样子太死了,没什么意思,万一逻辑改了,这玩意就废了。
所以,经过和师哥的简单讨论,我最后定了一个可行的方案,使用AOP来拦截WCF层的参数,获得这个参数中的数据库连接字符串,并且设置数据源。
讲道理的话,这套方案是没问题的,问题就在于AOP拦截参数这个代码怎么写。。。
.Net这边资料实在是少得令人发指,连官网我都翻了,都没找到一个能看得例子,所以只能采用曲线救国的方案,先学习JAVA怎么拦的,再回.Net。
首先啊,我们要拦截的类要使用Spring来管理起来,我先定义一个Managetest用来调用Methodtest的方法,然后通过依赖注入将Methodtest注入Managetest类中,所以就有一个这样子的配置文件
<bean id="Managetest" class="manage.Managetest" scope="prototype"><property name="myMethod" ref="Methodtest"></property></bean><bean id="Methodtest" class="manage.Methodtest" scope="prototype"></bean>然后,随便定义一个切面类。比如这样。
public class Aspect {public void beforeMethod() {System.out.println("aLIEz");}}最后在再配置文件写一下就好了。
<aop:config proxy-target-class="true"><aop:aspect ref="Aspect"><aop:pointcut id="AOPtest"expression="execution(* manage.Managetest.*(..)) /><aop:before pointcut-ref="AOPtest" method="beforeMethod" /></aop:aspect></aop:config>这样子,再执行methodtest的任意方法都能显示切面类中的字符了。
最后在研究一下参数这个需求,其实就是改改expression中的表达式,和切面类。
public class Methodtest {public void diaoyong(String str) {System.out.println(str);}}表达式改成这样。
<aop:config proxy-target-class="true"><aop:aspect ref="Aspect"><aop:pointcut id="AOPtest"expression="execution(* manage.Managetest.*(..)) and args(strTest)" /><aop:before pointcut-ref="AOPtest" method="beforeMethod"arg-names="strTest" /></aop:aspect></aop:config>看来Spring中的AOP配置的关键就在于这个表达式,抽时间研究研究。
- Hello Mr.J——请把我埋在这Spring里
- 请把我埋在新闻联播里
- Hello Mr.J——tomcat优化
- Hello Mr.J——shiro+springmvc
- Hello Mr.J——shiro+cas
- Hello Mr.J——SQL分类
- Hello Mr.J——开个新坑,Docker!
- Hello Mr.J——Docker
- Hello Mr.J——Docker
- Hello Mr.J——Docker
- Hello Mr.J——Docker
- 如果有一天我老无所依,请把我埋在这春天里
- Hello Mr.J——J2EE规范自用总结
- Hello Mr.J——SSH简单自用向总结
- Hello Mr.J——用CXF框架发布WebService
- Hello Mr.J——WebService传递Map类型
- Hello Mr.J——shiro 简单地认识
- Hello Mr.J——shiro 实现session共享
- mysql 几个有用 sql 语句
- 浅谈-----HTTP那些事
- nginx的基本配置和虚拟主机的配置
- 初学python转义字符
- 解决VS2010链接错误:LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- Hello Mr.J——请把我埋在这Spring里
- 装饰器设计模式
- C语言关键字
- HDU ACM 1050 Moving Tables
- DelegatingActionProxy
- mysql性能浅述——罗列所有表
- 平衡二叉树(AVL树)的查找,插入和删除
- java基础的学习
- linux系统vi命令编辑后Ctrl+s“死机”