2017-05-22 20 views
0

XML 스프링 구성을 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(); 
} 

.

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(); 
    } 
}