fix: BeannameGenerator 적용
parent
3e21f26348
commit
b12c0a6371
@ -1,56 +0,0 @@
|
||||
package com.xit.core.config._ignore;
|
||||
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
||||
import org.springframework.beans.factory.support.BeanNameGenerator;
|
||||
import org.springframework.context.annotation.AnnotationBeanNameGenerator;
|
||||
import org.springframework.lang.NonNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 패키지 이름이 다른데, 클래스 이름이 동일한 경우
|
||||
* 두 개의 클래스 모두 빈으로 등록
|
||||
*
|
||||
* 특정 어노테이션을 가진 클래스만 패키지 이름까지 포함하여 빈 등록 시에 이름을 구분할 수 있도록 한다.
|
||||
*
|
||||
* /v1/api, /v2/api 형태로 생성 가능하도록
|
||||
*/
|
||||
public class CustomBeanNameGenerator implements BeanNameGenerator {
|
||||
|
||||
/**
|
||||
* basePackages 외에 scaning된 beanGenerator
|
||||
*/
|
||||
private static final BeanNameGenerator DELEGATE = new AnnotationBeanNameGenerator();
|
||||
|
||||
/**
|
||||
* VersioningBeanNameGenerator 대상 package 경로
|
||||
*/
|
||||
private final List<String> basePackages = new ArrayList<>(
|
||||
Arrays.asList("com.xit.biz", "com.xit.core")
|
||||
);
|
||||
|
||||
@Override
|
||||
public @NonNull String generateBeanName(@NonNull BeanDefinition definition, @NonNull BeanDefinitionRegistry registry) {
|
||||
if(isTargetPackageBean(definition)) {
|
||||
return getBeanName(definition);
|
||||
}
|
||||
|
||||
return DELEGATE.generateBeanName(definition, registry);
|
||||
}
|
||||
|
||||
private boolean isTargetPackageBean(BeanDefinition definition) {
|
||||
String beanClassName = getBeanName(definition);
|
||||
return basePackages.stream().anyMatch(beanClassName::startsWith);
|
||||
}
|
||||
|
||||
private String getBeanName(BeanDefinition definition) {
|
||||
return definition.getBeanClassName();
|
||||
}
|
||||
|
||||
public void addBasePackages(String path) {
|
||||
this.basePackages.add(path);
|
||||
}
|
||||
}
|
@ -1,54 +0,0 @@
|
||||
package com.xit.core.config._ignore;
|
||||
|
||||
import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
||||
import org.springframework.beans.factory.support.BeanNameGenerator;
|
||||
import org.springframework.context.annotation.AnnotationBeanNameGenerator;
|
||||
import org.springframework.lang.NonNull;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* 패키지 이름이 다른데, 클래스 이름이 동일한 경우
|
||||
* 두 개의 클래스 모두 빈으로 등록
|
||||
*
|
||||
* 특정 어노테이션을 가진 클래스만 패키지 이름까지 포함하여 빈 등록 시에 이름을 구분할 수 있도록 한다.
|
||||
*
|
||||
* /v1/api, /v2/api 형태로 생성 가능하도록
|
||||
* </pre>
|
||||
*/
|
||||
public class CustomBeanNameGenerator2 implements BeanNameGenerator {
|
||||
|
||||
private final AnnotationBeanNameGenerator defaultNameGenerator = new AnnotationBeanNameGenerator();
|
||||
|
||||
@Override
|
||||
public @NonNull String generateBeanName(@NonNull BeanDefinition definition, @NonNull BeanDefinitionRegistry registry) {
|
||||
String beanName;
|
||||
|
||||
if (isService(definition)) {
|
||||
beanName = getFullName((AnnotatedBeanDefinition) definition);
|
||||
} else {
|
||||
beanName = defaultNameGenerator.generateBeanName(definition, registry);
|
||||
}
|
||||
return beanName;
|
||||
}
|
||||
|
||||
private String getFullName(final AnnotatedBeanDefinition definition) {
|
||||
// 패키지를 포함한 전체 이름을 반환한다.
|
||||
return definition.getMetadata().getClassName();
|
||||
}
|
||||
|
||||
private boolean isService(final BeanDefinition definition) {
|
||||
if (definition instanceof AnnotatedBeanDefinition) {
|
||||
final Set<String> annotationTypes = ((AnnotatedBeanDefinition) definition).getMetadata()
|
||||
.getAnnotationTypes();
|
||||
|
||||
return annotationTypes.stream()
|
||||
.anyMatch(type -> type.equals(Service.class.getName()));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue