spring-AOP动态代理

Posted 友情天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring-AOP动态代理相关的知识,希望对你有一定的参考价值。

动态代理 的四个步骤:

  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动态代理的主要内容,如果未能解决你的问题,请参考以下文章

Spring-AOP

spring框架学习6:spring-aop的五种通知类型

spring-AOP(二) 自动代理

JAVA 框架-Spring-AOP面向切面

Spring-AOP

Spring-AOP