AOP代理模式
代理模式:
1.静态代理
原理:创建一个代理类实现目标类的接口,在代理类中包含目标类的对象
案例:
1)需要创建一个接口
1 2 3 4 | public interface IUserService { public void insert(); } |
2)创建目标类来实现接口
1 2 3 4 5 6 7 8 9 10 | import com.test.staticproxy.IUserService; public class UserService implements IUserService { @Override public void insert() { } } |
3)创建代理类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class UserProxy implements IUserService { //静态代理 //缺点 代理的是固定的对象 private IUserService userService= new UserService(); @Override public void insert() { System.out.println( "代理给代理对象加的内容" ); userService.insert(); System.out.println( "代理给代理对象加的内容" ); } } |
2.动态代理
静态代理代理的是固定对象,可以用动态代理实现 代理不同的对象
2.1 jdk自带的代理方式
原理:通过jdk中自带的Proxy类创建一个代理对象,代理类实现了目标类的接口
前提:目标对象一定要有接口
1)需要创建一个接口
1 2 3 4 | public interface IUserService { public void insert(); } |
2)创建目标类来实现接口
1 2 3 4 5 6 7 8 9 | import com.test.staticproxy.IUserService; public class UserService implements IUserService { @Override public void insert() { } } |
创建一个代理类生成器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class Handler implements InvocationHandler { //存放目标对象 Object subject; public Handler(Object subject) { this .subject=subject; } // 用jdk写好的Proxy类生成一个代理对象 public static Object bind(Object subject) { //创建一个类实现目标类的接口,返回这个类的对象 return Proxy.newProxyInstance(Handler. class .getClassLoader(), subject.getClass().getInterfaces(), new Handler(subject)); } //通过反射的方式 实现 调用代理对象的方法时 实际会去调用目标对象中的方法,并且在调用目标对象方法前后加上自定义内容 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.print( "打印日志" ); //调用原目标对象中的方法 Object object= method.invoke(subject,args); return object; } } |
使用
1 2 3 4 5 6 7 8 | @Test public void fun() { //只能用目标对象的接口接收 不能用目标对象接收 IStudentService studentService=(IStudentService) Handler.bind( new StudentService()); studentService.add(); } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)