Spring中AOP:Proxy動態代理淺解析(被代理對象必須實現接口)
阿新 • • 發佈:2018-06-03
ima throwable light public RR eth 對象 處理 span
小貼士:以下內容純屬個人觀點,如有不當請指出並諒解
import java.lang.reflect.Proxy;
Proxy可以動態代理一個對象
寫一個代理工廠類ProxyFactory:
package com.zhangpn.serviceImpl; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class ProxyFactory implements InvocationHandler {private Object target;//這是被動態代理的對象 public Object createProxyIntance(Object target) {//通過調用此方法,將被代理目標傳入並且返回代理對象,在此invoke方法會被回調 this.target = target; return Proxy.newProxyInstance(this.target.getClass().getClassLoader(), this.target.getClass().getInterfaces(), this); } @Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("******調用動態被代理對象之前做相關處理******"); method.invoke(target, args); System.out.println("------調用動態被代理對象之後做相關處理------\n"); return null; } }
寫兩個被代理類:
第一個User:
package com.zhangpn.daoImpl; import com.zhangpn.dao.UserDao; public class UserDaoImpl implements UserDao { public void save() { System.out.println("UserDaoImpl save success!"); } }
其實現的接口:
package com.zhangpn.dao; public interface UserDao { public void save(); }
第二個Student:
package com.zhangpn.daoImpl; import com.zhangpn.dao.StudentDao; public class StudentDaoImpl implements StudentDao { public void save() { System.out.println("StrudentDaoImpl save success!"); } }
其實現的接口:
package com.zhangpn.dao; public interface StudentDao { public void save(); }
測試運行:
package com.zhangpn.Test; import com.zhangpn.dao.StudentDao; import com.zhangpn.dao.UserDao; import com.zhangpn.daoImpl.StudentDaoImpl; import com.zhangpn.daoImpl.UserDaoImpl; import com.zhangpn.serviceImpl.ProxyFactory; public class Test { public static void main(String[] args) { ProxyFactory factory = new ProxyFactory(); UserDao userDao = (UserDao) factory.createProxyIntance(new UserDaoImpl()); userDao.save(); StudentDao studentDao = (StudentDao) factory.createProxyIntance(new StudentDaoImpl()); studentDao.save(); } }
Spring中AOP:Proxy動態代理淺解析(被代理對象必須實現接口)