依赖注入的方式

大多数的依赖注入文章是上都是三种方式,但是官网上是只有两种的:构造函数注入和set函数注入

其实我感觉就是在xml上配置参数的值,然后通过构造函数或者set函数把值注入了对象中,这只是我个人看到表面上的一个意思,有没更深层的意义我暂时不懂那么多 -_- …

首先DI(Dependency Injection)依赖注入
相对于IoC而言,依赖注入(DI)更加准确地描述了IoC的设计理念。所谓依赖注入,即组件之间的依赖关系由容器在应用系统运行期来决定,也就是由容器动态地将某种依赖关系的目标对象实例注入到应用系统中的各个关联的组件之中。

1.Set函数注入:
      1).普通属性赋值
      2).对象属性赋值


1)普通属性赋值

先建一个要被注入的对象

package cn.tedu.spring;

 

    public class User {
    
           private String name;
           private Integer age;
           public String getName() {
                  return name;
           }
    
           public void setName(String name) {
                  this.name = name;
           }
    
           public Integer getAge() {
                  return age;
           }
    
           public void setAge(Integer age) {
                  this.age = age;
           }
    
           @Override
           public String toString() {
                  return "User [name=" + name + ", age=" + age + "]";
           }
    }

然后配置类applicationContext.xml
在这里插入图片描述


2)对象属性赋值


创建一个对象UserInfo.java

package cn.tedu.spring;
public class UserInfo {

    //TODO加一个普通属性 tall

    //TODO加一个对象属性UserExtra

}

这个对象我没写属性,因为有属性那也是一摸一样的操作,重复一遍而已

在这里插入图片描述
如果UserInfo中有属性则在id为userinfo的bean中写入

分别测试

package cn.tedu.test;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.tedu.spring.User;
//测试DI依赖注入
public class TestDI {

    @Test
    public void di(){
       //加载核心配置文件
       ClassPathXmlApplicationContext ac =
              new ClassPathXmlApplicationContext(
              "applicationContext.xml");      

       //获取bean对象

       User user = (User) ac.getBean("user");

       //可以把关联对象的信息也都输出就成功了

       System.out.println(user);
   
    }

}


构造函数注入

package cn.tedu.spring;

 

//测试构造方法给属性赋值

public class Dept {

 

       private Integer id;

       private String name;

 
       //构造方法赋值new Dept(1,"lisi");

       public Dept(Integer id,

                            String name){

              this.id=id;

              this.name=name;

       }


       //getters and setters

       public Integer getId() {

              return id;

       }

       public void setId(Integer id) {

              this.id = id;

       }

       public String getName() {

              return name;

       }

       public void setName(String name) {

              this.name = name;

       }      

       //toString

              @Override

              public String toString() {

                     return "Dept [id=" + id + ", name=" + name + "]";

              }
   
}

配置文件
在这里插入图片描述
如果只有一个的话,下标index不用写

测试

   @Test

   public void di2(){

          //加载核心配置文件

          ClassPathXmlApplicationContext ac =

                        new ClassPathXmlApplicationContext(

                                      "applicationContext.xml");

         

          //获取bean对象

          Dept d = (Dept) ac.getBean("dept");

          //可以把关联对象的信息也都输出就成功了

          System.out.println(d);

         

   }

注意:值使用value属性,对象使用ref属性。ref和value不能同时存在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值