1.3 spring依赖注入

spring的依赖注入:

当调用的方法缺少某个接口的实例时,不能new,所以需要依赖注入。
注入的方式有3三种:

  1. 使用构造函数注入

构造函数注入:
涉及的标签:constructor-arg
标签的属性:
type:指定参数的类型。
index:指定参数的索引位置,从0开始。
name:指定参数的名称。 一般用它
上面三个属性是指定给哪个参数赋值的,下面两个属性是指定赋什么值的
value:指定基本数据类型或String类型的数据
ref:指定其他bean类型数据
标签出现的位置:
写在bean标签内部
CustomerServiceImpl.java

package com.itheima.service.impl;

import java.util.Date;

import com.itheima.service.ICustomerService;

/**
 * 客户的业务层实现类
 * @author zhy
 *
 */
public class CustomerServiceImpl implements ICustomerService {

    private String driver;
    private Integer port;
    private Date today;
    //以上三个类成员,没有具体的实际意义,只是用于演示注入。
    

    public CustomerServiceImpl(String driver, Integer port, Date today) {
        this.driver = driver;
        this.port = port;
        this.today = today;
    }

    @Override
    public void saveCustomer() {
        System.out.println("业务层调用持久层"+driver+","+port+","+today);
    }

}

bean.xml


        
        
        
    

    
  1. 使用set方法注入

涉及的标签:property
标签的属性:
name:指定参数的set方法名称.

上面三个属性是指定给哪个参数赋值的,下面两个属性是指定赋什么值的

value:指定基本数据类型或String类型的数据
ref:指定其他bean类型数据
标签出现的位置:
写在bean标签内部

CustomerServiceImpl2.java

package com.itheima.service.impl;

import java.util.Date;

import com.itheima.service.ICustomerService;

/**
 * 客户的业务层实现类
 * @author zhy
 *
 */
public class CustomerServiceImpl2 implements ICustomerService {

    private String driver;
    private Integer port;
    private Date today;
    //以上三个类成员,没有具体的实际意义,只是用于演示注入。
    public void setDriver(String driver) {
        this.driver = driver;
    }
    public void setPort(Integer port) {
        this.port = port;
    }
    public void setToday(Date today) {
        this.today = today;
    }



    @Override
    public void saveCustomer() {
        System.out.println("业务层调用持久层"+driver+","+port+","+today);
    }


}

bean.xml


        
        
        
    

第一种方式会碰坏代码结构。因为需要生成构造器。

  1. 使用注解注入
    CustomerServiceImpl3.java
package com.itheima.service.impl;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

import com.itheima.service.ICustomerService;

/**
 * 客户的业务层实现类
 * @author zhy
 *
 */
public class CustomerServiceImpl3 implements ICustomerService {

    private String[] myStrs;
    private List myList;
    private Set mySet;
    private Map myMap;
    private Properties myProps;
    

    public void setMyStrs(String[] myStrs) {
        this.myStrs = myStrs;
    }


    public void setMyList(List myList) {
        this.myList = myList;
    }


    public void setMySet(Set mySet) {
        this.mySet = mySet;
    }


    public void setMyMap(Map myMap) {
        this.myMap = myMap;
    }


    public void setMyProps(Properties myProps) {
        this.myProps = myProps;
    }


    @Override
    public void saveCustomer() {
        System.out.println(Arrays.toString(myStrs));
        System.out.println(myList);
        System.out.println(mySet);
        System.out.println(myMap);
        System.out.println(myProps);
    }
}

bean.xml


    
        
            
                AAA
                BBB
                CCC
            
        
        
        
            
                AAA
                BBB
                CCC
            
        
        
        
            
                AAA
                BBB
                CCC
            
        
        
        
            
                FFF
                GGG
            
        
        
        
            
                
                
                    EEE
                
            
        
    

注入的数据类型有3类:

  1. 基本类型和String类型
  2. 其他bean类型(必须是在spring的配置文件中出现过的bean)
  3. 复杂类型(集合类型)

你可能感兴趣的:(1.3 spring依赖注入)