Java API给出的创建动态代理类中的两种方法(一般直接使用第二种方法):
生产代理对象的工厂类:
package com. atguigu. pojo ;
import java. lang. reflect. InvocationHandler ;
import java. lang. reflect. Method ;
import java. lang. reflect. Proxy ;
import java. util. Arrays ;
public class ProxyFactoryUtils {
private Object target;
public ProxyFactoryUtils ( Object target) {
this . target = target;
}
public Object getProxy ( ) {
ClassLoader loader = target. getClass ( ) . getClassLoader ( ) ;
Class [ ] interfaces = target. getClass ( ) . getInterfaces ( ) ;
InvocationHandler handler = new InvocationHandler ( ) {
@Override
public Object invoke ( Object proxy, Method method, Object [ ] args) throws Throwable {
System . out. println ( "在方法之前添加的功能....." + method. getName ( ) + ", " + Arrays . toString ( args) ) ;
Object res = method. invoke ( target, args) ;
System . out. println ( "在方法之后添加的功能....." + res) ;
return res;
}
} ;
return Proxy . newProxyInstance ( loader, interfaces, handler) ;
}
}
测试类:
package com. atguigu ;
import com. atguigu. pojo. Calculator ;
import com. atguigu. pojo. CalculatorStaticProxy ;
import com. atguigu. pojo. ProxyFactory ;
import com. atguigu. pojo. ProxyFactoryUtils ;
import com. atguigu. pojo. impl. CalculatorImpl ;
import org. junit. Test ;
import org. springframework. context. ApplicationContext ;
import org. springframework. context. support. ClassPathXmlApplicationContext ;
public class MyAOPTest {
@Test
public void testProxy ( ) {
ProxyFactoryUtils proxyFactoryUtils = new ProxyFactoryUtils ( new CalculatorImpl ( ) ) ;
Calculator proxy = ( Calculator ) proxyFactoryUtils. getProxy ( ) ;
proxy. add ( 1 , 1 ) ;
}
}