未分类
2020-12-24 17:00:31
1822677238@qq.com
手机扫码查看
2020java框架教程之spring代理模式
概念:
将核心功能与辅助功能(事务、日志、性能监控代码)分离,达到核心业务功能更纯粹、辅助业务功能可复用。

静态代理设计模式
通过代理类的对象,为原始类的对象(目标类的对象)添加赋值功能,更容易更换代理实现类、利于维护。
例如:
1.创建房东接口(租房方法)以及接口实现类(发布租房信息、收房租业务)
2.创建代理类(FangDongProxy)实现房东接口
3.创建测试类:创建代理类,调用租房方法


动态代理设计模式
动态创建代理类的对象,为原始类的对象添加辅助功能。
1.JDK动态代理实现(基于接口)
@Test
public void TestJDK(){
//目标
FangDongService fds=new FangDongServiceImpl();
//额外功能
InvocationHandler ii=new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//辅助功能、额外功能
System.out.println("发布租房信息");
System.out.println("带租客看房");
//核心
fds.zufang();
return null;
}
};
//动态生成代理类
FangDongService proxy = (FangDongService)Proxy.newProxyInstance(Tests.class.getClassLoader(),
fds.getClass().getInterfaces(), ii);
proxy.zufang();
}

2.CGlib代理(基于继承)
a.导入spring依赖
b.测试
@Test
public void TestCGLIB(){
//目标
FangDongService fds=new FangDongServiceImpl();
//
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(FangDongServiceImpl.class);
enhancer.setCallback(new org.springframework.cglib.proxy.InvocationHandler() {
@Override
public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
//辅助功能、额外功能
System.out.println("发布租房信息2");
System.out.println("带租客看房2");
//核心
fds.zufang();
return null;
}
});
//动态生成代理类
FangDongServiceImpl proxy = (FangDongServiceImpl) enhancer.create();
proxy.zufang();
}

- 本页地址 https://www.9713job.com/?p=2842
- 上一篇 <<2020java框架之日志管理
- 下一篇 >>2020java框架教程之mybatis关联关系



发表回复