博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AOP jdk动态代理
阅读量:6577 次
发布时间:2019-06-24

本文共 2167 字,大约阅读时间需要 7 分钟。

一:

   jdk动态代理是Spring AOP默认的代理方法。要求 被代理类要实现接口,只有接口里的方法才能被代理,主要步骤是先创建接口,接口里创建要被代理的方法,然后定义一个实现类实现该接口,接着将被代理对象注入到一个中间对象,中间对象实现InvocationHandler接口,实现该接口可以在 被代理对象调用它的方法前后插入一些代码。Proxy.newProxyInstance()能利用中间对象来生产代理对象。

二:

(1)创建接口:

package net.wang.aop;/** * 被代理对象必须实现的接口 * @author LiuRuoWang */public interface UserService {		public void addUser(User user);		public User getUser(int id);}

(2)创建实现类:

package net.wang.aop;/** * 被代理对象,必须实现接口 * @author LiuRuoWang */public class UserServiceImpl implements UserService{	public void addUser(User user) {		System.out.println("add User!");	}	public User getUser(int id) {		User user=new User();		user.setId(id);		System.out.println("get User!");		return user;	}	}

(3)创建代理中间类

package net.wang.aop;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;/** * 代理中间类 * @author LiuRuoWang */public class ProxyUtil implements InvocationHandler{		//被代理对象	private Object target;		public void setTarget(Object target) {		this.target = target;	}		public Object getTarget() {		return target;	}		public ProxyUtil(Object target){		this.target=target;	}		public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {		System.out.println("do sth before!");		method.invoke(target, args);		System.out.println("do sth after!");		return null;	}		}

 

(4)pojo类:

package net.wang.aop;/** * User pojo类 * @author LiuRuoWang */public class User {		private Integer id;		private String name;		public void setId(Integer id) {		this.id = id;	}		public Integer getId() {		return id;	}		public void setName(String name) {		this.name = name;	}		public String getName() {		return name;	}}

(5)测试结果

package net.wang.aop;import java.lang.reflect.Proxy;public class ProxyTest {		public static void main(String[] args) {				Object proxyedObject = new UserServiceImpl();				ProxyUtil proxyUtils = new ProxyUtil(proxyedObject);		//生成代理对象,并对这些接口进行代理		UserService proxyObject = (UserService) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), 				UserServiceImpl.class.getInterfaces(),proxyUtils);		proxyObject.getUser(1);		proxyObject.addUser(new User()); 	}}

(6)

转载于:https://www.cnblogs.com/liuruowang/p/4544710.html

你可能感兴趣的文章
centos系统中了一次毒(哇咔咔)DoS:Linux/Xorddos!rfn
查看>>
无线路由器WDS设置方法图解(无线桥接设置)【炮哥】
查看>>
Mysql问题集合。。。
查看>>
网络传输控制
查看>>
如何配置mugo自动下围棋
查看>>
rip的工作原理
查看>>
Web Service单元测试工具实例介绍之SoapUI
查看>>
[李景山php]每天laravel-20161120|MySqlConnector.php
查看>>
CentOS7源码编译安装FreeRadius3.17
查看>>
Redhat7/Centos7 修改默认启动内核方法二
查看>>
我的友情链接
查看>>
java基础语法注意点归纳总结
查看>>
node上HTML分析利器node-jquery
查看>>
利用Node.js为Node.js生成HttpStatusCode辅助类并发布到npm
查看>>
存储器系统课后习题参考答案
查看>>
CodeFile与CodeBehind的区别
查看>>
Ruby on rails初体验(一)
查看>>
CentOS 无法使用pstree命令
查看>>
rsync+inotify实现实时同步
查看>>
Android sdk 镜像服务器资源
查看>>