spring中的jdk动态代理(代码步骤)
生活随笔
收集整理的這篇文章主要介紹了
spring中的jdk动态代理(代码步骤)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
UserDao.java接口:
package com.liu.jdk;public interface UserDao {public void addUser();public void deleteUser();}UserDaoImpl.java實(shí)現(xiàn)類(lèi):
package com.liu.jdk;//目標(biāo)類(lèi) public class UserDaoImpl implements UserDao {@Overridepublic void addUser() {// TODO Auto-generated method stubSystem.out.println("添加方法");}@Overridepublic void deleteUser() {// TODO Auto-generated method stubSystem.out.println("刪除方法");}}MyAspect.java切面類(lèi):
package com.liu.aspect; //切面類(lèi):可以存在多個(gè)通知advice(即增強(qiáng)方法) public class MyAspect {public void chek() {System.out.println("模擬檢查權(quán)限....");}public void log() {System.out.println("模擬記錄日志....");}}jdkProxy.java代理類(lèi):
package com.liu.jdk;import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy;import com.liu.aspect.MyAspect;//jdk的代理類(lèi) public class jdkProxy implements InvocationHandler {//聲明目標(biāo)類(lèi)的接口private UserDao userDao;//創(chuàng)建代理的方法public Object create(UserDao userDao) {this.userDao = userDao;//1.加載類(lèi)加載器ClassLoader claasLoader = jdkProxy.class.getClassLoader();//2.被代理的對(duì)象實(shí)現(xiàn)所有的接口Class<?>[] clazz = userDao.getClass().getInterfaces();//3.使用代理類(lèi),進(jìn)行增強(qiáng) 返回后是代理的對(duì)象return Proxy.newProxyInstance(claasLoader, clazz, this);}//所有動(dòng)態(tài)代理類(lèi)的方法調(diào)用,都交給invoke()方法去處理//proxy 被代理后的對(duì)象//method 將要被執(zhí)行的方法信息(反射)//args 執(zhí)行方法時(shí)需要的參數(shù)@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {// TODO Auto-generated method stub//聲明切面MyAspect myAspect = new MyAspect();//前增強(qiáng)myAspect.chek();//在目標(biāo)類(lèi)上調(diào)用方法 并傳入?yún)?shù)Object obj = method.invoke(userDao, args);//后增強(qiáng)myAspect.log();return obj;}}JdkTest.java測(cè)試類(lèi):
package com.liu.jdk;import com.liu.aspect.MyAspect;public class JdkTest {public static void main(String[] args) {//創(chuàng)建代理對(duì)象jdkProxy jdk = new jdkProxy();//創(chuàng)建目標(biāo)對(duì)象UserDao userDao = new UserDaoImpl();//從代理對(duì)象中獲取增強(qiáng)后的目標(biāo)對(duì)象UserDao userDao1 = (UserDao) jdk.create(userDao);userDao1.addUser();userDao1.deleteUser();}}運(yùn)行結(jié)果:
模擬檢查權(quán)限.... 增強(qiáng)方法 模擬記錄日志.... 模擬檢查權(quán)限.... 刪除方法 模擬記錄日志....https://blog.csdn.net/weixin_45151960/article/details/104603603 CGLIB代理
總結(jié)
以上是生活随笔為你收集整理的spring中的jdk动态代理(代码步骤)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Mysql 存储引擎有哪些以及MyISA
- 下一篇: spring中的CGLIB动态代理(代码