代理模式
2023-12-14 23:52:32
接口
public interface UserService {
void selectAll();
}
实现类(需要增加业务)
public class UserServiceImpl implements UserService{
@Override
public void selectAll() {
System.out.println("查询");
}
}
静态代理
代理类
public class UserProxy implements UserService {
// 持有具体业务实现
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
@Override
public void selectAll() {
System.out.println("不改变原有代码,进行增强");
// 执行原有逻辑
userService.selectAll();
}
}
测试
public static void main(String[] args) {
UserProxy userProxy = new UserProxy();
// 代理具体业务实现
userProxy.setUserService(new UserServiceImpl());
// 执行增强业务
userProxy.selectAll();
}
动态代理
代理类
public class ProxyInvocationHandler implements InvocationHandler {
// 持有具体业务实现
private Object object;
public void setUserService(Object object) {
this.object= object;
}
public Object getProxy(){
// 让代理类实现具体实现类(UserServiceImpl)的接口(UserService),并重写接口方法,返回代理对象
return Proxy.newProxyInstance(this.getClass().getClassLoader(), object.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("这里进行增强");
// 代理类执行接口方法时,执行具体实现重写的方法
return method.invoke(object, args);
}
}
测试
public static void main(String[] args) {
ProxyInvocationHandler proxyInvocationHandler = new ProxyInvocationHandler();
// 持有具体实现
proxyInvocationHandler.setObject(new UserServiceImpl());
// 获取代理对象(已实现具体实现的接口并重写接口方法)
UserService proxy = (UserService) proxyInvocationHandler.getProxy();
// 执行增强业务
proxy.selectAll();
}
文章来源:https://blog.csdn.net/h_e_l_l_o_______/article/details/135005187
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!