Spring DI使用详解


Spring DI使用详解

一、介绍

  • DI的定义:依赖注入,为类里面的属性设值。例如,我们之前的setName方法就是在为name属性设值。
  • IOC与DI的关系:IOC进行对象的创建,DI进行值的注入。二者共同管理JavaBean,但DI是在IOC的基础上存在的,它不能单独存在。

二、代码演示

DI依赖注入也有两种方式,即配置文件注入和注解注入

一、配置文件注入

属性须知:

  • type:用于指定要注入的数据的数据类型,该数据类型也是构造函数中某个或某些参数的类型
  • index:用于指定要注入的数据给构造函数中指定索引位置的参数赋值,索引的位置从 0 开始
  • name:用于指定给构造函数中指定名称的参数赋值(一般用这个)
  • value:用于提供基本类型和String类型的数据
  • ref:用于指定其他的bean类型数据,即bean的id

前期代码准备:

//Dao.Class文件
public class Dao {
    private String testDI;
    public Dao(String testDI){
        this.testDI=testDI;
    }
}
//Service.Class文件
public class Service {
    private Dao dao;
    private String test;
    private Map map;
    private Properties properties;

    public void setProperties(Properties properties) {
        this.properties = properties;
    }

    public void setMap(Map map) {
        this.map = map;
    }
    public void setDao(Dao dao) {
        this.dao = dao;
    }
    public void setDao(Dao dao) {
        this.dao = dao;
    }
    private String[] args;
    private List list;

    public void setArgs(String[] args) {
        this.args = args;
    }
    public void setList(List list) {
        this.list = list;
    }
}

applicationContext.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>

   

配置文件注入又分三种 :

  1. 使用有参构造注入(以Dao类为例)

    <?xml version="1.0" encoding="UTF-8"?>
    
    
        
            
        
    
    
  2. 使用set方法注入(以Service类为例,注意:set方法注入为常用方法,且注入对象也较为重要,请牢牢掌握

    <?xml version="1.0" encoding="UTF-8"?>
    
    
         
            
        
        
            
        
    
    
  3. P名称空间注入

    <?xml version="1.0" encoding="UTF-8"?>
    
        
            
        
        
    
    

4.复杂属性的注入

这里复杂属性的注入其实属于set注入,但由于代码量原因,就另起一点了。

<?xml version="1.0" encoding="UTF-8"?>


    
    

    
    
    
        
    
    
		
        
            
                测试1
                测试2
                测试3
            
        
		
        
            
                测试1
                测试2
                测试3
            
        
        
        
            
                
                
                
            
        
        
        
            
                com.mysql.jdbc.Driver
            
        
    

二、注解注入

第一步、开启注解包扫描

<?xml version="1.0" encoding="UTF-8"?>


    
    

第二步、利用注解创建对象并注入属性

//Dao.class文件
@Service(value = "dao")
public class Dao {

    public void test(){
        System.out.println("test");
    }
}
//Service.class文件
@Service(value = "service")
public class Service {
    //得到dao对象
    //在dao属性上利用注解直接注入,使用注解不用set方法
    @Autowired    //自动装配
    private Dao dao;
    //name中注解创建对象的Value值
    @Resource(name="dao")
    private Dao dao1;
}

小节,一般在实际开发中,对JavaBean的管理一般是,配置文件进行对象的创建,注解进行属性的注入