使用DefaultAdvisorAutoProxyCreator创建代理
根据spring-framework-reference,DefaultAdvisorAutoProxyCreator创建代理更加通用强大,使用此机制包括:
a.指定一个DefaultAdvisorAutoProxyCreator Bean的定义.
b.指定在相同或相关的上下文中任意数量的Advisor.注意,必须是Advisor,而不仅仅是interceptor或advice.这是必要的,因为必须有一个切点被评估,以便检查每个advice到候选bean定义是否合格.
下面举个应用例子.
1.主要依赖(略)
2.具体类.
@Configuration public class AppConfig { //要创建代理的目标Bean @Bean public UserService userService(){ return new UserServiceImpl(); } //创建Advice @Bean public Advice myMethodInterceptor(){ return new MyMethodInterceptor(); } //使用Advice创建Advisor @Bean public NameMatchMethodPointcutAdvisor nameMatchMethodPointcutAdvisor(){ NameMatchMethodPointcutAdvisor nameMatchMethodPointcutAdvisor=new NameMatchMethodPointcutAdvisor(); nameMatchMethodPointcutAdvisor.setMappedName("pri*"); nameMatchMethodPointcutAdvisor.setAdvice(myMethodInterceptor()); return nameMatchMethodPointcutAdvisor; } @Bean public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator(){ return new DefaultAdvisorAutoProxyCreator(); } }
public interface UserService { void print(); }
public class MyMethodInterceptor implements MethodInterceptor { @Override public Object invoke(MethodInvocation invocation) throws Throwable { System.out.println(getClass()+"调用方法前"); Object ret=invocation.proceed(); System.out.println(getClass()+"调用方法后"); return ret; } }
public class Main { public static void main(String[] args) { ApplicationContext applicationContext=new AnnotationConfigApplicationContext(AppConfig.class); UserService userService= applicationContext.getBean(UserService.class); userService.print(); } }
浙公网安备 33010602011771号