Spring学习笔记[3] -- DI依赖注入

DI 概述

DI:Dependency Injection,依赖注入,在Spring框架负责创建Bean对象的时候,动态的将依赖对象注入到Bean组件中

入门程序

在IOC入门程序中,如果UserServiceImpl的实现类中有一个属性,那么使用Spring框架的IOC功能时,可以通过依赖注把该属性的值传递进来。

创建接口

public interface UserService {
    public void sayHello();
}

编写接口的实现类

public class UserServiceImpl implements UserService {
    private String name;
    public void setName(String name) {
        this.name = name;
    }
    public void sayHello(){
        System.out.println("Demo01: Hello Spring "+name);
    }
}

配置文件

applicationContest.xml中使用bean标签

<bean id="userService" class="gongfukangee.Demo01.UserServiceImpl">
    <!-- 容器在创建 userService 对象的时候,同时给成员属性赋值  -->
    <property name="name" value="Jack"/>
</bean>

创建测试类

    /**
     * @Auther gongfukang
     *依赖注入
     */
    @org.junit.Test
    public void run4(){
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService=(UserService)applicationContext.getBean("userService");
        userService.sayHello();
    }

类成员变量注入

Setter方法注入

  • 成员属性注入

    //实现类
    public class UserServiceImpl implements UserService {
      private String name;
      public void setName(String name) {
          this.name = name;
      }
    }
    <!-- xml配置 -->    
    <bean id="userService" class="gongfukangee.Demo01.UserServiceImpl">
       <property name="name" value="Jack"/>
    </bean>
  • 引用变量注入

    //引用变量实现类
    public class CustomerDaoImpl {
      public void save(){
          System.out.println("我是持久层 DAO ...");
      }
    }
    //实现类
    public class CustomerServiceImpl {
      //提供成员属性
      private CustomerDaoImpl custDao;
      public void setCustDao(CustomerDaoImpl custDao) {
          this.custDao = custDao;
      }
      public void save(){
          System.out.println("我是业务层 Service...");
          custDao.save();
      }
    }
    <!-- xml配置 --> 
    <bean id="customerDao" class="gongfukangee.Demo02.CustomerDaoImpl"/>
    <!-- customerDao 注入到 customerService -->
    <bean id="customerService" class="gongfukangee.Demo02.CustomerServiceImpl">
    <!-- name: 与private 成员属性相同  values :字符串    ref :引用对象 -->
       <property name="custDao" ref="customerDao"/>
    </bean>

构造方法注入

  • 成员属性

    //实现类
    public class Car1 {
      private String carName;
      private double carPrice;
      public Car1(String carName,double carPrice){
          super();
          this.carName=carName;
          this.carPrice=carPrice;
      }
    }
    <!-- xml配置  -->
    <bean id="car1" class="gongfukangee.Demo03.Car1">
    <!-- 第一种注入方式 -->
    <constructor-arg name="carName" value="大众汽车"/>
    <constructor-arg name="carPrice" value="250000.01"/>
    <!-- 第二种注入方式  [index中,0代表构造方法中第一个成员变量] -->
    <constructor-arg index="0" value="奔驰汽车"/>
    <constructor-arg index="1" value="500000"/>
    </bean>
  • 引用变量注入

    //实现类
    public class Person {
      private String PersonName;
      private Car1 car1;
      public Person(String personName, Car1 car1) {
          PersonName = personName;
          this.car1 = car1;
      }
    }
    <!-- xml配置  -->
    <bean id="person" class="gongfukangee.Demo03.Person">
       <constructor-arg name="personName" value="gong"/>
       <constructor-arg name="car1" ref="car1"/>
    </bean>

集合注入和配置文件注入

public class User {
    private String[] arrs;
    public void setArrs(String[] arrs) {
        this.arrs = arrs;
    }

    private List<String> list;
    public void setList(List<String> list) {
        this.list = list;
    }

    private Map<String,String> map;
    public void setMap(Map<String, String> map) {
        this.map = map;
    }

    //配置文件
    private Properties pro;
    public void setPro(Properties pro) {
        this.pro = pro;
    }
}
    <!-- 注入集合 -->
    <bean id="user" class="gongfukangee.Demo03.User">
        <!-- 注入数组 -->
        <property name="arrs">
            <list>
                <value>哈哈</value>
                <value>呵呵</value>
                <value>嘿嘿</value>
            </list>
        </property>

        <!-- 注入List -->
        <!--
         List 存放引用对象
         <property name="list" >
            <list>
               <ref bean=""></ref>
            </list>
        </property>
        -->
        <property name="list" >
            <list>
                <value>小王</value>
                <value>张三</value>
                <value>李四</value>
            </list>
        </property>

        <!-- Map 注入 -->
        <property name="map">
            <map>
                <entry key="AAA" value="刘邦"/>
                <entry key="BBB" value="关羽"/>
            </map>
        </property>

              <!--  Properties 属性文件注入 -->
        <property name="pro">
            <props>
                <prop key="username">root</prop>
                <prop key="password">123456</prop>
            </props>
        </property>

     </bean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值