Spring依赖注入

Spring依赖注入

  • 本人独立博客https://chenjiabing666.github.io

【了解】Spring管理对象的生命周期(只有在单例的模式有意义,这个是默认的)

  • 由spring管理的对象可以有生命周期方法,这些生命周期方法是开发人员自定义的,方法名自定义,无参数

  • 由spring管理的对象的类可以有初始化和销毁这两种生命周期方法,按需设计即可。

  • 因为是spring自己调用的,因此要设置为无参数,无返回值的方法。

为单个bean指定生命周期方法

  • 实例:
public class Person {
    private String name;
    private int age;
    //person类的初始化方法
    public void init(){
        System.out.println("初始化方法");
    }
    public void destory(){
        System.out.println("销毁方法");
    }
}
  • 在spring配置文件中配置
    
    

为容器中所有的bean指定生命周期方法

  • 可以在顶级节点中添加default-init-method指定初始化方法和添加default-destroy-method指定销毁方法

    

【重要】注入属性值

实现目标

  • 由spring管理的对象,其属性值可以为其中的某些属性注入值,是的最终获取对象时,属性就已经有值了

Setter注入

前提

  • 必须为每一个属性添加set方法

基本数据类型变量的注入

实现
  • 新建一个Person的实体类如下:
public class Person {
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

  • 在配置文件中配置bean

        
        
        

  • 注意: 在配置XML文件时,节点中的name属性的值其实是Java代码中Set方法名称中除去set单词并且将首字母小写后的名称,例如Set方法的名称为setAge,那么其中的name属性的值就是age。所以这个name属性的值并不是java代码中的属性名称,只不过通常在java代码中,基于代码规范,这里的name属性值也是java代码中的属性名称。

引用类型的属性注入

  • 引用类型即是在一个类中包含另外一个类的对象,即是一个类的成员变量是另外一个类的对象
实现
  • 新建一个Address类
public class Address {
    private String city;  //城市
    private String pro ;  //省份
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public String getPro() {
        return pro;
    }
    public void setPro(String pro) {
        this.pro = pro;
    }
}
  • 新建一个Person类,其中包含了Address这个类的对象
public class Person {
    private String name;
    private int age;
    private Address address; // Address的对象作为成员变量

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

  • 在配置文件中配置实例
    
    
        
        
    

    
        
        

        
        
    

【了解】构造器注入(无参,有参)

  • 在前面已经讲过了无参构造注入,直接使用即可

前提

  • 有一个构造有参构造方法

实现

  • 创建一个Person类
public class Person {
    private String name;
    private int age;
    //构造方法
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
  • 配置spring的配置文件
    
        
        
        
    

注入基本型

  • 在spring注入值时,如果值的类型是String或者java中的基本数据类型,都称之为基本型,而其他的都是”非基本型“的数据

注入非基本型(ref)

  • 前面所说的引用类型的注入就是基本型的注入,这里不再详细的讲述

注入集合

  • 集合类型有ListSetMapProperties

实现

  • 创建一个Message类,其中定义了各种集合类型的成员属性,并且添加了set方法
public class Message {
    private List cities;   //城市 。List集合
    private Set friend;   //Set集合
    private Map bookes;  //Map集合
    private Properties properties;   //Properties集合
    public List getCities() {
        return cities;
    }
    public void setCities(List cities) {
        this.cities = cities;
    }
    public Set getFriend() {
        return friend;
    }
    public void setFriend(Set friend) {
        this.friend = friend;
    }
    public Map getBookes() {
        return bookes;
    }
    public void setBookes(Map bookes) {
        this.bookes = bookes;
    }
    public Properties getProperties() {
        return properties;
    }
    public void setProperties(Properties properties) {
        this.properties = properties;
    }
}

  • 在spring的配置文件中配置注入

        
        
            
                徐州
                无锡
                常州
            
        

        
        
            
                Jack
                Tom
                陈加兵
            
        

        
        
            
                
                
            
        

        
        
            
                root
                root
            
        
    
  • 测试方法
@Test
    public void test2() {
        // spring的配置文件
        String conf = "applicationContext.xml";
        // 获取spring容器
        AbstractApplicationContext context = new ClassPathXmlApplicationContext(
                conf);
        Message message=(Message) context.getBean("message");
        List cities=message.getCities();
        Set friends=message.getFriend();
        Map bookes=message.getBookes();
        Properties properties=message.getProperties();
        System.out.println(cities);
        System.out.println(friends);
        System.out.println(bookes);
        System.out.println(properties);
        context.close();
    }

【重点了解Properties的注入】引用方式注入集合()

  • 其中的ref指定的是配置集合的id

  • 使用的还是上面的Message

  • resource中需要新建一个jdbc.properties,我们便可以在spring的配置文件中使用自动的读取其中的值

root=root
password=root
url=jdbc:mysql://localhost:3306/hirbernate?useUnicode=true&characterEncoding=UTF-8
driver=com.mysql.jdbc.Driver
  • spring的配置文件中配置bean
    
        徐州
        无锡
        常州
    

    
        Jack
        Tom
        陈加兵
    

    
        
        
    

    
    

    
        
        

        
        

        
        

        
        
    

【了解】其他类型的注入

为数组注入值

  • 新添加一个数组的属性
private String[] names;

    public String[] getNames() {
        return names;
    }
    public void setNames(String[] names) {
        this.names = names;
    }
  • spring配置文件
        
        
            
                Alex
                Billy
            
        
  • 甚至在配置XML时,可以随意挑选使用,即为List类型的数据注入值时,既可以使用节点,也可以使用节点,反之为数组类型的数据值也是一样

注入空字符串

  • 设置的value直接为""

为引用类型的数据注入null值


    

显示的确定数据类型


    

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