@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
'code' 카테고리의 다른 글
Java Spring Security: 401 토큰 OAuth2 엔드포인트에 대해 승인되지 않음 (0) | 2023.07.22 |
---|---|
MariaDB 기본 플로트는 소수점 이하의 자리를 포함할 수 없습니다. (0) | 2023.07.22 |
자바.java.java잘못된 인수메서드에서 참조된 예외는 클래스 로더에서 볼 수 없습니다. (0) | 2023.07.22 |
printf 콘솔에서 인쇄 안 함 (0) | 2023.07.17 |
클래스 속성과 인스턴스 속성의 차이점은 무엇입니까? (0) | 2023.07.17 |