좀 혼란스러운 부분을 발견 봄 Javaconfig 참조 문서 http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/beans.html 찾아보기 ... "를 @Configuration 어노테이션을 사용 5.12.4"섹션 에서봄 Javaconfig 간 콩 의존성
는 말한다 :
,745,151 : @Beans 서로에 종속되면"는 그 의존성을 표현하는 한 방법은 콩은 다른 전화 갖는 것처럼 간단
@Configuration public class AppConfig { @Bean public Foo foo() { return new Foo(bar()); } @Bean public Bar bar() { return new Bar(); } }
위 예제에서 foo bean은 생성자 삽입을 통해 bar에 대한 참조를 수신합니다. "
는 는음, 모든 비 상태 인 경우, 그 수도는 문제가 많은,하지만 당신은 응용 프로그램에서 다음 위의 설정을 가지고 있고,하지 :
@Autowired
private Foo foo;
@Autowired
private Bar bar;
콩의 해시 코드를 확인, 그것은 밝혀 , 개인 변수 바 잘, 당신은 무엇을 기대 아마도하지 않은 foo는, 에서 사용하는 것보다 다른 인스턴스 의에 바를 참조 할 것?
나는 정상적인 패턴이 아니라해야한다 말할 것이다 : 앱에서 모두 콩을 autowire하기 때, 당신은 단지 바의 단일 인스턴스를 생성합니다
이제@Configuration
public class AppConfig {
@Bean
public Bar bar() {
return new Bar();
}
@Autowired Bar bar;
@Bean
public Foo foo() {
return new Foo(bar);
}
}
.
내가 누락 되었습니까? 아니면 설명서가 여기에 부스러기가 맞습니까? 지금
@Configuration
public class AppConfig {
@Bean
public ClientService clientService1() {
ClientServiceImpl clientService = new ClientServiceImpl();
clientService.setClientDao(clientDao());
return clientService;
}
@Bean
public ClientService clientService2() {
ClientServiceImpl clientService = new ClientServiceImpl();
clientService.setClientDao(clientDao());
return clientService;
}
@Bean
public ClientDao clientDao() {
return new ClientDaoImpl();
}
}
:
그런 다음, 더 아래 섹션 에서 그들이이 문제를 "명확히"하려고처럼 보이는 "어떻게 자바 기반의 구성에 대한 자세한 내용은 내부적으로 작동합니다" 불행하게도이 구성은 런타임시로드되지 않습니다. 동일한 유형의 빈인 ClientService가 고유 한 특성이 없기 때문에 예외가 발생하므로 예외 발생
org.springframework.beans.factory.NoUniqueBeanDefinitionException:
No qualifying bean of type [.....] is defined:
expected single matching bean but found 2
그러나 우리는 약간의 예를 변경하고 처음 2 콩에게 다른 유형을 제공하는 경우에도,
@Bean
public ClientService1 clientService1() {...clientDao()...}
@Bean
public ClientService2 clientService2() {...clientDao()...}
@Bean
public ClientDao clientDao() {
return new ClientDaoImpl();
}
이 있기 때문에, 여전히 올바르지 않습니다 - 어떤 텍스트 주장과는 달리 - 우리는 여전히 다른 3를 만들 것 ClientDaoImpl의 인스턴스 인 은 3 개의 모든 빈을 자동으로 호출합니다.
다시 한 번 뭔가 누락되었거나 실제로 나쁘게 보일만한 문서입니까?
편집 : 추가 데모 내가 보는 문제 보여줄 것입니다 :
빈 ServiceA, 두 콩 ServiceB1, ServiceB2이 생성자를 분사을 서비스 A.
두 개의 테스트 클래스 구성을 제외하고 동일 Config01Test와 Config02Test. 첫 번째 테스트는 PASSES, 두 번째 FAILS는 고유성 때문에 발생합니다.
왜 당신이 다른'Bar' 객체를 얻을 수 있습니다 생각하십니까 전체 응용 프로그램 컨텍스트에서 줄 하나의 인스턴스 만이 있는지 확인해야합니까? – chrylis
작은 테스트를하고 빈에서 hashCodes를 확인하십시오. 그들은 다르다. 나는 위의 질문에 이것을 분명히했다, 고마워. – Rop
Spring Boot를 사용하여 GitHub에서 간단한 예제를 게시 할 수 있습니다. 나는이 행동을 한 번도 본 적이 없으며, 실제로 일어난다면 벌레입니다. – chrylis