스프링 빈에 싱글 톤 객체 의존성을 주입하고 싶습니다. catch는 객체를 주입하고자하는 클래스에 액세스하고 수정할 수 없다는 것입니다. 예제를 설명하겠습니다.스프링 빈에 의존성 삽입하기
그래서 내 인터페이스 및 다음과 같은이 인터페이스의 구현이 있습니다. 내 구성 클래스의 다음
public interface MyServiceProxy {
String BEAN_NAME = "MyServiceProxy";
Data getData(String dataId);
}
public class MyServiceProxyImpl implements MyServiceProxy {
private final MyServiceClient client;
public MyServiceProxyImpl(MyServiceClient client) {
this.client = client;
}
@Override
public Data getData(String dataId) {//...}
, 나는 빈을 만드는 오전,하지만 난 생성자에서 그것에게
MyServiceClient
개체를 전달해야하고, 캐치는 외부 패키지이기 때문에이 빈
MyServiceClient
을 할 수 없다는 것입니다 나는 그것을 수정할 수 없다.
@Configuration
public class MyServiceProxyConfiguration {
@Bean(name = MyServiceProxy.BEAN_NAME)
public MyServiceProxy getMyServiceProxy(MyServiceClient client) { // could not autowire client
return new MyServiceProxyImpl(client);
}
}
그래서 내가하고 싶은 것이, getMyServiceProxy
콩에 인수를/통과 autowire하기 할 수있는 것입니다. 현재 IntelliJ에서 오류가 발생했습니다 클라이언트를 autowire 할 수 없습니다. 어떻게이 일을 성취 할 수 있습니까?
UPDATE 다음 작업 같은
겠습니까 뭔가? IntelliJ는 여전히 "autowire 수 없음"오류를보고하기 때문입니다. 그래서 client
을 반환하는 bean 메소드를 생성했다면, 주입 할 메소드에 @Inject 어노테이션을 추가하십시오. 이 코드를 테스트하지 않았습니다
@Configuration
public class MyServiceProxyConfiguration {
@Bean
public MyServiceClient getMyServiceClient() {
return MyServiceClient.getInstance(); //initiate MyServiceClient
}
@Bean(name = MyServiceProxy.BEAN_NAME)
public MyServiceProxy getMyServiceProxy(MyServiceClient client) {
return new MyServiceProxyImpl(client);
}
}
을하지만, 그것을 작동합니다 :
public class MyServiceClientBuilder {
private final ClientBuilder builder;
public MyServiceClientBuilder(ClientBuilder builder) {
this.builder = builder;
}
@Bean
public MyServiceClient build() {
return builder.newClient();
}
@Configuration
public class MyServiceProxyConfiguration {
@Inject
@Bean(name = MyServiceProxy.BEAN_NAME)
public MyServiceProxy getMyServiceProxy(MyServiceClient client) { // could not autowire client
return new MyServiceProxyImpl(client);
}
}
메소드에서 인수를 제거하고'return new MyServiceProxyImpl (MyServiceClient.getInstance())'를 사용하는 것은 어떻습니까? –
업데이트 된 코드에서 MyServiceClientBuilder에 주석이 없기 때문에 Spring은'MyServiceClientBuilder'에서 해당 @ @ Bean 주석을 무시하기 때문에 'MyServiceClient'는 Bean으로 생성되지 않습니다. 하지만 내 대답에는 비슷한 것이 있습니다. 확인해 보셨습니까? –
@BojanTrajkovski 안녕하세요, 네, 있습니다. 나는 당신이 옳다고 생각합니다. 나는 그것을 시도 할 것이다. 감사! – zwiebl