Spring动态代理方式之JDK动态代理

JDK动态代理实现Spring AOP

  JDK动态代理是java.lang.reflect.*包提供的方式,它必须借助一个接口才能产生代理对象。

  对于使用业务接口的类,Spring默认使用JDK动态代理实现AOP

1、业务逻辑接口

public interface Business {
	
	public void add();
	
	public void delete();
}

2、业务实现类

public class BusinessTest implements Business {

	public void add() {
		System.out.println("BusinessTest add()");
	}
	
	public void delete() {
		System.out.println("BusinessTest delete()");
	}
}

3、AOP切面类

public class Aspect {

	public void authority() {
		System.out.println("权限验证");
	}
	
	public void except() {
		System.out.println("异常处理");
	}
	
	public void log() {
		System.out.println("日志记录");
	}
	
	public void monitor() {
		System.out.println("性能监控");
	}
}

4、动态代理类

//实现InvocationHandler接口来自定义自己的InvocationHandler
public class DynamicProxy implements InvocationHandler {

	//代理对象
	Business business;
	
	//生成代理对象
	public Object createProxy(Business business) {
		this.business = business;
		//返回生成的代理对象
		return Proxy.newProxyInstance(this.getClass().getClassLoader(), 
				business.getClass().getInterfaces(), this);
	}
	
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		Aspect aspect = new Aspect();
		//代理对象执行之前
		aspect.authority();
		aspect.except();
		
		//代理对象执行
		method.invoke(business, args);
		
		//代理对象执行之后
		aspect.log();
		aspect.monitor();
		return null;
	}
	
}

5、测试类

public class Test{

	public static void main(String [] args) {
		DynamicProxy proxyClass = new DynamicProxy();
		Business business = new BusinessTest();
		//获得动态代理类
		Business proxy = (Business)proxyClass.createProxy(business);
		proxy.add();
	}
}

输出结果

权限验证
异常处理
BusinessTest add()
日志记录
性能监控

 

你可能感兴趣的:(Java)