복붙노트

[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. ==============================

    1.생성자 삽입을 살펴보십시오.

    생성자 삽입을 살펴보십시오.

    또한 Springbean의 다른 라이프 사이클 차단을 위해 IntializingBean과 BeanPostProcessor를 살펴보십시오.

  2. ==============================

    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. ==============================

    3.생성자 주입이 도움이 될 수 있습니다. 이 경우 ID와 user를 속성으로 갖는 POJO를 생성하고 생성자에 POJO를 전달해야 할 수도 있습니다. 설정 파일의 생성자 삽입에서 pojo를 참조로이 생성자를 참조 할 수 있습니다. ID 및 사용자의 동적 데이터 값을 처리하게됩니다.

    생성자 주입이 도움이 될 수 있습니다. 이 경우 ID와 user를 속성으로 갖는 POJO를 생성하고 생성자에 POJO를 전달해야 할 수도 있습니다. 설정 파일의 생성자 삽입에서 pojo를 참조로이 생성자를 참조 할 수 있습니다. ID 및 사용자의 동적 데이터 값을 처리하게됩니다.

    희망이 도움이 !!

  4. ==============================

    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. ==============================

    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);
    }
    
  6. from https://stackoverflow.com/questions/16997034/how-to-pass-parameters-dynamically-to-spring-beans by cc-by-sa and MIT license