AOP
AOP(Aspect Oriented Programming)即面向切面编程 AOP的主要作用在于对各个业务逻辑的部分进行了各类,从而达到了解耦的效果,用更加通俗的话说,使用AOP可以通过不修改源代码的方式往原先的业务主干中添加新的功能。
AOP的底层实现
AOP的底层实现使用了Java中的动态代理技术,其可以细分为两类当被代理对象有接口的时候,使用JDK动态代理,当被代理对象没有接口的时候使用CGLIB动态代理,在Spring框架的实际使用中进行动态代理的部分已经被封装好,直接通过注解的方式使用即可。
JDK动态代理的原生编写和测试
JDK动态代理需要使用Proxy类进行创建代理对象
1.newProxyInstance方法

三个参数分别对应 代理类的类加载器,被增强方法所在的类实现的接口(可包括多个接口),InvocationHandler接口的实现(用于进行增强部分的编写)
**2.原生JDK动态代理代码
先创建示例接口UserDAO
public interface UserDAO {
public void add();
}
创建示例接口的实现类
public class userDAOImpl implements UserDAO{
@Override
public void add() {
System.out.println("方法执行了");
}
}
使用Proxy类创建代理对象,InvocationHandler接口的实现这里采用单独新建一个类 使用匿名内部类来完成也可
public class JDKProxy {
public static void main(String[] args) {
//创建实现类接口的代理对象
Class[] interfaces = {UserDAO.class};
//新建被代理类的对象
UserDAO userDAO = new userDAOImpl();
//得到动态代理的对象
UserDAO o = (UserDAO)Proxy.newProxyInstance(JDKProxy.class.getClassLoader(), interfaces, new UserDAOProxy(userDAO));
o.add();
}
}
class UserDAOProxy implements InvocationHandler{
private Object object;
//构造方法 通过传入的对象进行动态的创建相应的代理对象
public UserDAOProxy(Object object) {
this.object = object;
}
//增强方法的逻辑
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("方法执行前" + method.getName());
Object res = method.invoke(object, args);
System.out.println("方法执行之后"+ object);
return res;
}
}
3.测试结果

© 版权声明
文章版权归作者所有,未经允许请勿转载。如内容涉嫌侵权,请在本页底部进入<联系我们>进行举报投诉!
THE END
















暂无评论内容