黑马程序员——用动态生成类实现类似于spring的可配置的AOP框架
2014-10-12 22:46
489 查看
------- <a href="http://www.itheima.com" target="blank">android培训</a>
代码演示:
//框架测试类
package com.itheima.aopframework;
import java.io.InputStream;
public class AopFrameworkTest {
public static void main(String[] args)throws Exception{
// TODO Auto-generated method stub
InputStream is = AopFrameworkTest.class.getResourceAsStream("config.properies");
Object obj = new BeanFactory(is).getBean("xxx");
System.out.println(obj.getClass().getName());
}
}
//判断是否是 ProxyFactroyBean类 package com.itheima.aopframework; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import com.itheima.Adivce; public class BeanFactory { Properties property = new Properties(); public BeanFactory(InputStream is){ try { property.load(is); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public Object getBean(String name){ String className = property.getProperty(name); //通过反射创建类 Object bean = null; try { Class clazz = Class.forName(className); bean = clazz.newInstance(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } //判断是否是 ProxyFactroyBean类 if(bean instanceof ProxyFactoryBean){ Object proxy = null; ProxyFactoryBean proxyFactoryBean = (ProxyFactoryBean)bean; try { Adivce adivce = (Adivce)Class.forName(property.getProperty(name + ".adivce")).newInstance(); Object target = Class.forName(property.getProperty(name + ".target")).newInstance(); proxyFactoryBean.setAdivce(adivce); proxyFactoryBean.setTarget(target); proxy = proxyFactoryBean.getProxy(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return proxy; } return bean; } }
//通过代理动态生成类 package com.itheima.aopframework; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import com.itheima.Adivce; public class ProxyFactoryBean { private Adivce adivce; public Adivce getAdivce() { return adivce; } public void setAdivce(Adivce adivce) { this.adivce = adivce; } public Object getTarget() { return target; } public void setTarget(Object target) { this.target = target; } private Object target; public Object getProxy() { Object proxy2 = (Object)Proxy.newProxyInstance( target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { adivce.startTime(method); Object obj = method.invoke(target, args); adivce.endTime(method); return obj; } }); return proxy2; } }
<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
相关文章推荐
- Java基础---Java---基础加强---类加载器、委托机制、AOP、 动态代理技术、让动态生成的类成为目标类的代理、实现Spring可配置的AOP框架
- Java基础---Java---基础加强---类加载器、委托机制、AOP、 动态代理技术、让动态生成的类成为目标类的代理、实现Spring可配置的AOP框架
- 黑马程序员--09.动态与代理AOP--06【动态代理实例化的过程升级--目标对象+系统功能的参数化】【实现类似Spring的可配置AOP框架】
- 黑马程序员--代理+AOP--实现一个类似spring的可配置的简单AOP框架
- 黑马程序员-代理、实现类似Spring的可配置AOP框架
- 黑马程序员 实现类似spring的可配置的AOP框架
- 实现类似于Spring的可配置的AOP框架
- 黑马程序员--基础加强--第九篇--实现类似spring的可配置的AOP框架
- 11.6实现一个类似于spring的可配置的AOP框架
- 学习笔记--代理与AOP及实现类似SPRING的可配置的AOP框架
- Spring AOP 代理实现的两种方式: JDK动态代理 和 Cglib框架动态代理
- 基础加强____【动态代理 & AOP】【实现类Spring的AOP框架】
- Java代理学习-实现类似spring的可配置的AOP框架
- 实现类似spring的可配置的AOP框架
- 黑马程序员——类似于spring的AOP框架
- 实现类似spring的可配置的aop框架
- 实现类似spring的可配置的AOP框架
- java基础--实现类似Spring的可配置的aop框架
- 56_实现类似spring的可配置的AOP框架
- 《黑马程序员》 动态代理之Aop框架的实现