[SPRING] 콩에 대한 Spring @Configuration 캐시 참조는 어떻게 되는가?
SPRING콩에 대한 Spring @Configuration 캐시 참조는 어떻게 되는가?
Spring은 Java 기반 구성을 사용할 때 bar ()에 대한 두 번째 호출을 어떻게 방지합니까?
컴파일 시간 주석 처리 또는 메서드를 proxying하여 궁금하네요?
@Configuration
public class AppConfig {
@Bean
public Foo foo() {
return new Foo(bar());
}
@Bean
public Foo foo2() {
return new Foo(bar());
}
@Bean
public Bar bar() {
return new Bar();
}
}
해결법
-
==============================
1.당신이 당신의 문맥을 약간의 무언가 같이 창조했다고 가정하십시오.
당신이 당신의 문맥을 약간의 무언가 같이 창조했다고 가정하십시오.
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
@Configuration으로 인해, Spring은 AppConfig 타입의 빈을 생성하고 @Bean 메소드를 가지고 있기 때문에 그것을 프록시 처리한다. 구현 세부 사항은 ConfigurationClassEnhancer를 확인해야합니다.
이러한 메서드는 개체에서 직접 호출되지 않습니다. 분명히 그들은 컴파일 시간에 알려지지 않았기 때문에 그렇게 할 수 없습니다. 그들은 프록시에 반영을 통해 호출됩니다.
그래서 네가 가질 때
@Bean public CustomBean foo() { return new CustomBean(bar()); }
이는
@Bean public CustomBean foo() { return new CustomBean(this.bar()); }
이것은 메소드 호출의 결과를 캐시하고 이전에 호출 된 경우 즉시 리턴하는 프록시를 나타냅니다.
-
==============================
2.Spring은 bar ()에 대한 호출을 "방지"하지 않습니다. 대신, 시작할 때 spring은 @Bean으로 표시된 메소드 목록을 생성하고 각 메소드를 한 번 호출합니다. 원하는 경우 bar ()를 100 번 호출 할 수 있습니다. 봄, 그러나; 한 번만 호출 할 것입니다.
Spring은 bar ()에 대한 호출을 "방지"하지 않습니다. 대신, 시작할 때 spring은 @Bean으로 표시된 메소드 목록을 생성하고 각 메소드를 한 번 호출합니다. 원하는 경우 bar ()를 100 번 호출 할 수 있습니다. 봄, 그러나; 한 번만 호출 할 것입니다.
from https://stackoverflow.com/questions/20615374/how-does-spring-configuration-cache-references-to-beans by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Field @Autowired의 마법은 무엇입니까? (0) | 2019.07.19 |
---|---|
[SPRING] 스프링 부트 2.0에서`@Endpoint (id = "health")`를 만드는 방법은? (0) | 2019.07.19 |
[SPRING] Spring 5.0.2의 Log4jConfigurer (0) | 2019.07.19 |
[SPRING] 여러 필드가있는 사용자 정의 주석 유효성 검사 (0) | 2019.07.19 |
[SPRING] Hibernate Envers - createQuery (...) .executeUpdate (), .persist () 및 .merge ()에 대한 감사 레코드를 작성하지 않습니다. (0) | 2019.07.19 |