Spring-动态代理-模板
ProxyInvocationHandler:
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; //用这个类自动生成代理类 public class ProxyInvocationHandler implements InvocationHandler { //被代理的接口 private Object target; public void setTarget(Object target) { this.target = target; } //生成得到代理类 public Object getProxy(){ return Proxy.newProxyInstance(this.getClass().getClassLoader(), target.getClass().getInterfaces(),this); } //处理代理实例,并返回结果 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable{ //log log(method.getName()); //动态代理的本质,就是使用反射机制去实现 Object result = method.invoke(target,args); return result; } //增加一个日志功能 public void log(String msg){ System.out.println("print a " + msg + " method"); } }
Client:
import com.kuang.demo02.UserService; import com.kuang.demo02.UsrtServiceImpl; public class Client { public static void main(String[] args) { //真实角色 UsrtServiceImpl userService = new UsrtServiceImpl(); //代理角色,不存在 ProxyInvocationHandler proxyInvocationHandler = new ProxyInvocationHandler(); //设置要代理的对象 proxyInvocationHandler.setTarget(userService); //动态生成代理类 UserService proxy = (UserService) proxyInvocationHandler.getProxy(); proxy.add(); } }
demo02.UserService:
public interface UserService { public void add(); public void delete(); public void update(); public void query(); }
demo02.UsrtServiceImpl:
public class UsrtServiceImpl implements UserService { public void add(){ System.out.println("add a user"); } public void delete(){ System.out.println("delete a user"); } public void update(){ System.out.println("update a user"); } public void query(){ System.out.println("find a user"); } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性