Java与模式之代理(Proxy)模式
?代理模式的时序图如下
?
代理模式是怎样工作的:
JDK动态代理
jdk的动态代理是基于接口的,必须实现了某一个或多个任意接口才可以被代理,并且只有这些接口中的方法会被代理。
在Dao类的方法调用前输出xxx方法 start
?
public static void main(String[] args) {UserDao uDao = new UserDaoImpl();DaoProxy log = new DaoProxy();log.setTarget(uDao);UserDao uDaoProxy = (UserDao)Proxy.newProxyInstance(uDao.getClass().getClassLoader(),uDao.getClass().getInterfaces(), log);uDaoProxy.delete();uDaoProxy.save();}?
运行结果delete start!
deleted
save start!
save?
CGlib?
cglib(Code Generation Library)是一个强大的,高性能,高质量的Code生成类库。它可以在运行期扩展Java类与实现Java接口。cglib封装了asm,可以在运行期动态生成新的class。cglib用于AOP,jdk中的proxy必须基于接口,cglib却没有这个限制。Spring中AOP是基于代理的思想来实现,其代理就是基于CGlib来实现的。
?
?
?
参考:《Java与模式》
?
?
?
?
?
?