Spring通过依赖注入(DI)实现控制反转(IoC)时,所用的两种注入方式的区别:(1)构造器方式注入;(2)set方式注入。

Spring框架IoC容器在创建对象时,给属性赋值,也就是注入操作。(暂时理解创建对象和属性赋值(注入)是同时进行的)。全文有理解不对的地方,请指正,thanks!

依赖注入(Dependency Injection,DI)理解为,依赖:表示对象的创建依赖于容器;注入:表示对象中的所有属性,由容器来注入!

理解:使用set方法进行注入的是set方式注入,beans.xml文件中bean标签下使用constructor-arg标签来配置属性时才是构造器方式注入。无参数构造器方式注入其实就是set方式注入。

(1)构造器方式注入:不涉及复杂类型注入(数组、List、Map、prperties)

特点:需要有参构造方法,无参数构造方法可有可无,对应属性的set方法可有可无。下边包括实现构造器方式注入时,在beans.xml文件中的配置情况,一共三种配置方式。

package com.kuang.pojo;

public class User {
	private String name;

	//无参数构造方法
	public User(){
		System.out.println("User的无参数构造方法");
	}
	//有参数构造方法
	public User(String name){
		this.name = name;
		System.out.println("User的有参数构造方法");
	}
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	public void show(){
		System.out.println("name="+name);
	}
}
//beans.xml配置文件

//配置方法一:依据下标设置

    

//配置方法二:依据类型设置(如果两个参数都是String类型,不可行,故不建议使用)

    

//配置方法三:依据参数名设置(最常用!!!)

    
   

(2)set方式注入:涉及复杂类型注入(数组、List、Map、prperties)

特点:需要对象属性的set方法,需要无参构造方法,有参构造方法可有可无。下边介绍各种类型的属性要实现set方式注入时,在beans.xml文件中的配置情况。

package com.kuang.pojo;

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

public class Student {
	
    //多种类型的属性,实现set方式注入
	private String name;
	private Address address;
	private String[] books;
	private List hobby;
	private Map card;
	private Set games;
	private String wife;
	private Properties info;
	
	public Student(){}
	public Student(String name){
		this.name = name;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Address getAddress() {
		return address;
	}
	public void setAddress(Address address) {
		this.address = address;
	}
	public String[] getBooks() {
		return books;
	}
	public void setBooks(String[] books) {
		this.books = books;
	}
	public List getHobby() {
		return hobby;
	}
	public void setHobby(List hobby) {
		this.hobby = hobby;
	}
	public Map getCard() {
		return card;
	}
	public void setCard(Map card) {
		this.card = card;
	}
	public Set getGames() {
		return games;
	}
	public void setGames(Set games) {
		this.games = games;
	}
	public String getWife() {
		return wife;
	}
	public void setWife(String wife) {
		this.wife = wife;
	}
	public Properties getInfo() {
		return info;
	}
	public void setInfo(Properties info) {
		this.info = info;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", address=" + address + ", books=" + Arrays.toString(books) + ", hobby="
				+ hobby + ", card=" + card + ", games=" + games + ", wife=" + wife + ", info=" + info + "]";
	}	
}

   
	   
	   
	   		
	   
	   
	   
	   		
	   		
	   		
	   		
	   		
	   		
	   			
	   				红楼梦
	   				西游记
	   				水浒传
	   				三国演义
	   			
	   		
	   		
	   		
	   			
	   				听歌
	   				敲代码
	   				看电影
	   			
	   		
	   		
	   		
	   			
	   				
	   				
	   			
	   		
	   		
	   		
	   			
	   				王者荣耀
	   				LOL
	   			
	   		
	   		
	   		
	   			
	   		
	   		
	   		
	   			
	   				20190525
	   				root
	   				123456
	   			
	   		   		
	   	   
 

 

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