首页 > 编程语言 > 详细

spring-AOP动态代理

时间:2017-10-18 21:30:13      阅读:204      评论:0      收藏:0      [点我收藏+]

动态代理 的四个步骤:

  1. 通过实现 InvocationHandler 接口创建自己的调用处理器;

  2. 通过为 Proxy 类指定 ClassLoader 对象和一组 interface 来创建动态代理类;

  3. 通过反射机制获得动态代理类的构造函数,其唯一参数类型是调用处理器接口类型;

  4. 通过构造函数创建动态代理类实例,构造时调用处理器对象作为参数被传入

 1 package com.yztc.aop;
 2 
 3 import java.lang.reflect.InvocationHandler;
 4 import java.lang.reflect.Method;
 5 import java.lang.reflect.Proxy;
 6 
 7 public class AccountProxy implements InvocationHandler {
 8     //代理目标对象
 9     private Object target;
10     public Object newProxyInstance(Object object){
11         this.target= object;
12         return
13                 Proxy.newProxyInstance(object.getClass().getClassLoader(),object.getClass().getInterfaces(),this);
14 
15     }
16 
17 
18     @Override
19     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
20         System.out.println("start---->代理类开始工作!!");
21         for (int i = 0; i < args.length; i++) {
22             System.out.println(args[i]);
23 
24         }
25         //在执行核心方法之前使用能够调用公共的操作
26         System.out.println("调用核心方法之前");
27         //要执行的核心方法
28         Object invoke = method.invoke(target, args);
29         System.out.println("调用核心方法之后");
30         return invoke;
31     }
32 
33 }
1 package com.yztc.aop;
2 
3 public interface IAccountDao {
4     void add(String name);
5     void delete(String uid);
6 }
 1 package com.yztc.aop;
 2 
 3 public class AccountDaoImpl implements IAccountDao {
 4 
 5     @Override
 6     public void add(String name) {
 7         System.out.println("add:==="+name);
 8     }
 9 
10     @Override
11     public void delete(String uid) {
12         System.out.println("delete"+uid);
13     }
14 
15 }
 1 package com.yztc.aop;
 2 
 3 import com.yztc.aop.bean.AccountDaoImpl2;
 4 import com.yztc.aop.bean.CglibProxy;
 5 
 6 public class TestMain {
 7     public static void main(String[] args) {
 8         IAccountDao accountDao = (IAccountDao) new AccountProxy().newProxyInstance(new AccountDaoImpl());
 9         accountDao.add("xiaoming");
10         accountDao.delete("1");
11 }

 

spring-AOP动态代理

原文:http://www.cnblogs.com/1218-mzc/p/7688883.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!