스프링 주입이 @Bean
주석을 사용하여 호출 메서드를 처리하는 방법에 대해 궁금합니다 . @Bean
메서드에 주석을 달고 인스턴스를 반환하면 스프링이 메서드를 호출하고 반환 된 인스턴스를 가져 와서 빈을 만들도록 지시한다는 것을 이해합니다. 그러나 때로는 해당 빈을 사용하여 다른 빈을 연결하거나 다른 코드를 설정해야합니다. 이 작업을 수행하는 일반적인 방법은 @Bean
주석이있는 메서드를 호출하여 인스턴스를 가져 오는 것입니다. 제 질문은 왜 이것이 빈의 여러 인스턴스가 떠 다니는 원인이되지 않습니까?
예를 들어, 아래 코드를 참조하십시오 (다른 질문에서 발췌). 이 entryPoint()
메서드는 주석이 달려 @Bean
있으므로 spring이의 새 인스턴스를 BasicAuthenticationEntryPoint
빈으로 생성한다고 상상할 수 있습니다 . 그런 다음 entryPoint()
configure 블록에서 다시 호출 하지만 entryPoint()
빈 인스턴스를 반환하는 것처럼 보이며 여러 번 호출되지 않습니다 (로깅을 시도했지만 로그 항목이 하나뿐입니다). 잠재적으로 entryPoint()
구성의 다른 부분에서 여러 번 호출 할 수 있으며 항상 동일한 인스턴스를 얻을 수 있습니다. 이것에 대한 나의 이해가 맞습니까? Spring은 주석이 달린 메소드를 마법처럼 재 작성 @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();
}
@Bean
그리고 주석을 달아서@Primary
).