jdk实现动态代理

 AOP的拦截功能是由java中的动态代理来实现的。简单的解释一下这两个概念

AOP:Aspect-Oriented Programming(面向切面的编程),简单来说,一开始横着编程,现在竖着编程(主要是Interceptor(拦截器))

动态代理:举个例子,方便理解。简单来说,就是在一个方法执行前后面加log。

下面来看看实例:

 

1.定义接口和实现

public interface UserService {
	public void save();
}
public class UserServiceImpl implements UserService{

	public void save() {
		System.out.println("saved");
	}
	
}

2.jdk实现动态代理

1)创建调用处理程序

public class MyInvocationHandler implements InvocationHandler {
	
    private Object target;  
    
    MyInvocationHandler() {  
        super();  
    }  
  
    public MyInvocationHandler(Object target) {  
        super();  
        this.target = target;  
    }  

	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		 if("save".equals(method.getName())){  
	            System.out.println("++++++before " + method.getName() + "++++++");  
	            Object result = method.invoke(target, args);  
	            System.out.println("++++++after " + method.getName() + "++++++");  
	            return result;  
	        }else{  
	            Object result = method.invoke(target, args);  
	            return result;  
	        }  
	}
	
}
2)创建动态代理对象

public class ProxyTest {
	public static void main(String[] args) {
		UserService userService = new UserServiceImpl();  
	        InvocationHandler invocationHandler = new MyInvocationHandler(userService);  
	        UserService userServiceProxy = (UserService)Proxy.newProxyInstance(UserService.class.getClassLoader(),  
	        		new Class[] { UserService.class }, invocationHandler);  
	        userServiceProxy.save();  
	}
}

总结:用jdk实现动态代理,还是比较简单的,API上的示例代码写的挺好的,大家没事的时候多看看.

快乐学习,快乐编程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值