AOP代理模式可以实现事务控制和业务逻辑代码横切。
使用代理模式,动态代理实现横切。
什么是代理?
接口就是指定要做的事情,要实现的逻辑。
代理类似于房源租房
public interface ZuFang{ //我需要一个一室一厅的房子 public void rentHouse( ); } //比如租房,就是接口。 //你需要租房就要实现租房接口,自己实现再nev一个自己去租房。 public class ZuFangImpl implements ZuFang{ @Override Dublic void rentHouse() { System.out.println("我要租个室一厅的房子");
介,他帮你租房,他的目标也是实现接口租到房子,它可以帮你租房做点事情,收点服务费,之后也可以做点事情,这就是方法增强。(poxy)
public class ZuFangZJ implements ZuFang{ //接口 private ZuFang zufang; public ZuFangZJ (ZuFang zufang){this. zufang = zufang;} @Override public void rentHouse() { System.out.println("我是中介,我要收雇租客代理费"); zufang.rentHouse(); System.out.println("我是中介,我要收雇房东代理费" ); } } 测试实现: public static void main(String[] args) { ZuFang renter = new ZuFangImpl(); //把自己信息给他他去找 ZuFangZJ zhongjie =new ZuFangZJ(renter); zhongjie. rentHouse(); } }
这就是静态代理每一种业务都需要一 一个实现类去完成实现类去。每个不用代理,要不同
动态代理:
1.jdk动态代理
public class ProxyFactory //代理工厂实现代理对象 private ProxyFactory(){}; private static ProxyFactory proxyFactory; public static ProxyFactory getInStance( ){ if(proxyFactory = null){ proxyFactory = new ProxyFactory(); } return proxyFactory; } public Object getJDKProxyInstance( Object o)(return Proxy . newProxyInstance(o getClass( ). getClassLoader(),o. getClass().getInterfaces(),new InvocationHandler(){ //Method就是调用的的方法 public 0bject invoke(0bject arg0, Method arg1, Object[] arg2)throws Throwable ( Object result = null; //逻辑增强 Systen.out.printIn("我是租房公司,我要收雇租客代理费"); result = argl.invoke(o, arg2); System.out.println(”我是租房公司,我要收雇房东代理费"); return result; } }) }
2.cglib
第一个数据是委托类型class,第二个参数是方法拦截,实现那他的内部类就可以实现方法增强和jdk代理-样。
所有代理模式进行代理返回的都是代理模式的代理类,
都可以对原有的方法再代理中实现代理增强,也就是aop思想的实现
原文:https://www.cnblogs.com/badfisher/p/13089838.html