티스토리 뷰
AmazonWebserviceClientFactoryBean 은 AbstractFactoryBean<T>를 상속하고 있으며, 이 따라서 메서드에는 createInstance()라는 메서드가 존재하며 이를 Override 하고 있다.
@Override
protected T createInstance() throws Exception {
String builderName = this.clientClass.getName() + "Builder";
Class<?> className = ClassUtils.resolveClassName(builderName,
ClassUtils.getDefaultClassLoader());
Method method = ClassUtils.getStaticMethod(className, "standard");
Assert.notNull(method, "Could not find standard() method in class:'"
+ className.getName() + "'");
AwsClientBuilder<?, T> builder = (AwsClientBuilder<?, T>) ReflectionUtils
.invokeMethod(method, null);
이게 크 코드다.
이 AmazonWebServiceClientFactoryBean은(어휴 이름 길다) ContextStackAutoConfiguration 클래스의 @Configuration이 지정되어 있으므로 스프링에 의해 탐지되어(어디서..?) 수행되는 초기화 과정에서 그 생성자가 호출된다.
@Bean
@ConditionalOnMissingAmazonClient(AmazonCloudFormation.class)
public AmazonWebserviceClientFactoryBean<AmazonCloudFormationClient> amazonCloudFormation() {
return new AmazonWebserviceClientFactoryBean<>(AmazonCloudFormationClient.class,
this.credentialsProvider, this.regionProvider);
}
그리고 생성된 것이 Spring Bean이기 때문에 저 createInstance 메서드가 호출된다. 즉, Override 된 쪽에 standard 란 메서드 이름을 찾아 호출을 하는 부분이 실행되는 바다.
이러니 IDE에서 제공하는 메서드 호출부를 찾는 기능이 동작할 리가 없다.
코드를 더 잘 볼걸.. 겨우 찾았네.
'Java' 카테고리의 다른 글
String Class 를 열어보다(시작)-3. 생성자..? (0) | 2021.03.21 |
---|---|
String Class 를 열어보다(시작). (0) | 2021.03.18 |
Java ConditionalOnClass 어노테이션 (0) | 2020.11.05 |
Java @Generated 어노테이션 (0) | 2020.11.05 |
Lite Mode Bean (0) | 2020.11.05 |
댓글