String Aop 动态代理例子
来源:互联网 发布:软件科技公司名称大全 编辑:程序博客网 时间:2024/06/06 10:53
动态代理原理:spring AOP采用动态代理来实现
(1)定义一个接口Boy
package aop001;public interface Boy { public void beat(String time); public void play(String time);}
(2)定义两个类实现Boy接口:
Boy_1
package aop001;public class Boy_1 implements Boy { @Override public void beat(String time) { System.out.println("我是boy1"); System.out.println(time+"敲代码"); } @Override public void play(String time) { System.out.println("我是boy1"); System.out.println(time+"玩游戏"); }}
Boy_2
package aop001;public class Boy_2 implements Boy{ @Override public void beat(String time) { System.out.println("我是boy2"); System.out.println(time+"敲代码"); } @Override public void play(String time) { System.out.println("我是boy2"); System.out.println(time+"玩游戏"); }}
(3)定义一个动态代理类并实现InvocationHandler接口
package aop001;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class BoyInvocationHandler implements InvocationHandler { //定义一个Object对象,保存目标 private Object targer;// 目标是不固定 //添加构造方法,可以通过构造方法给target赋值 public BoyInvocationHandler(Object targer) { this.targer = targer; } //非核心业务的代码由动态代理来管理 //定义一个前置任务的方法 private void before(){ // 前置任务 System.out.println("[代理执行前置]起床"); System.out.println("[代理执行前置]刷牙洗脸"); System.out.println("[代理执行前置]吃饭"); System.out.println("*****************"); } //定义一个后置任务的方法 private void after(){ // 后置任务 System.out.println("*****************"); System.out.println("[代理执行后置]洗澡"); System.out.println("[代理执行后置]睡觉"); System.out.println(""); } //调用invoke方法 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //调用前置任务的方法 before(); //获取类里面的方法的返回值 Object returnValue=method.invoke(targer, args); //调用后置任务的方法 after(); return returnValue; } }
(4)新建一个Test测试类
package aop001;import java.lang.reflect.Proxy;public class Test { public static void main(String[] args) { //第一步:创建目标实现类的实例 Boy b1=new Boy_1(); Boy b2=new Boy_2(); //第二步:创建一个动态代理类(CEO 首席执行官) BoyInvocationHandler handler1 = new BoyInvocationHandler(b1); BoyInvocationHandler handler2 = new BoyInvocationHandler(b2); //第三步:创建动态代理(跟静态代理一样,申明的变量仍然是目标的接口) Boy girlProxy1 = (Boy) Proxy.newProxyInstance( b1.getClass().getClassLoader(), b1.getClass().getInterfaces(), handler1); //调用方法 girlProxy1.beat("周六"); girlProxy1.play("周日"); Boy girlProxy2 = (Boy) Proxy.newProxyInstance( b2.getClass().getClassLoader(), b2.getClass().getInterfaces(), handler2); girlProxy2.beat("周六"); girlProxy2.play("周日"); }}
(5)运行结果:
[代理执行前置]起床
[代理执行前置]刷牙洗脸
[代理执行前置]吃饭
*****************
我是boy1
周六敲代码
*****************
[代理执行后置]洗澡
[代理执行后置]睡觉
[代理执行前置]起床
[代理执行前置]刷牙洗脸
[代理执行前置]吃饭
*****************
我是boy1
周日玩游戏
*****************
[代理执行后置]洗澡
[代理执行后置]睡觉
[代理执行前置]起床
[代理执行前置]刷牙洗脸
[代理执行前置]吃饭
*****************
我是boy2
周六敲代码
*****************
[代理执行后置]洗澡
[代理执行后置]睡觉
[代理执行前置]起床
[代理执行前置]刷牙洗脸
[代理执行前置]吃饭
*****************
我是boy2
周日玩游戏
*****************
[代理执行后置]洗澡
[代理执行后置]睡觉
(6)当我们需要更改非核心代码时,我们只要更改一处就可以了。
谢谢!
0 0
- String Aop 动态代理例子
- Spring AOP动态代理例子
- JAVA AOP 动态代理 的例子
- Aop 代理 动态代理
- JAVA动态代理实现aop的简单例子
- (spring AOP)VS(动态代理的例子)
- AOP代理之动态代理
- AOP代理之动态代理
- 代理模式 动态代理 AOP
- AOP动态代理
- AOP之动态代理
- 动态代理&AOP
- Spring Aop 动态代理
- aop入门:动态代理
- AOP基础--动态代理
- Spring AOP动态代理
- Spring AOP 动态代理
- spring aop动态代理
- HTML入门的简单学习
- 在Ubuntu16.10上安装docker ce
- Minimum Window Substring
- 垃圾回收
- &= 的含义
- String Aop 动态代理例子
- Spring 事务管理
- SofTech.Cadra.v2006plus\
- 重载
- CSS入门级学习
- oracle中date类型数据的操作
- struts2+spring+hibernate 实现分页
- 【转载】【VSCode】Windows下VSCode编译调试c/c++
- break 与 continue