Spring DI 依赖注入案例(带参数构造方法依赖注入、setter方法依赖注入、p名称空间注入)

Spring DI 依赖注入案例(带参数构造方法依赖注入和setter方法依赖注入和p名称空间注入)

DI 依赖注入:
  简单的说是指对象中的属性的值设置方式不再是调用setter方法进行传值,而是由配置实现经过框架传值。
 
DI操作可以采用两种实现方案:
    1、使用带参构造实现注入





    2、使用setter方法实现注入





补充:constructor和property标签中常用属性:name,value,ref
  name 设置类中的属性名
  value设置属性的具体值
  ref设置bean的id(及关联其它的配置项的id)


下面演示的是带参数构造方法依赖注入和setter方法依赖注入方式:

项目中SpringTest.java测试类使用junit方式测试即单元测试。lib目录下为测试中需要的spring jar包,log4j.jar为日志包,User.java是测试需要的一个实体类,applicationContext.xml为spring的主配置文件,名称可以任意但官方建议使用该默认名称。log4j.properties为日志配置文件。本案例使用的spring版本为 spring4.3.9。


创建一个java项目,项目结构如下:


Spring DI 依赖注入案例(带参数构造方法依赖注入、setter方法依赖注入、p名称空间注入)_第1张图片


代码如下:

1、applicationContext.xml (主配置文件)


	
	
	
	
		
		
	

	
	
		
		
		
		
			
				数组属性1
				数组属性2
				数组属性3
			
		
		
		
			
				list属性1
				list属性2
				list属性3
			
		
		
		
			
				set属性1
				set属性2
				set属性3
			
		
		
		
			
				
				
				

			
		

		
		
			
				Properties属性1
				Properties属性2
			
		
	



2、log4j.properties (日志文件)

[plain] view plain copy
  1. log4j.rootLogger=DEBUG,console,FILE  
  2. log4j.appender.console=org.apache.log4j.ConsoleAppender  
  3. log4j.appender.console.threshold=INFO  
  4. log4j.appender.console.layout=org.apache.log4j.PatternLayout  
  5. log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%5p] - %c -%F(%L) -%m%n  
  6. log4j.appender.FILE=org.apache.log4j.RollingFileAppender  
  7. log4j.appender.FILE.maxBackupIndex=100  
  8. ##log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender   
  9. log4j.appender.FILE.Append=true  
  10. log4j.appender.FILE.File=c:/error1.log  
  11. log4j.appender.FILE.Threshold=INFO  
  12. log4j.appender.FILE.layout=org.apache.log4j.PatternLayout  
  13. log4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%5p] - %c -%F(%L) -%m%n  
  14. log4j.appender.FILE.MaxFileSize=1MB  
  15.   


3、SpringTest.java (junit测试类)

package cn.sz.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.sz.pojo.User;
public class SpringTest {
	// 方法一:使用带参构造方法实现依赖注入
	@Test
	public void testA() {
		// 读取主配置文件
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		User user4 = ac.getBean("user4", User.class);
		System.out.println(user4.toString());
	}

	// 方法二: 使用setter方法实现依赖注入
	@Test
	public void testB() {
		// 读取主配置文件
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		User user5 = ac.getBean("user5", User.class);
		System.out.println(user5.toString());
	}
}


4、User.java (用户实体类)

package cn.sz.pojo;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
public class User {
	private Integer id;
	private String name;
	private String[] strs;
	private List list;
	private Set set;
	private Map map;
	private Properties properties;

	// 保留无参的构造方法
	public User() {

	}

	// 为了演示使用带参数构造的方式实现依赖注入所以提供一个带参的构造方法测试
	public User(Integer id, String name) {
		this.id = id;
		this.name = name;
	}

	// 下面的setter方法是测试使用setter方式依赖注入使用的
	public String[] getStrs() {
		return strs;
	}

	public void setStrs(String[] strs) {
		this.strs = strs;
	}

	public List getList() {
		return list;
	}

	public void setList(List list) {
		this.list = list;
	}

	public Set getSet() {
		return set;
	}

	public void setSet(Set set) {
		this.set = set;
	}

	public Map getMap() {
		return map;
	}

	public void setMap(Map map) {
		this.map = map;
	}

	public Properties getProperties() {
		return properties;
	}

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

	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;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", strs=" + Arrays.toString(strs) + ", list=" + list + ", set="
				+ set + ", map=" + map + ", properties=" + properties + "]";
	}

}

testA()测试结果:

Spring DI 依赖注入案例(带参数构造方法依赖注入、setter方法依赖注入、p名称空间注入)_第2张图片

testB()测试结果:


以上两种方式以及完成了依赖注入


接下来是名称空间注入:

只是在配置文件有所不同,其他用法和以上的方法一致:

applicationContext.xml


  
  
      
     


注:需要使用setter/getter方法

xmlns:user="http://www.springframework.org/schema/p"
user为任意的名称

bean中user是上面配置的user,名称一致



你可能感兴趣的:(Spring)