【问题标题】:Spring runtime object/bean creationSpring 运行时对象/bean 创建
【发布时间】:2013-03-13 15:10:09
【问题描述】:

我正在开发一个使用 spring-framework (v3.2.1) 的项目,但由于我不熟悉 spring 的做事方式,我目前遇到以下问题....如果有人能指出我正确的方向,那就太好了:

我正在尝试在运行时创建 Job 类的实例。 Job 类本身使用了 Job 类中的一些 @Autowired 服务。由于自动装配仅适用于受弹簧容器控制的对象......我想到的第一件事是:

@Component
@Scope("prototype")
class Job{

  @Autowired
  MyService service

  String name
  String group
  .
  .
  .

  public Job(){

  }

  public Job(String name, String group){

    this.name = name;
    this.group = group;

  }

  public void start(){

    //some code, use of service etc.
  }

}

现在我可以使用应用程序上下文通过调用context.getBean("job") 来获取新作业。新的作业实例是通过调用默认构造函数创建的,因此我必须在获得新的作业实例后设置名称和组参数:

Job j = context.getBean("job");

j.setName("Test");
j.setGroup("someGroup");
j.start()

我目前正在尝试确定是否有某种方法可以指定在运行时创建作业实例的参数。这样我就可以实例化具有不同状态的作业类的新对象。

正如我上面提到的,我目前被困在这里,由于我缺乏对 spring 的经验,我很难找出实现这一目标的最佳方法。也许有一些普遍接受的方式或模式来做这些事情。如果有更多春季经验的人可以为我指明正确的方向,那就太好了。

非常感谢!

【问题讨论】:

  • @Compoent(value="job") 会更好。

标签: spring object runtime instantiation


【解决方案1】:

【讨论】:

  • 这不是和调用构造函数一样,减去类型安全吗?在这种情况下为什么要使用 Spring?
【解决方案2】:

BeanFactory getBean(String name, Object[] args)

您可以使用它来传递参数数组

【讨论】:

    猜你喜欢
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 2016-06-24
    • 2013-10-06
    相关资源
    最近更新 更多