Spring Java 설정에서 @Bean 주석이 달린 메서드를 호출합니다.
스프링 인젝션이 어떻게 콜 메서드를 처리하는지 궁금하네요.@Bean
주석입니다.를 붙이면@Bean
메서드에 대한 주석과 인스턴스를 반환하면 메서드를 호출하고 반환된 인스턴스를 가져와 빈을 생성하도록 스프링에 지시하는 것으로 알고 있습니다.그러나 때로는 그 콩을 다른 콩과 연결하거나 다른 코드를 설정하기 위해 사용해야 합니다.이 작업을 수행하는 일반적인 방법은@Bean
instance를 가져오기 위한 주석 메서드.제 질문은, 왜 이것이 여러 개의 콩이 떠다니게 하지 않느냐는 것입니다.
예를 들어, (다른 질문에서 가져온) 아래 코드를 참조하십시오.그entryPoint()
방법에 주석을 달다@Bean
그래서 나는 봄이 새로운 예를 만들어 낼 것이라고 상상한다.BasicAuthenticationEntryPoint
콩으로요.그럼 전화하겠습니다.entryPoint()
다시 설정 블록에 포함되지만entryPoint()
는 빈 인스턴스를 반환하고 여러 번 호출되지 않습니다(로그를 시도했지만 로그 엔트리는 1개뿐).전화할 수도 있습니다.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();
}
네, 봄은 마법을 부려요.스프링 문서를 확인합니다.
여기서 마법이 찾아온다: All
@Configuration
클래스는 시작 시 CGLIB를 사용하여 서브클래스가 됩니다.서브클래스에서 자녀 메서드는 부모 메서드를 호출하여 새 인스턴스를 작성하기 전에 먼저 컨테이너에 캐시된(범위 지정) 콩이 있는지 확인합니다.
이것은, 에의 콜이@Bean
메서드는 CGLIB를 통해 프록시되므로 캐시된 버전의 빈이 반환됩니다(새로운 버전은 생성되지 않습니다).
디폴트 범위@Bean
s는SINGLETON
다음과 같은 다른 범위를 지정하는 경우PROTOTYPE
콜이 원래의 메서드로 전달됩니다.
정적 메서드에는 사용할 수 없습니다.스프링 문서에 따르면:
스태틱 콜
@Bean
메서드는 컨테이너에 의해 가로채이지 않으며, 심지어 내부에서도 가로채지 않습니다.@Configuration
classes(이 섹션의 앞부분에서 설명한 바와 같이)는 기술적인 제한으로 인해 CGLIB 서브클래싱은 비정적 메서드만 덮어쓸 수 있습니다.그 결과, 다른 사람에게 직접 전화를 걸 수 있습니다.@Bean
method는 표준 Java 시멘틱스를 가지므로 공장 메서드 자체에서 직접 독립 인스턴스가 반환됩니다.
언급URL : https://stackoverflow.com/questions/27990060/calling-a-bean-annotated-method-in-spring-java-configuration
'programing' 카테고리의 다른 글
Python의 클래스 메서드 차이: bound, unbound 및 static (0) | 2022.09.25 |
---|---|
반복하는 동안 HashSet에서 요소 제거 (0) | 2022.09.25 |
마리아에서 보기에 색인을 추가할 수 있습니까?DB (0) | 2022.09.25 |
PHP에서 static 메서드와 nonstatic 메서드를 선언할 수 있습니까? (0) | 2022.09.25 |
해시맵 키의 이름을 변경할 수 있습니까? (0) | 2022.09.25 |