基于JDK的实现可配置的AOP框架
2010-12-06 23:38
399 查看
上一篇已经写了基于JDK的动态代理的小例子,JDK动态代理必须有接口,才能使用,但是实际情况中没有接口该怎么办呢,就得用到cglib了。Spring AOP就是基于这两种代理模式的。可任意切换,也可以强制使用cglib的代理。
此篇主要是写JDK的动态代理,把上一篇的改造成一个小型的mini框架。
首先写个接口
同一个包里面写一个配置文件 config.properties
此篇主要是写JDK的动态代理,把上一篇的改造成一个小型的mini框架。
首先写个接口
package org.jdkTest; public interface Hello { public void catHello(); }
package org.aop; import java.lang.reflect.Method; public interface Advice { public void before(Method method); public void after(Method method); }
package org.aop; import java.lang.reflect.Method; public class MyAdvice implements Advice{ public void after(Method method) { // TODO Auto-generated method stub System.out.println("--------------end----------"); } public void before(Method method) { // TODO Auto-generated method stub System.out.println("----------------start----------"); } }
package org.aop; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class BeanFactory { Properties props=new Properties(); public BeanFactory(InputStream ips){ try { props.load(ips); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public Object getBean(String name){ String className=props.getProperty(name); Object bean = null; try { Class clazz=Class.forName(className); bean=clazz.newInstance(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } if(bean instanceof ProxyFactoryBean){ ProxyFactoryBean proxyFactoryBean=(ProxyFactoryBean)bean; Object proxy=null; try { Advice advice=(Advice) Class.forName(props.getProperty(name+".advice")).newInstance(); Object target=Class.forName(props.getProperty(name+".target")); proxyFactoryBean.setAdvice(advice); proxyFactoryBean.setTarget(target); proxy = proxyFactoryBean.getProxy(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return proxy; } return bean; } }
package org.aop; 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(){ Object proxy=Proxy.newProxyInstance( target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler(){ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { advice.before(method); Object result=method.invoke(target, args); advice.after(method); return result; } }); return proxy; } }
package org.aop; import java.io.InputStream; import java.util.Collection; import com.sun.org.apache.bcel.internal.generic.NEW; public class AopTest { public static void main(String[] args) { InputStream ips=AopTest.class.getResourceAsStream("config.properties"); Object bean=new BeanFactory(ips).getBean("three"); System.out.println(bean.getClass().getName()); System.out.println(bean.toString()); } }
同一个包里面写一个配置文件 config.properties
three=org.aop.ProxyFactoryBean three.advice=org.aop.MyAdvice three.target=org.jdkTest.Hello
相关文章推荐
- fast-framework – 基于 JDK 8 实现的 Java Web MVC 框架
- aop动态代理基于jdk的的实现
- JAVAWEB开发之Spring详解之——AOP底层剖析(基于JDK和cglib)、Spring中的AOP以及基于AspectJ的AOP实现、Spring的JDBCTemplate详解
- 黑马程序员--代理+AOP--实现一个类似spring的可配置的简单AOP框架
- 实现类似于Spring的可配置的AOP框架
- 黑马程序员——用动态生成类实现类似于spring的可配置的AOP框架
- 《Spring设计思想》AOP实现原理(基于JDK和基于CGLIB)
- fast-framework – 基于 JDK 8 实现的 Java Web MVC 框架
- 我要造轮子之基于JDK的AOP实现
- 《Spring设计思想》AOP实现原理(基于JDK和基于CGLIB)
- 《Spring设计思想》AOP实现原理(基于JDK和基于CGLIB)
- 【Spring】——AOP实现原理(基于JDK和CGLIB)
- 【框架】[Spring]XML配置实现AOP拦截-切点:JdkRegexpMethodPointcut
- 学习笔记--代理与AOP及实现类似SPRING的可配置的AOP框架
- 黑马程序员--基础加强--第九篇--实现类似spring的可配置的AOP框架
- 黑马程序员--09.动态与代理AOP--06【动态代理实例化的过程升级--目标对象+系统功能的参数化】【实现类似Spring的可配置AOP框架】
- 实现类似spring的可配置的aop框架
- Java基础---Java---基础加强---类加载器、委托机制、AOP、 动态代理技术、让动态生成的类成为目标类的代理、实现Spring可配置的AOP框架
- java实现类似spring的可配置AOP框架
- 《Spring设计思想》AOP实现原理(基于JDK和基于CGLIB)