java动态代理实现AOP

AOP一直感觉很神秘,记得第一看到这个名词,这个是什么东东呀。

文字不写了,直接代码

 

 IBusiness接口类

package com.aop.proxy;

public interface IBusiness {
	
	public void process();
	
	public void process1();

}

 

Business实现类

package com.aop.proxy;

public class BusinessImpl implements IBusiness {

	public void process() {
		System.out.println("执行业务");
	}
	
	
	public void process1() {
		System.out.println("执行业务1");
	}

}

 

 

 

拦截器LogIntercptor 类

package com.aop.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class LogInterceptor implements InvocationHandler {
	
	private Object delegate;
	
	public LogInterceptor(Object delegate){
		this.delegate=delegate;
	}

	public Object invoke(Object obj, Method method, Object[] arg2)
			throws Throwable {
		Object result=null;
		try{
			System.out.println("Before process:"+method);
			//在这里,可以实现对方法访问权限的简单控制
			if(method.getName().equals("process1")){
				result=method.invoke(delegate, arg2);
			}
			System.out.println("After process:"+method);
			
		}
		catch(Exception e){
			System.out.println("发生异常");
		}
		return result;
	}

}

 

 

测试用例

package com.aop.proxy;

import junit.framework.TestCase;
import java.lang.reflect.*;

public class TestAOP extends TestCase {
	
	public void testAOP(){
		IBusiness obj=new BusinessImpl();
		LogInterceptor interceptor=new LogInterceptor(obj);
		
		IBusiness proxy=(IBusiness)Proxy.newProxyInstance(BusinessImpl.class.getClassLoader(),
				BusinessImpl.class.getInterfaces(),
				interceptor);
		proxy.process();
		proxy.process1();
	}

}

 

 运行 结果:

Before process:public abstract void com.aop.proxy.IBusiness.process()
After process:public abstract void com.aop.proxy.IBusiness.process()
Before process:public abstract void com.aop.proxy.IBusiness.process1()
执行业务1
After process:public abstract void com.aop.proxy.IBusiness.process1()

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值