zoukankan      html  css  js  c++  java
  • spring-依赖注入

    依赖注入
    public class TextEditor {
       private SpellChecker spellChecker;
       public TextEditor(SpellChecker spellChecker) {
          this.spellChecker = spellChecker;
       }
    }

          比如说我有一个编辑器(TextEditor),现在需要在编辑器中实现拼写检查的功能,我们不需要知道具体的拼写功能怎么实现

    那个可以交给其他人去实现,我们只需要在实例化的时候传入spellChecking即可

    基于构造函数的依赖注入

    beans.xml

        <bean id="textEditor" class="com.test.TextEditor">
            <constructor-arg index="0" ref="spellChecker"></constructor-arg>
            <constructor-arg index="1" value="$11"></constructor-arg>
        </bean>
        <bean id="spellChecker" class="com.test.SpellChecker"></bean>

    SpellChecker.java

        public SpellChecker(){
            System.out.println("SpellChecker ininting...");
        }
        public void spellCheck(){
            System.out.println("spellChecking...");
        }

    TextEditor.java

    public class TextEditor {
        private SpellChecker spellChecker;
        private String money;    
        public String getMoney() {
            return money;
        }
        public void setMoney(String money) {
            this.money = money;
        }
        public TextEditor(SpellChecker spellChecker,String money){
            System.out.println("Inside spellChecker");
            this.spellChecker=spellChecker;
            this.money=money;
        }
        public void spellCheck(){
            spellChecker.spellCheck();
        }
    }

    MainApp.java

        public static void main(String[] args) {
            System.out.println("******1");
            ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
            System.out.println("******2");
            TextEditor textEditor=(TextEditor)context.getBean("textEditor");
            System.out.println("******3");
            textEditor.spellCheck();
            String str=textEditor.getMoney();
            System.out.println(str);
        }

     结果与分析:

    ******1

    SpellChecker ininting...

    Inside spellChecker

    ******2

    ******3

    spellChecking...

    在获取bean之前,已经完成了bean的初始化和注入了

    在这里除了注入spellChecker之外,还注入了一个参数,money

    基于set的依赖注入

    beans.xml

    这里beans.xml与基于构造函数的依赖注入的区别是:属性改为了property,name是属性名,后面是注入的值或引用

        <bean id="textEditor" class="com.test.TextEditor">
            <property name="spellChecker" ref="spellChecker" />
            <property name="money" value="@qq" />
        </bean>
        <bean id="spellChecker" class="com.test.SpellChecker"></bean>

    TextEditor.java

    在基于set的依赖注入中,当容器调用无参的构造函数时,会去读取beans.xml,根据java代码中的set来讲beans.xml中的属性值注入

    这就需要注意两点:1.在定义实体类时,若是定义了带参构造函数,那么系统就不会生成默认无参构造函数,就会报错。

    2,在定义实体类时需要定义set函数,不然在注入时调用set函数会报错。

    public class TextEditor {
        private SpellChecker spellChecker;
    
        public void setSpellChecker(SpellChecker spellChecker) {
            this.spellChecker = spellChecker;
        }

    参考文章:w3school教程

  • 相关阅读:
    项目实战9—企业级分布式存储应用与实战MogileFS、FastDFS
    项目详解4—haproxy 反向代理负载均衡
    项目实战4—HAProxy实现高级负载均衡实战和ACL控制
    项目实战2.1—nginx 反向代理负载均衡、动静分离和缓存的实现
    zabbix设置报警通知
    zabbix创建触发器
    zabbix的启动和关闭脚本
    zabbix监控第一台服务器
    zabbix的源码安装
    Linux命令之乐--iconv
  • 原文地址:https://www.cnblogs.com/yanliang12138/p/9724990.html
Copyright © 2011-2022 走看看