动态代理的实现3-实现aop功能的封装和配置
2013-11-28 20:29
561 查看
[java] view
plaincopy
//一个通告或建议的接口
public interface Advice {
void afterMethod(Method method);
void beforeMethod(Method method);
}
[java] view
plaincopy
public class MyAdvice implements Advice{
private long start;
@Override
public void afterMethod(Method method) {
System.out.println("运行时间计算结束!!");
System.out.println("共耗时:"+(System.currentTimeMillis()-start));
System.out.println("------------------------");
}
@Override
public void beforeMethod(Method method) {
System.out.println("开始计算运行时间:");
start=System.currentTimeMillis();
System.out.println("所执行的方法:"+method.getName());
}
}
[java] view
plaincopy
Properties文件的配置
#xxx=java.util.ArrayList
xxx=aopframework.ProxyFactoryBean
xxx.advice=aopframework.MyAdvice
xxx.target=java.util.ArrayList
[java] view
plaincopy
/**
* 负责创建目标类或代理类的实例对象,并通过配置文件实现切换
*
*/
public class BeanFactory {
private Properties prop;
public BeanFactory(InputStream is){
prop=new Properties();
try {prop.load(is);
} catch (IOException e) {
e.printStackTrace();
}
}
public Object getBean(String propkey){
String className=prop.getProperty(propkey);
Object bean=null;
try {
bean=Class.forName(className).newInstance();
if(bean instanceof ProxyFactoryBean){
String adviceName=prop.getProperty(propkey+".advice");
String targetName=prop.getProperty(propkey+".target");
try {
Advice advice = (Advice) Class.forName(adviceName).newInstance();
Object target = Class.forName(targetName).newInstance();
ProxyFactoryBean beanproxy=(ProxyFactoryBean)bean;
beanproxy.setAdvice(advice);
beanproxy.setTarget(target);
bean=beanproxy.getProxy();
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return bean;
}
}
[java] view
plaincopy
/**
* 充当封装生成动态代理的工厂
*/
public class ProxyFactoryBean {
private Advice advice;
private Object target;
public Object getProxy() {
Object coll=(Object) Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new InvocationHandler(){
@Override
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable {
advice.beforeMethod(method);
Object obj=method.invoke(target, args);
advice.afterMethod(method);
return obj;
}
});
return coll;
}
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;
}
}
[java] view
plaincopy
public class Test {
public static void main(String[] args) {
InputStream is=Test.class.getClassLoader().getResourceAsStream("config.properties");
BeanFactory factory=new BeanFactory(is);
Collection coll=(Collection) factory.getBean("xxx");
coll.add("aaa");
coll.add("222");
System.out.println(coll.size());
}
/**
* 运行结果
开始计算运行时间:
所执行的方法:add
运行时间计算结束!!
共耗时:0
------------------------
开始计算运行时间:
所执行的方法:add
运行时间计算结束!!
共耗时:0
------------------------
开始计算运行时间:
所执行的方法:size
运行时间计算结束!!
共耗时:0
------------------------
2
*/
}
相关文章推荐
- 动态代理的实现3-实现aop功能的封装和配置 .
- 让动态生成的类成为目标类的代理-实现AOP功能的封装与配置
- 动态代理的实现3-实现aop功能的封装和配置
- 加强2注解。泛型。类加载器及其委托机制。代理的概念与作用原理,AOP概念。实现AOP功能的封装与配置。类似Spring。
- Java实现AOP功能的封装与配置的小框架实例代码
- java基础巩固笔记(4)-实现AOP功能的封装与配置的小框架
- 动态代理手动实现Spring AOP的基本功能
- 实现AOP功能的封装和配置
- 黑马程序员--09.动态与代理AOP--06【动态代理实例化的过程升级--目标对象+系统功能的参数化】【实现类似Spring的可配置AOP框架】
- 实现AOP功能的封装与配置的小框架
- JDK核心API:使用动态代理实现AOP功能
- aop学习总结一------使用jdk动态代理简单实现aop功能
- 黑马程序员(八) 实现Aop功能的封装和配置的小程序
- 【实现AOP功能的封装与配置】
- aop学习总结二------使用cglib动态代理简单实现aop功能
- Java利用动态代理模拟实现Spring的AOP(面向切面编程)功能的小实践
- 实现AOP的功能的封装与配置
- 使用JDK中的Proxy技术实现AOP功能[动态代理]
- 用Java动态代理实现AOP
- Spring AOP动态代理原理与实现方式