1, 基于接口的JDK代理
public static UserSerivce getUserSerivce() {
UserSerivce userSerivce = new UserServiceImpl();
UserDao userDao = new UserDaoImpl();
((UserServiceImpl) userSerivce).setUserDao(userDao);
UserSerivce proxyInstance = (UserSerivce) Proxy.newProxyInstance(MyFactory.class.getClassLoader(), userSerivce.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println(method.getName()+ Arrays.toString(args));
System.out.println("切面增强...........");
Object invoke = method.invoke(userSerivce, args);
System.out.println("切面增强...........");
return invoke;
}
});
return proxyInstance;
}
2,基于Cglib的动态代理
public static UserSerImpl getUserSer() {
UserSerImpl userSer = new UserSerImpl();
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(UserSerImpl.class);
enhancer.setCallback(new MethodInterceptor() {
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
System.out.println("切面增强...........");
Object invoke = method.invoke(userSer, objects);
System.out.println("切面增强...........");
return invoke;
}
});
UserSerImpl o = (UserSerImpl) enhancer.create();
return o;
}
测试类
public class TestMain {
@Test
public void test1(){
UserService userService = MyFactory.getTestService();
userService.tran("小明","老王",100000);
}
@Test
public void test2(){
UserServiceImpl userServiceImpl = MyFactory.getUserServiceImpl();
userServiceImpl.tran("老王","小明",10);
}
}
结果