[SPRING] 스프링 자바 설정에서 @Bean 어노테이션으로 된 메소드 호출하기
SPRING스프링 자바 설정에서 @Bean 어노테이션으로 된 메소드 호출하기
Spring injection이 @Bean 어노테이션으로 메소드를 호출하는 방법에 대해 궁금합니다. 메소드에 @Bean 어노테이션을 넣고 인스턴스를 반환하면 메소드를 호출하고 반환 된 인스턴스를 가져와 Bean을 생성하도록 Spring에 알린다는 것을 이해합니다. 그러나 때로는 다른 bean을 연결하거나 다른 코드를 설정하는 데 bean을 사용해야합니다. 이것이 행해지는 통상적 인 방법은 인스턴스를 얻기 위해 @Bean annotated 메소드를 호출하는 것입니다. 내 질문은, 왜 주위에 떠 다니는 콩의 여러 인스턴스가 발생하지 않는가?
예를 들어, 아래의 코드 (다른 질문에서 가져옴)를 참조하십시오. entryPoint () 메소드는 @Bean으로 주석 처리되어 있으므로 스프링이 BasicAuthenticationEntryPoint의 새 인스턴스를 bean으로 생성 할 것이라고 생각합니다. 그런 다음 configure 블록에서 entryPoint ()를 다시 호출하지만 entryPoint ()가 Bean 인스턴스를 반환하고 여러 번 호출되지 않은 것처럼 보입니다 (로깅을 시도하고 하나의 로그 항목 만 가져옴). 잠재적으로 구성의 다른 부분에서 entryPoint ()를 여러 번 호출 할 수 있으며 항상 동일한 인스턴스를 가져옵니다. 이 사실에 대한 나의 이해가 맞습니까? 스프링은 @Bean으로 주석이 달린 메소드를 마술처럼 재 작성합니까?
@Bean
public BasicAuthenticationEntryPoint entryPoint() {
BasicAuthenticationEntryPoint basicAuthEntryPoint = new BasicAuthenticationEntryPoint();
basicAuthEntryPoint.setRealmName("My Realm");
return basicAuthEntryPoint;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.exceptionHandling()
.authenticationEntryPoint(entryPoint())
.and()
.authorizeUrls()
.anyRequest().authenticated()
.and()
.httpBasic();
}
해결법
-
==============================
1.예, 봄은 마술을합니다. Spring 문서 확인 :
예, 봄은 마술을합니다. Spring 문서 확인 :
이것은 @Bean 메쏘드에 대한 호출이 CGLIB를 통해 프록시되기 때문에 캐쉬 된 빈 버전이 리턴된다는 것을 의미합니다 (새로운 것이 생성되지 않습니다).
@Beans의 기본 범위는 SINGLETON입니다. PROTOTYPE과 같이 다른 범위를 지정하면 호출이 원래 메소드로 전달됩니다.
정적 메소드에는 유효하지 않습니다. 봄 워드 프로세서에 따라 :
from https://stackoverflow.com/questions/27990060/calling-a-bean-annotated-method-in-spring-java-configuration by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring Security 3.2.0.RELEASE를 사용하면 순수 HTML 태그 라이브러리가없는 페이지에서 CSRF 토큰을 얻을 수 있습니까? (0) | 2018.12.30 |
---|---|
[SPRING] Autowiring 실패 : 관리 유형이 아닙니다. (0) | 2018.12.30 |
[SPRING] Spring MVC REST 컨트롤러에서 HTTP 헤더 정보에 액세스하는 방법은 무엇입니까? (0) | 2018.12.30 |
[SPRING] JPA 트랜잭션을 커밋 할 수 없음 : rollbackOnly로 표시된 트랜잭션 (0) | 2018.12.29 |
[SPRING] 하나의 Spring 애플리케이션에서 web.xml에 여러 서블릿을 등록하는 방법 (0) | 2018.12.29 |