初入动态代理技术

初入动态代理技术

1.简介
AOP底层原理就是动态代理技术 。为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。假设有一A对象,对A代理后,A的事情就由A的代理B来完成。
2.与反射关系
动态代理类的源码是在程序运行期间,通过JVM反射等机制动态生成。
3.实现
首先写个接口

public interface UserService {

	void login ();
	@Performance  //仅实现对getUserList的totalTime()
	void getUserList();
}

对接口类的实现

public class UserServerImpl implements UserService{
	@Override
	public void login() {
		// TODO Auto-generated method stub
		System.out.println("调用login");
		System.out.println("调用login");
		System.out.println("调用login");
	}
    public void getUserList() {
		System.out.println("调用getUserList");
		System.out.println("调用getUserList");
		System.out.println("调用getUserList");
	}
}

代理类

public class DyProxy {
	private Object toProxyObj;
	//动态代理技术,生成动态代理对象
	public Object getProxyObject(Object object) {
		this.toProxyObj =object;
		return Proxy.newProxyInstance(object.getClass().getClassLoader(),object.getClass().getInterfaces(), 
		new InvocationHandler() 
		{		
			public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
				Object result;
				if (method.isAnnotationPresent(Performance.class)) {
				long startTime =new Date().getTime();
				//调用原函数
				 result =method.invoke(toProxyObj, args);
				long endTime =new Date().getTime();
				long totalTime =endTime -startTime;
				System.out.println("执行了"+totalTime+"ms");}
				else
				{
					result = method.invoke(toProxyObj, args);
				}
				return result;
			}
		});	}}

测试类

public class TestAOP {
	public void testTime() {
		long startTime =new Date().getTime();
		long endTime =new Date().getTime();
		long totalTime =endTime -startTime;
		System.out.println("执行"+totalTime+"ms");
	}
	public static void main(String[] args) {
		//AOP是面向切面编程,测试性能,统一日志 事务管理
		UserService userService=(UserService) new DyProxy().getProxyObject(new UserServerImpl());
		userService.getUserList();
		userService.login();
	}
}

结果
在这里插入图片描述
4.总结
避免代码混乱。
避免代码分散。
代码重复使用,简化代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值