2017-03-21 141 views
1

XML属性注入是Spring中的一种依赖注入吗?

<bean name="helloWorld" class="com.company.HelloWorld"> 
    <property name="msg" value="messaging"/> 
</bean> 

JAVA

package com.company; 

// ... 

public class HelloWorld { 
    private String msg; 
    public void setMsg(String msg) { this.msg = msg; } 
} 

如上所示,属性 “msg” 中被注入到 “this.msg” 通过 “setMsg” 方法,该方法我理解为 “属性注入”。就我而言,Spring的DI被提升为分离类,但上面的代码只是注入属性。我想知道春季是否以DI为基础进行房地产注入。希望有人能帮助我。

回答

0

注入意味着所需的依赖关系(在你的情况下:一个简单的字符串)是从外部设置的(这可以手动完成或者在你的情况下通过DI容器 - 弹簧完成)。所以你的类不必知道“msg”的值被配置/检索的位置,但它知道(创建时)它接收到正确的值。

回答你的问题:是的,属性注入是一种依赖注入。另一种可能性(通常是首选)是构造函数注入,你的类必须在构造函数中声明它的所有依赖关系。然后DI框架(春)对象的构造过程中注入的依赖......

0

就我而言,Spring的DI升任脱钩类, 但上面的代码只是注入性质。我不知道 属性注入是基于DI在春季。

假设你HelloWorld类是依赖于一些所谓的LanguageHelper其它接口,那么你就可以在运行时动态注入的LanguageHelper实施(Spring容器创建/管理这些类的对象,如果发现在类路径中) ,只是通过指定如下所示的XML实现类的名称(或者你可以使用注解):

<bean id = "helloWorld" class = "com.company.HelloWorld"> 
     <property name = "languageHelper" ref = "languageHelper"/> 
</bean> 

<bean id = "languageHelper" class = "com.company.LanguageHelperImpl"></bean> 
你的情况

但是,,它是要注入到你的bean动态简单String值在运行时(而不是直接在课堂上进行硬编码)。所以,这是一个注射,其中没有额外的依赖关系进行评估,而只是使用提供的setter方法设置值。

因此,这是关于我们如何可以将类(可能是简单的值或其他类实现)与未来的更改放在一起,而不是直接在其中进行硬编码。