Java IoC框架可以生成具有动态构造函数参数的对象吗?

Java IoC框架可以生成具有动态构造函数参数的对象吗?,java,node.js,inversion-of-control,Java,Node.js,Inversion Of Control,以下是如何使用Java设置Pico容器: public class Juicer { private final Peelable peelable; private final Peeler peeler; public Juicer(Peelable peelable, Peeler peeler) { this.peelable = peelable; this.peeler = peeler; } } 配置: MutablePicoCont

以下是如何使用Java设置Pico容器:

public class Juicer {  
 private final Peelable peelable;  
 private final Peeler peeler;  

 public Juicer(Peelable peelable, Peeler peeler) {  
 this.peelable = peelable;  
 this.peeler = peeler;  
 }  
}  
配置:

MutablePicoContainer pico = new DefaultPicoContainer(); 
pico.addComponent(Apple.class);  /* Apple is peelable */
pico.addComponent(Juicer.class);  
pico.addComponent(Peeler.class);  
使用

在这种情况下,榨汁机将创建自己的苹果和削皮机

这与
节点di
的工作方式截然相反。节点di将创建一个对象,然后缓存它并继续使用它-因此它对于资源管理(例如,一个连接池)更好

我不知道怎么做的是在Apple类更具动态性的地方实例化它。也许它的构造函数是
Apple(BigDecimal-price)
,当它被实例化时,我需要传递价格。更现实地说,我有十万个用户连接在一台机器上,每个人都有一个不同的
密码验证器
。当显然需要为每个用户提供具有不同参数的不同框架时,
PasswordAuthenticator
如何来自IoC框架

密码验证器
与IoC一起使用,但不使用框架:

User.java:

// constructor
public User(String email, PasswordAuthenticator pa) {
    this.email = email;
    this.pa = pa;
PasswordAuthenticator.java:

public PasswordAuthenticator(byte[] privateKey, byte[] encryptedPassword) {
    // set instance variables
}
public String decrypt() {
    // crypto magic
    return decryptedPassword;
}
因此,您当然可以实例化一个用户,如:

User user = new User("abc@gmail.com", new PasswordAuthenticator(myKey, sqlResultSet.getBytes());
// sqlResultSet is for emphasis; to emphasize this is dynamic on a per-user basis
现在我必须告诉容器,它实际上不能随意地实例化PasswordAuthenticator的,但它只能在动态地传递参数时这样做


节点di是我这里的目标用例,所以我将标记为java和节点。显然,我正在试图通过类比来学习,并且在IoC框架能够实际解决的问题的范围内。

当显然需要为每个用户提供具有不同参数的不同密码验证器时,如何从IoC框架中获得密码验证器
我根本不知道Pico,但对于其他IoC容器(我在想春天),您可以为要注入的对象指定一个作用域。您可以让它在每次被请求时使用不同的参数创建一个新实例。您可以举一个需要注入的几个不同的
PasswordAuthenticator
对象的例子吗?如果没有IoC,您会怎么做?@SotiriosDelimanolis添加了非框架代码;请se see see edit.@SotiriosDelimanolis听起来也是我想要的。如果Spring有这个,而其他人没有,我也不会感到惊讶,但我还没有学习Spring的。你想让容器创建和处理
用户
密码验证器
对象吗,因为它们还有其他注入目标/生命周期方法可以管理ge?(对不起,我可能反应慢。)
User user = new User("abc@gmail.com", new PasswordAuthenticator(myKey, sqlResultSet.getBytes());
// sqlResultSet is for emphasis; to emphasize this is dynamic on a per-user basis