gpt4 book ai didi

java - 具有值的 Spring Autowiring 对象

转载 作者:行者123 更新时间:2023-11-29 04:46:04 24 4
gpt4 key购买 nike

假设我有一个名为 SomeClass 的类,它在构造函数中获取值并填充该字段。

String text;
String sometext;

public someClass(String text, String sometext){
this.text = text;
this.sometext = sometext;
}

SomeClass 有一个创建新对象的方法。在 Java 中,当我们创建一个新对象时,我们可以用类似的值实例化

ClassName variable = new ClassName(text, sometext);

并像这样使用构造函数填充 ClassName 中的字段

public ClassName(String text, String sometext){
this.text = text;
this.sometext = sometext;
}

但是在 spring 中使用 autowired 我们该怎么做呢?

@Autowired
public ClassName(SomeClass someClass){
this.text = someClass.text;
this.sometext = someClass.sometext;
}

这行不通。 spring 如何知道 SomeClass

的实例

更新:

我错了。我没有以 DI 的方式思考。而不是 Autowiring SomeClass。我必须 Autowiring ClassName

在没有 DI 的情况下,我在 ClassName 类的方法中创建了一个新对象

当使用 DI 时,我必须在 ClassName 类的方法中 Autowiring

@Autowired
ClassName className;

我可以直接填充字段,使字段公开

className.text = text;
className.sometext = sometext;

而且我可以使用 javabean。 但是如何通过构造函数来完成。

注意:spring 配置没有问题。基本扫描已启用。

最佳答案

从某种意义上说,您是对的,Spring 不会自动知道所有类或创建所需的 bean。 Spring 并不像魔术一样工作。我们可以使用 annotations 但我们仍然需要告诉 Spring 要创建哪些 bean 以及如何创建它们。那就是 @Component 的地方, @Service , @Repository , @Controller发挥作用。看看here .当你想要SomeClass成为 ClassName 中的依赖项,你必须明确地让 Spring 知道 SomeClass 的 bean需要先创建它才能作为依赖项注入(inject) ClassName , 你可以通过注释 SomeClass 来做到这一点带有正确的注释。你还需要做一个 <context:component-scan base-package="com.your.package"/>让 Spring 在 Autowiring 依赖项之前正确解析所有注释。

此外,您必须意识到,如果您的 SomeClass构造函数参数取决于动态值,您将无法立即创建 bean,也无法将其作为依赖项注入(inject) ClassName 中使用 @Autowired ,因为 spring 需要在部署期间知道这些值。如果是这样的话,我更愿意在 ClassName 中使用 getter setter 方法。对于 SomeClass 的实例.

注意:这是考虑到 Spring 中的注解的答案。您也可以通过在 XML 中定义 Spring Beans 来实现同样的目的。

关于java - 具有值的 Spring Autowiring 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37110378/

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