Spring基于构造函数和设值函数的依赖注入

基于构造函数的依赖注入

我们知道,bean标签中指定的类会进行初始化,这个初始化过程中自然会调用构造函数,那我们也可以利用这个构造函数完成依赖注入。

先创建一个类:

public class TextEditor {
    public TextEditor(SpellChecker spellChecker) {
        System.out.println("TextEditor的构造函数");
    }

    public TextEditor(String s) {
        System.out.println(s);
    }
}

如上,可以看见有两个构造函数。

第一个构造函数的参数是自定义类型,第二个是一个字符串类型。两种不同的参数类型在配置文件中的写法是不一样的,下面会提到。

再创建一个测试类:

public class MainApps {
    public static void main(String[] args) {
        AbstractApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        TextEditor editor = (TextEditor) context.getBean("text");
    }
}

配置文件内容如下:

<bean id="text" class="Dependency.injection.TextEditor">
     <constructor-arg type="java.lang.String" value="这是一个构造函数注入的值"/>
</bean>

配置文件中,除了常见的bean标签,需要使用constructor-arg标签来完成构造函数的注入。

运行测试类输出:

这是一个构造函数注入的值

如果向调用上面一个构造函数,配置文件内容如下:

<bean id="text" class="Dependency.injection.TextEditor">
  <constructor-arg ref="spellChecker"/>
</bean>
<bean id="spellChecker" class="Dependency.injection.SpellChecker"/>

注意:

1.如果你需要传递一个对象的引用,就直接用ref;如果你需要传递一个java自带的数据类型,则需要先在type里声明类型,再用value设置值。

2.如果构造参数的参数列表有多个参数,则传递的顺序就是参数列表的顺序。

 

基于设值函数的依赖注入

通过bean调用设值函数来完成依赖注入。

先准备一个类:

public class TextEditor {
    private String name;
    //设值函数
    public void setName(String name) {
        this.name = name;
    }

    public void getName() {
        System.out.println(this.name);
    }

}

注意私有属性name,下面会通过bean设置这个属性的值。

再准备一个测试类:

public class MainApps {
    public static void main(String[] args) {
        AbstractApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        TextEditor editor = (TextEditor) context.getBean("text");
        editor.getName();
    }
}

配置文件内容如下:

<bean id="text" class="Dependency.injection.TextEditor">
  <property name="name" value="李四"/>
</bean>

运行测试类输出:

李四

注意:

1.设值函数也可以传递引用,同样使用ref。

2.配置文件中,设值函数用的是property。构造函数注入用的是constructor-arg

 

posted @ 2019-11-25 19:22  LingCode丶  阅读(1133)  评论(0编辑  收藏  举报