[SPRING] 런타임 생성자 인자를 가진 스프링 빈
SPRING런타임 생성자 인자를 가진 스프링 빈
런타임시 전달되는 생성자 인자가있는 Spring 자바 설정에서 Spring 빈을 만들고 싶다. 생성자에서 몇 가지 인수를 예상하는 bean fixedLengthReport가있는 다음 Java 구성을 작성했습니다.
@Configuration
Public AppConfig {
@Autowrire
Dao dao;
@Bean
@Scope(value = "prototype")
**//SourceSystem can change at runtime**
public FixedLengthReport fixedLengthReport(String sourceSystem) {
return new TdctFixedLengthReport(sourceSystem, dao);
}
그러나 빈이 발견되지 않아 sourceSystem이 연결할 수 없다는 오류가 발생합니다. 어떻게 런타임 생성자 인자로 빈을 생성 할 수 있습니까?
Spring 4.2를 사용하고 있습니다.
해결법
-
==============================
1.BeanFactory와 함께 프로토 타입 빈을 사용할 수 있습니다.
BeanFactory와 함께 프로토 타입 빈을 사용할 수 있습니다.
@Configuration public class AppConfig { @Autowired Dao dao; @Bean @Scope(value = "prototype") public FixedLengthReport fixedLengthReport(String sourceSystem) { return new TdctFixedLengthReport(sourceSystem, dao); } }
@Scope (value = "prototype")은 Spring이 시작시 Bean을 인스턴스화하지 않는다는 것을 의미하지만 필요시 나중에 처리 할 것입니다. 이제 프로토 타입 bean의 인스턴스를 사용자 정의하려면 다음을 수행해야한다.
@Controller public class ExampleController{ @Autowired private BeanFactory beanFactory; @RequestMapping("/") public String exampleMethod(){ TdctFixedLengthReport report = beanFactory.getBean(TdctFixedLengthReport.class, "sourceSystem"); } }
시작시 Bean을 인스턴스화 할 수 없으므로 Bean을 직접 Autowire하지 않아야합니다. 그렇지 않으면 Spring은 빈 자신을 인스턴스화하려고 시도 할 것이다. 이 사용은 오류를 일으킬 것입니다.
@Controller public class ExampleController{ //next declaration will cause ERROR @Autowired private TdctFixedLengthReport report; }
-
==============================
2.BeanFactory # getBean (String name, Object ... args) 메소드를 사용하여 매개 변수가있는 프로토 타입을 얻으려면 코드가 멋지게 보입니다.
BeanFactory # getBean (String name, Object ... args) 메소드를 사용하여 매개 변수가있는 프로토 타입을 얻으려면 코드가 멋지게 보입니다.
Spring Java Config : 런타임 인자로 프로토 타입 범위의 @Bean을 만드는 방법은? BeanFactory # getBean (String name, Object ... args) 당신이 찾고있는 것이다.
나는 당신의 IDEA (제 경우 IntelliJ IDEA 버전 15)가 당신에게 오류를주고 그것이 런타임 / 컴파일 시간 오류가 아니라고 생각합니다.
IntelliJ에서는 스프링 검사의 설정을 변경할 수 있습니다.
from https://stackoverflow.com/questions/35108778/spring-bean-with-runtime-constructor-arguments by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring 데이터의 클래스에 대해 MongoDb 컬렉션 이름을 구성하는 방법 (0) | 2019.02.03 |
---|---|
[SPRING] Spring MVC requestmapping 핸들러 메소드에서 {id :. +}의 의미는 무엇입니까? (0) | 2019.02.03 |
[SPRING] Spring / Hibernate / JUnit - Thread에 바인드 된 Hibernate Session 없음 (0) | 2019.02.02 |
[SPRING] Spring 보안 및 Java 구성을 사용하는 사용자 정의 인증 공급자 (0) | 2019.02.02 |
[SPRING] Spring : 클라이언트가 보낸 요청이 구문 상 올바르지 않습니다 (). (0) | 2019.02.02 |