实现类似于Spring的可配置的AOP框架
2011-12-15 14:57
405 查看
AopFrameworkTest.java
BeanFactory.java
ProxyFactoryBean.java
Advice.java
MyAdvice.java
config.properties
import java.io.InputStream; import java.util.Collection; public class AopFrameworkTest { public static void main(String[] args) { InputStream is = AopFrameworkTest.class.getResourceAsStream("config.properties"); BeanFactory beanFactory = new BeanFactory(is); Object obj = beanFactory.getBean("testBean"); System.out.println(obj.getClass().getName()); Collection collection = (Collection)obj; collection.add("zhuang"); collection.add("alex"); System.out.println(collection.size()); } }
BeanFactory.java
import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class BeanFactory { private Properties prop =new Properties(); public BeanFactory(InputStream is){ try { this.prop.load(is); } catch (IOException e) { e.printStackTrace(); } } public Object getBean(String beanName){ String className = this.prop.getProperty(beanName); Object beanObj = null; try { beanObj = Class.forName(className).newInstance(); Object proxy; if(beanObj instanceof ProxyFactoryBean){ ProxyFactoryBean proxyFactoryBean = (ProxyFactoryBean)beanObj; proxyFactoryBean.setTarget(Class.forName(this.prop.getProperty(beanName+".target")).newInstance()); proxyFactoryBean.setAdvice((MyAdvice)Class.forName(this.prop.getProperty(beanName+".advice")).newInstance()); proxy = proxyFactoryBean.getProxy(); return proxy ; } } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return beanObj; } }
ProxyFactoryBean.java
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class ProxyFactoryBean { private Object target ; private MyAdvice advice ; public Object getTarget() { return target; } public Object getAdvice() { return advice; } public void setTarget(Object target) { this.target = target; } public void setAdvice(MyAdvice advice) { this.advice = advice; } public Object getProxy(){ Object proxyBean = Proxy.newProxyInstance(this.target.getClass().getClassLoader(),this.target.getClass().getInterfaces(), new InvocationHandler(){ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { advice.beforeMethod(); Object obj = method.invoke(target, args); advice.afterMethod(); return obj; } }) ; return proxyBean; } }
Advice.java
public interface Advice { public void beforeMethod(); public void afterMethod(); }
MyAdvice.java
public class MyAdvice implements Advice{ public void afterMethod() { System.out.println("after method..."); } public void beforeMethod() { System.out.println("before method..."); } }
config.properties
testBean=javase.aopframework.ProxyFactoryBean testBean.advice=javase.aopframework.MyAdvice testBean.target=java.util.ArrayList
相关文章推荐
- 黑马程序员——用动态生成类实现类似于spring的可配置的AOP框架
- 11.6实现一个类似于spring的可配置的AOP框架
- java基础--实现类似Spring的可配置的aop框架
- Java基础---Java---基础加强---类加载器、委托机制、AOP、 动态代理技术、让动态生成的类成为目标类的代理、实现Spring可配置的AOP框架
- Java基础---Java---基础加强---类加载器、委托机制、AOP、 动态代理技术、让动态生成的类成为目标类的代理、实现Spring可配置的AOP框架
- 黑马程序员--代理+AOP--实现一个类似spring的可配置的简单AOP框架
- Java代理学习-实现类似spring的可配置的AOP框架
- 黑马程序员-代理、实现类似Spring的可配置AOP框架
- java实现类似spring的可配置AOP框架
- 黑马程序员--09.动态与代理AOP--06【动态代理实例化的过程升级--目标对象+系统功能的参数化】【实现类似Spring的可配置AOP框架】
- 实现类似spring的可配置的aop框架
- 学习笔记--代理与AOP及实现类似SPRING的可配置的AOP框架
- 实现类似spring的可配置的AOP框架
- 实现类似spring的可配置的AOP框架
- 56_实现类似spring的可配置的AOP框架
- 黑马程序员--基础加强--第九篇--实现类似spring的可配置的AOP框架
- 黑马程序员 实现类似spring的可配置的AOP框架
- 利用SPRING JDBC 和模板框架实现SQL可配置
- Spring整合aspectj框架实现的aop
- 对Spring AOP框架实现的结构分析