Spring 中的动态代理

分两部分,切面逻辑的设计,切面逻辑的使用。以为很难,其实还好.实际上是还没搞到更难的,自我鼓励下~~

 就那学到的那个做例子做记录,印象会深刻些~  Spring 中的动态代理与struts中的inteceptor,filter,责任链中的chain 原理是一样的,就是在原有的程序顺序上,从另一个角度切入某些操作,做处理,里面有个递归使用,然后返回原调用函数的核心内容,但其实不很重要,知道这个思想并且会用就可以了~

Spring中的使用分两部分:

1)LogInterceptor的设计;

2)测试类中队LogInterceptor的使用,这个更有难度,但记下来熟悉就好了,核心是想起来用动态代理,并用的好~

详细内容:

1)LogInterceptor切面的设计。

public classLogInterceptor implements InvocationHandler {

publicObject target;

publicObject getTarget() {

returntarget;

}

@Resource(name = "u")//本来想使用Spring 的DI对target进行值注入,但是不知道哪儿出错了

publicvoid setTarget(Object target) {

this.target= target;

publicvoid beforeMethod(Method m) {

System.out.println(m.getName()+ " start!");

}

@Override//这个函数很核心哦!

publicObject invoke(Object proxy, Method m, Object[] args)

throwsThrowable {

beforeMethod(m);//先运行beforeMethod方法

m.invoke(target, args);//在调用方法m,target一般为调用这个切面逻辑的对象,但是是在切面逻辑初始化时已经确定的

return null;//返回

}}

2)测试程序

@Test

publicvoid testPoxy(){

UserDAOuserDAO = new UserDAOImpl();

LogInterceptorli = new LogInterceptor();

li.setTarget(userDAO);//对Li的初始化,实现一个aspect的完成的对象,然后插入到程序的正常逻辑中,实现他的作用。

UserDAO userDAOProxy =(UserDAO)Proxy.newProxyInstance(userDAO.getClass().getClassLoader(),userDAO.getClass().getInterfaces(), li);//此处为动态代理的核心部分,产生一个userDAO的动态代理的对象,并插入LI切片的对象。

System.out.println(userDAOProxy.getClass());//打印动态类的对象,打印出来是带$的类名。

userDAOProxy.save(newUser("gao","wenjian"));//此处可看出先运行Li的逻辑,然后运行userDAO的save方法。 

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值