gpt4 book ai didi

java - 依赖注入(inject),需要类似工厂的功能

转载 作者:行者123 更新时间:2023-11-30 04:14:19 25 4
gpt4 key购买 nike

我正在使用 Spring 开发一个 Web 应用程序。

我有一个通用的抽象类和它的许多实现。

现在,在 Controller 中,根据某些参数,我需要它的不同实现。

这可以通过工厂模式轻松实现。

例如:

abstract class Animal{
public abstract void run(){
}
}

class Dog extends Animal{
...
}
Class Cat extends Animal{
...
}

现在使用工厂模式,我可以使用工厂方法创建一个工厂类,该方法根据某些参数创建动物。 但我不想自己创建实例

我需要相同的功能,但我希望 Spring 来管理一切。因为不同的实现有其依赖关系,我希望它们由 Spring 注入(inject)。

处理这种情况的最佳方法是什么?

最佳答案

配置您想要创建为原型(prototype) bean 的 bean。接下来创建一个工厂,它基本上知道根据输入从应用程序上下文中检索哪个 bean(因此,您基本上不用创建它们,而是让 spring 完成繁重的工作)。

可以使用 @Component@Scope("prototype") 组合或使用 XML 配置来定义组件。

abstract class Animal{
public abstract void run(){}
}

@Component
@Scope("prototype")
class Dog extends Animal{}


@Component
@Scope("prototype")
Class Cat extends Animal{}

还有一个 AnimalFactory 来完成答案。

@Component
public class AnimalFactory implements BeanFactoryAware {

private BeanFactory factory;

public Animal create(String input) {
if ("cat".equals(input) ) {
return factory.getBean(Cat.class);

} else if ("dog".equals(input) ) {
return factory.getBean(Dog.class);
}
}

public void setBeanFactory(BeanFactory beanFactory) {
this.factory=beanFactory;
}

}

关于java - 依赖注入(inject),需要类似工厂的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18782146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com