[SPRING] 스프링 빈에 매개 변수를 동적으로 전달하는 방법
SPRING스프링 빈에 매개 변수를 동적으로 전달하는 방법
나는 봄에 새로운 사람이다.
콩 등록을위한 코드입니다 :
<bean id="user" class="User_Imple"> </bean>
<bean id="userdeff" class="User"> </bean>
이것은 나의 콩 클래스이다.
public class User_Imple implements Master_interface {
private int id;
private User user; // here user is another class
public User_Imple() {
super();
}
public User_Imple(int id, User user) {
super();
this.id = id;
this.user = user;
}
// some extra functions here....
}
이것은 행동을 수행하는 주요 방법입니다.
public static void main(String arg[]) {
ApplicationContext context = new ClassPathXmlApplicationContext("/bean.xml");
Master_interface master = (Master_interface)context.getBean("user");
// here is my some operations..
int id = ...
User user = ...
// here is where i want to get a Spring bean
User_Imple userImpl; //want Spring-managed bean created with above params
}
이제 매개 변수를 사용하여이 생성자를 호출하고 이러한 매개 변수가 내 주요 메서드에서 동적으로 생성됩니다. 이것은 내가 bean.config 파일에서 선언 한 것과 같이 정적이 아닌 동적으로 전달하고자 함을 의미합니다.
해결법
-
==============================
1.생성자 삽입을 살펴보십시오.
생성자 삽입을 살펴보십시오.
또한 Springbean의 다른 라이프 사이클 차단을 위해 IntializingBean과 BeanPostProcessor를 살펴보십시오.
-
==============================
2.만약 당신이 맞다면, 올바른 답은 #getBean (String beanName, Object ... args)를 사용하여 bean에게 인자를 넘겨 줄 것입니다. Java 기반 구성을 위해 어떻게 수행되는지 보여 줄 수 있지만 xml 기반 구성을 위해 수행되는 방법을 찾아야합니다.
만약 당신이 맞다면, 올바른 답은 #getBean (String beanName, Object ... args)를 사용하여 bean에게 인자를 넘겨 줄 것입니다. Java 기반 구성을 위해 어떻게 수행되는지 보여 줄 수 있지만 xml 기반 구성을 위해 수행되는 방법을 찾아야합니다.
@Configuration public class ApplicationConfiguration { @Bean @Scope("prototype") //As we want to create several beans with different args, right? String hello(String name) { return "Hello, " + name; } } //and later in your application AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfiguration.class); String helloCat = (String) context.getBean("hello", "Cat"); String helloDog = (String) context.getBean("hello", "Dog");
이게 너가 원하는거야?
Upd. 이 대답은 너무 많은 upvotes를 얻지 않으며 아무도는 나의 코멘트를 보지 않는다. 문제에 대한 해결책이지만, 스프링 방지 패턴으로 간주되므로 사용하지 않아야합니다! factory, lookup-method 등을 사용하여 일을 올바르게하는 몇 가지 다른 방법이 있습니다.
참조 용으로 다음 SO 게시물을 사용하십시오. 런타임시 beans 작성
-
==============================
3.생성자 주입이 도움이 될 수 있습니다. 이 경우 ID와 user를 속성으로 갖는 POJO를 생성하고 생성자에 POJO를 전달해야 할 수도 있습니다. 설정 파일의 생성자 삽입에서 pojo를 참조로이 생성자를 참조 할 수 있습니다. ID 및 사용자의 동적 데이터 값을 처리하게됩니다.
생성자 주입이 도움이 될 수 있습니다. 이 경우 ID와 user를 속성으로 갖는 POJO를 생성하고 생성자에 POJO를 전달해야 할 수도 있습니다. 설정 파일의 생성자 삽입에서 pojo를 참조로이 생성자를 참조 할 수 있습니다. ID 및 사용자의 동적 데이터 값을 처리하게됩니다.
희망이 도움이 !!
-
==============================
4.위의 생성자 주입 / 설정 주입을 사용하기 위해 제안 된 답변이 찾고있는 사용 사례에 완벽하게 작동하지 않는다고 생각합니다. Spring에서는 생성자 / 설정자에 대한 정적 인수 값을 더 많이 또는 더 적게 사용합니다. Spring Container에서 Bean을 가져 오기 위해 값을 동적으로 전달하는 방법을 알지 못합니다. 그러나 User_Imple 인스턴스를 동적으로 가져 오려면 공장 클래스 User_Imple_Factory를 사용하는 것이 좋습니다.
위의 생성자 주입 / 설정 주입을 사용하기 위해 제안 된 답변이 찾고있는 사용 사례에 완벽하게 작동하지 않는다고 생각합니다. Spring에서는 생성자 / 설정자에 대한 정적 인수 값을 더 많이 또는 더 적게 사용합니다. Spring Container에서 Bean을 가져 오기 위해 값을 동적으로 전달하는 방법을 알지 못합니다. 그러나 User_Imple 인스턴스를 동적으로 가져 오려면 공장 클래스 User_Imple_Factory를 사용하는 것이 좋습니다.
public class User_Imple_factory { private static ApplicationContext context =new ClassPathXmlApplicationContext("/bean.xml"); public User_Imple createUserImple(int id) { User user = context.getBean("User"); return new User_Imple(id, user); } }
-
==============================
5.아마도 User_Imple을 보통의 Pojo (스프링 빈 대신)로두면 문제가 해결 될 것입니다.
아마도 User_Imple을 보통의 Pojo (스프링 빈 대신)로두면 문제가 해결 될 것입니다.
<!-- Only use User as a Spring Bean --> <bean id="userdeff" class="User"></bean>
자바:
public static void main(String arg[]) { ApplicationContext context =new ClassPathXmlApplicationContext("/bean.xml"); User user = context.getBean(User.class); int id = // dynamic id Master_interface master = new User_Imple(id, user); }
from https://stackoverflow.com/questions/16997034/how-to-pass-parameters-dynamically-to-spring-beans by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 속도의 로더 경로를 올바르게 설정하는 방법 (0) | 2019.03.14 |
---|---|
[SPRING] 어떻게 thymeleaf를 사용하여 두 가지 객체를 하나의 양식으로 전달할 수 있습니까? (0) | 2019.03.14 |
[SPRING] MultipartException : 현재 요청이 다중 요청이 아닙니다. (0) | 2019.03.14 |
[SPRING] 내 사용자 지정 HTTP 헤더를 Spring RestTemplate 요청에 추가 / RestTemplate 확장 (0) | 2019.03.14 |
[SPRING] 요소 "context : component-scan"에 대한 접두어 "context"는 바인딩되지 않습니다. (0) | 2019.03.14 |