• 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

  • 相关阅读:
    python3 socketserver服务端
    python3 组合的用法
    python3 面向对象高级一些的
    python3 继承原理
    python3 对象之间的交互
    hadoop配置、运行错误总结
    Hadoop配置项整理(mapred-site.xml)
    Hadoop配置项整理(core-site.xml)
    Hadoop配置项整理(hdfs-site.xml)
    Linux Shell 按Tab键不能补全
  • 原文地址:https://www.cnblogs.com/lbhym/p/11929805.html
Copyright © 2020-2023  润新知