복붙노트

[SPRING] 인터셉터가 autowired spring beans를 사용하는 Spring 인터셉터를위한 Java 설정

SPRING

인터셉터가 autowired spring beans를 사용하는 Spring 인터셉터를위한 Java 설정

Java 구성의 일부로 spring mvc 인터셉터를 추가하려고합니다. 나는 이미 XML 기반 설정이 있지만 자바 설정으로 이동하려고합니다. 인터셉터의 경우 스프링 문서에서 이와 같이 할 수 있음을 알고 있습니다.

@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LocaleInterceptor());
    }

}

그러나 나의 인터셉터는 다음과 같이 autowired 된 스프링 빈을 사용합니다.

public class LocaleInterceptor extends HandlerInterceptorAdaptor {

    @Autowired
    ISomeService someService;

    ...
}

SomeService 클래스는 다음과 같습니다.

@Service
public class SomeService implements ISomeService {

   ...
}

빈을 검색하기 위해 @Service와 같은 주석을 사용하고 있으며 구성 클래스에서 @Bean으로 지정하지 않았습니다.

내 이해로, 자바 구성 개체를 만들기위한 새로운 사용하기 때문에, 봄은 자동으로 그것에 의존성을 주입하지 않습니다.

어떻게 자바 설정의 일부로 이런 인터셉터를 추가 할 수 있습니까?

해결법

  1. ==============================

    1.다음을 수행하십시오.

    다음을 수행하십시오.

    @EnableWebMvc
    @Configuration
    public class WebConfig extends WebMvcConfigurerAdapter {
    
        @Bean
        LocaleInterceptor localInterceptor() {
             return new LocalInterceptor();
        }
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(localeInterceptor());
        }
    
    }
    

    물론 WebConfig의 관련 필드를 주입하려면 LocaleInterceptor를 Spring 빈 어딘가에 (XML, Java Config 또는 주석 사용) 구성해야합니다.

    Spring MVC 설정의 일반적인 커스터마이징을위한 문서는 여기에서 찾을 수 있으며 특히 인터셉터의 경우이 섹션을 참조하십시오.

  2. ==============================

    2.다음과 같이 자신을 위해 객체 생성을 처리 할 때 :

    다음과 같이 자신을 위해 객체 생성을 처리 할 때 :

    registry.addInterceptor(new LocaleInterceptor());
    

    Spring 컨테이너가 당신을 위해 그 객체를 관리 할 수있는 방법이 없으므로 LocaleInterceptor에 필요한 주입을한다.

    여러분의 상황에 더 편리 할 수있는 또 다른 방법은 @Configuration에 관리되는 @Bean을 선언하고 다음과 같이 직접 메소드를 사용하는 것입니다.

    @EnableWebMvc
    @Configuration
    public class WebConfig extends WebMvcConfigurerAdapter {
    
        @Bean
        public LocaleInterceptor localeInterceptor() {
            return new LocaleInterceptor();
        }
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor( localeInterceptor() );
        }
    }
    
  3. ==============================

    3.생성자 매개 변수로 서비스를 삽입하십시오. 간단하다.

    생성자 매개 변수로 서비스를 삽입하십시오. 간단하다.

    @EnableWebMvc
    @Configuration
    public class WebConfig extends WebMvcConfigurerAdapter {
    
       @Autowired
       ISomeService someService;
    
       @Override
       public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new LocaleInterceptor(someService));
       }
    
    }
    

    그런 다음 인터셉터를 다시 구성하십시오.

    public class LocaleInterceptor extends HandlerInterceptorAdaptor {
    
    
         private final ISomeService someService;
    
         public LocaleInterceptor(ISomeService someService) {
             this.someService = someService;
         }
    
    
    }
    

    건배!

  4. from https://stackoverflow.com/questions/23349180/java-config-for-spring-interceptor-where-interceptor-is-using-autowired-spring-b by cc-by-sa and MIT license