Spring里有个概念叫面向切面编程(AOP),我们管切入到指定类指定方法的代码片段称为切面,而切入到哪些类、哪些方法则叫切入点。有了AOP,我们可以把几个类共有的代码,抽取到一个切片中,等到需要时再切入对象中去,从而改变其原有的行为。它的基础是动态代理,这里记录下动态代理的相关使用。
比如,当我们在注册用户时,想校验用户,而需要校验用户的地方又很多,可能登录也要,如果每个方法里都放置校验码,那样代码太冗余,抽取到一个方法里再调用又会增强偶合性,这时可以用到动态代理,在程序运行过程中产生的另外对象,替原主体代码完成校验工作,只需把校验部分的代码放在代理类即可。
创建动态代理类:
public class SecunityHandler implements InvocationHandler {//实现动态代理,把要做的额外的事放这里
private Object targetObject;//传入的要代理的类的实例
public Object createProxyInstance(Object targetObect) {//创建代理实例
this.targetObject=targetObect;
/*
* newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)
* 需要对要代理的对象进行封装,返回一个具备代理方法的要代理对象的实例
* 参数1:装载目标代理类
* 参数2:代理是针对接口再生成一个对象,要代理的类必须具备抽象接口
* 参数3:实现动态代理的类,因为要调用代理方法,代理方法是在本类实现