Вот код
//IUserService is a interface
IUserService userService=new UserServiceImpl();
NameMatchMethodPointcut pointcut=new NameMatchMethodPointcut();
pointcut.addMethodName("save*");
LogAdvice logAdvice=new LogAdvice();
Advisor advisor=new DefaultPointcutAdvisor(pointcut,logAdvice);
//when set the target in constructor JdkDynamicAopProxy will be created
//ProxyFactory proxyFactory=new ProxyFactory(userService);
ProxyFactory proxyFactory=new ProxyFactory();
proxyFactory.addAdvisor(advisor);
//if use setTarget to set the target ObjenesisCglibAopProxy will be created
proxyFactory.setTarget(userService);
IUserService proxy=(IUserService) proxyFactory.getProxy();
proxy.queryUser();
proxy.saveUser();
И разница между установленной целью с использованием setTarget
или Constructor
заключается в том, что когда в Constructor
есть setInterfaces(ClassUtils.getAllInterfaces(target));
, но не в setTarget
, я не знаю почему, как я думаю, начиная с IUserService
это интерфейс, JdkDynamicAopProxy
должен быть создан независимо от того, как я установил цель?
Версия исходного кода пружины 5.0.0.BUILD-SNAPSHOT