반응형
특정 콩에 대해 스프링 자동 배선을 비활성화하는 방법?
항아리(외부 도서관)에는 스프링을 내부적으로 사용하는 클래스가 있습니다.라이브러리 클래스는 다음과 같은 구조를 갖습니다.
@Component
public class TestBean {
@Autowired
private TestDependency dependency;
...
}
그리고 라이브러리는 오브젝트를 구성하기 위한 API를 제공합니다.
public class Library {
public static TestBean createBean() {
ApplicationContext context = new AnnotationConfigApplicationContext(springConfigs);
return context.getBean(TestBean);
}
}
애플리케이션에는 다음과 같은 구성이 있습니다.
@Configuration
public class TestConfig {
@Bean
public TestBean bean() {
return Library.createBean();
}
}
예외가 있습니다.Field dependency in TestBean required a bean of type TestDependency that could not be found.
.
하지만 스프링은 이미 콩이 구성되어 있기 때문에 무언가를 주입하려고 해서는 안 됩니다.
특정 콩에 대해 스프링 자동 배선을 비활성화할 수 있습니까?
@Juan의 답변을 바탕으로 자동으로 연결되지 않도록 콩을 포장하는 도우미를 만들었습니다.
public static <T> FactoryBean<T> preventAutowire(T bean) {
return new FactoryBean<T>() {
public T getObject() throws Exception {
return bean;
}
public Class<?> getObjectType() {
return bean.getClass();
}
public boolean isSingleton() {
return true;
}
};
}
...
@Bean
static FactoryBean<MyBean> myBean() {
return preventAutowire(new MyBean());
}
효과가 있었습니다.
import org.springframework.beans.factory.FactoryBean;
...
@Configuration
public class TestConfig {
@Bean
public FactoryBean<TestBean> bean() {
TestBean bean = Library.createBean();
return new FactoryBean<TestBean>()
{
@Override
public TestBean getObject() throws Exception
{
return bean;
}
@Override
public Class<?> getObjectType()
{
return TestBean.class;
}
@Override
public boolean isSingleton()
{
return true;
}
};
}
}
특정 콩에 대한 자동 배선을 비활성화하는 것은 불가능해 보입니다.
그래서 몇 가지 해결책이 있습니다.우리는 대상 콩의 포장지를 만들어 원래 콩 대신 사용할 수 있습니다.
public class TestBeanWrapper {
private final TestBean bean;
public TestBeanWrapper(TestBean bean) {
this.bean = bean;
}
public TestBean bean() {
return bean;
}
}
@Configuration
public class TestConfig {
@Bean
public TestBeanWrapper bean() {
return new TestBeanWrapper(Library.createBean());
}
}
@RestController
public class TestController {
@Autowired
private TestBeanWrapper bean;
...
}
정확히는 아니지만 필요한 =를 추가할 수 있습니다.(@Autowired(required=false))
자동으로 연결된 주석에 표시됩니다.그러나 NullPointer 예외가 발생할 수 있으므로 주의하십시오.
언급URL : https://stackoverflow.com/questions/41880210/how-to-disable-spring-autowiring-for-a-certain-bean
반응형
'programing' 카테고리의 다른 글
도커 컴포지트 후 스크립트 실행 방법 (0) | 2023.10.18 |
---|---|
Twitter API 1.1 oAuth로 사용자 타임라인 인증 및 요청 (0) | 2023.10.18 |
활동 외부에서 활동 시작()을 호출하시겠습니까? (0) | 2023.10.18 |
MySQL 왼쪽 조인 다중 조건 (0) | 2023.10.18 |
SQL Server에서 오늘부터 최근 30일간의 레코드 가져오기 (0) | 2023.10.18 |