복붙노트

[SPRING] Spring에서 상수 문자열을 사용하여 패키지 (포함 하위 패키지)의 각 Bean ID 앞에 어떻게합니까?

SPRING

Spring에서 상수 문자열을 사용하여 패키지 (포함 하위 패키지)의 각 Bean ID 앞에 어떻게합니까?

특정 패키지와 하위 패키지에 @String으로 주석이 달린 각 bean 앞에 주어진 문자열을 붙이는 방법이 있습니까?

예를 들어,이 빈이 있습니다.

package com.example.foo;

@Component
class MyBean {}

자동으로 (컴포넌트 스캔에 의해) 생성 된 Bean ID가 fooMyBean (기본 'M'이 선호 됨) 또는 foo-myBean (기본 myBean 대신)이되도록 foo의 모든 Bean에 foo가 접두어로 사용되기를 원합니다. 접두사는 어딘가에 정의 된 문자열이며 패키지 이름에서 자동으로 파생되지 않습니다.

또는 @FooComponent와 같은 사용자 지정 주석을 사용하여이를 달성 할 수 있습니까? (어떻게? ;-))

해결법

  1. ==============================

    1.Spring은 BeanNameGenerator 전략을 사용하여 Bean 이름을 생성합니다. 특히 AnnotationBeanNameGenerator는 첫 글자 소문자 전략으로 @Component 클래스의 이름을 생성하는 것입니다.

    Spring은 BeanNameGenerator 전략을 사용하여 Bean 이름을 생성합니다. 특히 AnnotationBeanNameGenerator는 첫 글자 소문자 전략으로 @Component 클래스의 이름을 생성하는 것입니다.

    전달 된 BeanDefinition을 검사하여 고유 한 BeanNameGenerator를 구현하고 사용자 정의 전략을 적용 할 수 있습니다.

    Spring Boot를 사용하는 경우 SpringApplicationBuilder에서 바로 수행 할 수 있습니다.

    @SpringBootApplication
    public class DemoApplication {
    
        public static class CustomGenerator extends AnnotationBeanNameGenerator {
    
            @Override
            public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) {
                /**
                  * access bean annotations or package ...
                  */
                return super.generateBeanName(definition, registry);
            }
        }
    
        public static void main(String[] args) {
            new SpringApplicationBuilder(DemoApplication.class)
                    .beanNameGenerator(new CustomGenerator())
                    .run(args);
        }
    }
    
  2. from https://stackoverflow.com/questions/39818728/how-do-i-prefix-each-bean-id-in-a-package-inc-sub-packages-with-a-constant-st by cc-by-sa and MIT license