如何将参数动态传递给 Spring Bean

2022-09-01 13:10:44

我是春天的新手。

这是豆类注册的代码:

<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

如果我得到你是对的,那么正确的答案是使用方法,它将参数传递给bean。我可以向您展示如何针对基于 Java 的配置完成它,但是您必须了解如何针对基于 XML 的配置完成它。getBean(String beanName, Object... args)

@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");

这是你要找的吗?


更新

这个答案得到了太多的赞成票,没有人看我的评论。即使它是问题的解决方案,它也被认为是一个弹簧反模式,你不应该使用它!有几种不同的方法可以使用工厂,查找方法等来正确做事。

请使用以下SO帖子作为参考点:


答案 2

请看一下构造函数注入

另外,看看IntializingBeanBeanPostProcessor,了解春豆的其他生命周期拦截。


推荐