code

@Primary 빈이 존재하는 경우 다른 빈을 생성할 수 있는 이유는 무엇입니까?

starcafe 2023. 7. 22. 10:17
반응형

@Primary 빈이 존재하는 경우 다른 빈을 생성할 수 있는 이유는 무엇입니까?

무슨 문제가 있는지 이해가 안 됩니다.@Primary해결됩니다.

설명서에는 다음과 같이 나와 있습니다.

[@Primary] 여러 후보가 단일 값 종속성을 자동 배선할 수 있는 경우 빈에 우선 순위를 지정해야 함을 나타냅니다.후보자들 사이에 정확히 하나의 '기본' 빈이 존재하는 경우, 이 빈은 자동 배선됩니다.

코드 예제:

@Configuration
class Configuration {
   @Bean
   @Primary
   MyType bean1() {
       return new MyType(1);
   }

   @Bean
   MyType bean2() {
       return new MyType(2);
   }
}

:

나는 콩이 2개 있습니다.bean1그리고.bean2활자와 함께.MyType.bean1을 가지고 있습니다.@Primary주석, 그래서 유형의 개체를 자동 배선할 때MyType어떤 건설자에게,bean1선택될 것입니다.

주 콩이 항상 선택된다면 같은 종류의 콩을 두 개 갖는 것이 왜 유용합니까?언제 어떻게 사용할 수 있습니까?bean2주석이 달리지 않은 것은 무엇입니까?이 예는 다음과 같습니다.bean2중복되어 사용되지 않습니다.

당신은 여전히 당신이 실제로 원하는 콩을 언제든지 자격을 부여할 수 있습니다. 즉, 1차 콩이 항상 선택되지는 않을 것입니다.

@Component
class MyComponent
{
    public MyComponent(@Qualifier("bean2") MyType foo) { /*...*/ } 
}

@Primary두 명 이상의 후보자가 있을 경우 어떤 콩을 우선 순위에 둘 것인지 스프링에게 알려줍니다.항상 명시적으로 말할 수 있습니다.

또한 다른 생성자가 모든 목록을 가져올 수 있습니다.MyType이 경우 두 콩 모두 자동 배선됩니다.

@Component
class AnotherComponent
{
    public AnotherComponent(List<MyType> allFoos) { /*...*/ } 
}

그런데 왜 1차 콩이 주입된다면 같은 종류의 콩을 두 개 가질 수 있을까요?

사실은primary은 어떤 콩을 주입할지 지정하지 않은 경우에만 주입되며, 유형이 지정되지 않은 경우 어떤 콩을 주입할지 지정하는 데 사용됩니다.

질문에 답하자면, 같은 종류의 두 개의 콩을 갖는 것은 다른 구현을 제공하는 일반적인 방법입니다. 같은 콩의 두 개의 콩을 사용하려는 경우가 많습니다. 가장 일반적인 상황은 동일한 애플리케이션에 대해 두 개의 데이터 소스를 지정하려는 경우입니다.

그리고 어떤 콩과 함께 사용할 것인지 지정하기 위해 다음과 같이 @Resource 주석을 사용합니다.

@Resource(name="bean2")
MyType bean;

자세한 내용은 및 사이에 논의된 차이점을 확인할 수 있습니다.

예를 들어 여러 가지 콩의 경우가 있는데 그 중 몇 가지 차이점이 있다고 가정해 보십시오.대부분의 경우(예를 들어 90% 이상) 그 중 하나가 필요하고 다른 하나는 거의 사용하지 않습니다.이 경우 다음과 같이 주석을 달아야 합니다.@Primary가장 많이 사용되는 것이며 이 방식으로 더 이상의 사양이 제공되지 않을 때 프레임워크에 의해 직접 주입됩니다.▁the▁to▁the다▁exact를 사용하여 정확한 빈을 지정합니다.@Qualifier 주석

예를 들어 다음의 콩을 초기화할 수 있습니다.RestTemplate일반 설정을 사용하여 모든 응용 프로그램에서 사용할 글로벌 설정을 정의하고, 소규모 사용 사례 집합에 대해 특정 재시도 정책을 사용하는 글로벌 설정을 정의한다고 가정합니다.

@Primary의 가능한 용도 중 하나는 테스트에서 Bean을 @Primary로 설정하여 재정의할 수 있습니다.그래도 응용프로그램을 실행할 때 보조 빈이 사용됩니다.

언급URL : https://stackoverflow.com/questions/53483556/why-can-i-create-another-bean-if-a-primary-bean-exists

반응형