通过反射模拟AOP的动态代理
来源:互联网 发布:老男孩 python 编辑:程序博客网 时间:2024/05/18 03:09
config.property
#xxx=java.util.ArrayListxxx=AOPProxy.ProxyFactoryBeanxxx.advice=AOPProxy.Advicexxx.target=java.util.ArrayList
BeanFactory
package AOPProxy;import java.io.IOException;import java.io.InputStream;import java.util.Properties;public class BeanFactory {Properties pro = new Properties();public BeanFactory(InputStream is) throws IOException{pro.load(is);}public Object getBean(String name) throws ClassNotFoundException, InstantiationException, IllegalAccessException{Object proxy = null;String className = pro.getProperty(name);Class cla = Class.forName(className);Object bean = (Object)cla.newInstance();System.out.println("-----------------");if(bean instanceof ProxyFactoryBean){Advice advice =(Advice) Class.forName((String)pro.get(name +".advice")).newInstance();Object target = (Object)Class.forName((String)pro.get(name +".target")).newInstance();ProxyFactoryBean proxyFactoryBean = (ProxyFactoryBean)bean;proxyFactoryBean.setAdvice(advice);proxyFactoryBean.setTarget(target);proxy = (proxyFactoryBean).getProxy();return proxy;}return bean;}private Object ProxyFactoryBean(Object bean) {// TODO Auto-generated method stubreturn null;}}
package AOPProxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class ProxyFactoryBean {private Advice advice;private Object target;public Advice getAdvice() {return advice;}public void setAdvice(Advice advice) {this.advice = advice;}public Object getTarget() {return target;}public void setTarget(Object target) {this.target = target;}public Object getProxy() {// TODO Auto-generated method stubObject proxy3 = (Object)Proxy.newProxyInstance(target.getClass().getClassLoader(),//new Class[]{Collection.class},target.getClass().getInterfaces(),new InvocationHandler() {//分别是对象,方法,参数@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {/*long bt = System.currentTimeMillis();//将调用的方法关联起来Object retVal = method.invoke(target, args);for (int i = 0; i <10; i++) {}long et = System.currentTimeMillis();System.out.println(method.getName()+" "+ (et - bt )+"hehe");return retVal;*///直接调用方法advice.beforeMethod(method);//将调用的方法关联起来Object retVal = method.invoke(target, args);for (int i = 0; i <10; i++) {}advice.afterMethod(method);return retVal;}});return proxy3;}}
package AOPProxy;import java.io.IOException;import java.io.InputStream;import java.net.URL;public class AopTest {public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IOException {InputStream is = (InputStream)AopTest.class.getResourceAsStream("config.properties");Object bean = (Object)new BeanFactory(is).getBean("xxx");System.out.println(bean.getClass().getName());//System.out.println(bean.getClass().getName());}}
Advice:
package AOPProxy;import java.lang.reflect.Method;public class Advice {long bt,et;public void beforeMethod(Method method) {// TODO Auto-generated method stubbt = System.currentTimeMillis();}public void afterMethod(Method method) {// TODO Auto-generated method stubet = System.currentTimeMillis();}}
0 0
- 通过反射模拟AOP的动态代理
- 通过动态代理模拟Spring AOP
- 利用Java反射机制和动态代理 模拟Spring AOP
- Java动态代理模拟spring的AOP
- 反射实现AOP动态代理
- 反射 动态代理与AOP
- 反射实现AOP动态代理模式(SpringAOP的实现原理)
- AOP的实现原理—反射与动态代理
- 用Java的动态代理模拟spring的AOP
- 利用java 的动态代理模拟spring的AOP
- 运用动态代理来模拟Spring的AOP
- java动态代理案例:Spring中Aop功能的模拟
- 黑马程序员--09.动态与代理AOP--03【InvocationHandler接口】【通过反射创建动态代理类对象】
- 反射实现 AOP 动态代理模式
- 反射 生成JDK动态代理和AOP
- AOP:java动态代理+反射机制
- 反射实现 AOP 动态代理模式
- Javase 专题 反射和动态代理 aop
- [LeetCode]Two Sum
- 苍狼敏捷方法核心 v1
- which,whereis,locate,find,type的区别
- 459. Repeated Substring Pattern
- poj 2159
- 通过反射模拟AOP的动态代理
- POJ 1050 To the Max
- Tomcat的学习笔记
- 兼容iOS 10:配置获取隐私数据权限声明
- Windows2003安装SQL2005 CD2闪退解决方法及SP4补丁报错:无法安装Windows Installer MSP文件解决方法
- char型数组转换为Int(指针的规范使用)
- 基数排序
- Servlet的生命周期与工作原理
- 用 Flask 来写个轻博客 (1) — 创建项目