2017-05-22 5 views
0

私はXML Springの設定をJavaConfigに移植しています。 「myInterceptor」名前はコンパイル時に検証されませんJavaConfigを使用してインターセプタを設定するより良い方法はありますか?

@Autowired 
private MyService myServiceImpl; 

@Bean 
MyService myService() { 
    final ProxyFactoryBean proxy = new ProxyFactoryBean(); 

    final Class<?>[] proxyInterfaces = { MyService.class }; 
    proxy.setProxyInterfaces(proxyInterfaces); 

    proxy.setTarget(this.myServiceImpl); 

    final String[] interceptorNames = { "myInterceptor" }; 
    proxy.setInterceptorNames(interceptorNames); 

    return (MyService) proxy.getObject(); 
} 

、: インターセプターと私のBean定義は次のようになります。

JavaConfigを使用してインターセプタを設定するより良い方法はありますか?

答えて

0

インターセプタを設定するためのより良い方法:

@Configuration 
public class MyServiceConfig { 
    @Autowired 
    private BeanFactory beanFactory; 

    @Autowired 
    private IMyService myService; 

    @Autowired 
    private MyInterceptor myInterceptor; 

    @Bean 
    public IMyService myServiceIntercepted() { 
     final Class<?>[] proxyInterfaces = { IMyService.class }; 
     final Advice[] advices = { this.myInterceptor }; 
     return createProxy(proxyInterfaces, this.myService, this.beanFactory, 
      advices); 
    } 

    <T> T createProxy(final Class<?>[] proxyInterfaces, final T target, 
      final BeanFactory beanFactory) { 
     final ProxyFactoryBean proxy = 
       createProxyReturnFactoryBean(proxyInterfaces, target, beanFactory); 

     return (T) proxy.getObject(); 
    } 

    <T> ProxyFactoryBean createProxyReturnFactoryBean(
      final Class<?>[] proxyInterfaces, final T target, final BeanFactory beanFactory) { 
     final ProxyFactoryBean proxy = new ProxyFactoryBean(); 
     proxy.setBeanFactory(beanFactory); 

     if (proxyInterfaces != null) { 
      proxy.setProxyInterfaces(proxyInterfaces); 
     } 

     proxy.setTarget(target); 

     return proxy; 
    } 

    <T> T createProxy(final Class<?>[] proxyInterfaces, final T target, 
      final BeanFactory beanFactory, final Advice[] advices) { 
     final ProxyFactoryBean proxy = 
       createProxyReturnFactoryBean(proxyInterfaces, target, beanFactory); 

     for (final Advice advice : advices) { 
      proxy.addAdvice(advice); 
     } 

     return (T) proxy.getObject(); 
    } 
} 
関連する問題