作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在提高我的 Spring 知识。我想知道当我在字段上使用 Spring 注释 @Autowire 时会发生什么。
这是一段代码:
输出助手文件
@Component
public class OutputHelper {
@Autowired
@Qualifier("csvOutputGenerator")
private IOutputGenerator outputGenerator;
public void setOutputGenerator(IOutputGenerator outputGenerator) {
this.outputGenerator = outputGenerator;
}
// I can focus only on what my code do because my objects are injected
public void generateOutput(){
outputGenerator.generateOutput();
}
}
@Component
public class CsvOutputGenerator implements IOutputGenerator {
public void generateOutput(){
System.out.println("Csv Output Generator");
}
}
public static void main(String[] args) {
// Create the spring context
ApplicationContext context = new ClassPathXmlApplicationContext("META-INF/spring/spring-module.xml");
// Get the configured OutpuHelper from the spring-module.xml
OutputHelper output = (OutputHelper) context.getBean("outputHelper");
// Display output from the output configured
output.generateOutput();
}
<context:component-scan base-package="com.xxx.xxx.output"/>
最佳答案
拥有字段的想法@Autowired
是有问题的。它有效,但它会使您的实现的其他方面(即测试)变得困难。
有3种类型的注入(inject):
@Autowired
private MyInterface field;
@Autowired
注释的方法,因此其值使用其 setter 配置如下:@Autowired
public void setField(MyInterface value) {
this.field = value;
}
@Autowired
注释构造函数您可以直接在构造函数上配置 bean,而不是使用方法或字段。因为那个 spring 将选择一个构造函数来实例化你的 @Component
,它将使用 @Autowired
如果存在或为空的 params 构造函数,则使用 Constructor.newInstance(Object...) 调用它.例子:@Component
public class Implementation {
private MyInterface field;
@Autowired
public Implementation(MyInterface value) {
Assert.notNull(value, "value should not be null");
this.field = value;
}
}
关于spring - Field @Autowired 背后的魔力是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31766028/
你知道有什么 Maven 插件/mojo 能够做连接点或链接吗? 最佳答案 maven junction 插件怎么样? http://pyx4j.com/snapshot/pyx4j/pyx4j-ma
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 4年前关闭。 Improve this questi
我是一名优秀的程序员,十分优秀!