zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    go golang 代码记录
    ERROR org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: RECEIVED SIGNAL 15
    hbase启动之后master和regionserver相继自动断掉
    Native memory allocation (malloc) failed to allocate 32744 bytes for ChunkPool::allocate
    虚拟机中二次安装cdh重新启动hadoop集群报错
    cdh在虚拟机中二次安装时无法选择之前管理的主机
    sqoop生成与关系数据库表结构对应的hive表结构,但在hive却找不到table
    Sqoop将hive数据导出到MySQL中文乱码了怎么办?
    idea通过maven打jar包不成功或无法加载主类或打成功也找不到jar包
    一个牛公司的关于oracle数据的面试题
  • 原文地址:https://www.cnblogs.com/lbhym/p/11929805.html
Copyright © 2011-2022 走看看