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

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

DI 依赖注入:
  简单的说是指对象中的属性的值设置方式不再是调用setter方法进行传值,而是由配置实现经过框架传值。
 
DI操作可以采用两种实现方案:
    1、使用带参构造实现注入
<!-- 采用带参构造的方式实现依赖注入 -->
<bean id="user" class="cn.sz.pojo.User">
<constructor-arg name="id" value="123"></constructor-arg>
</bean>

    2、使用setter方法实现注入
<!-- 采用setter方法实现依赖注入 -->
<bean id="user" class="cn.sz.pojo.User">
<property name="id" value="13"></property>
</bean>

补充: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项目,项目结构如下:




代码如下:

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

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">	
	<!--DI操作(依赖注入) -->
	<!-- 方式一采用带参构造的方式实现依赖注入 -->
	<bean id="user4" class="cn.sz.pojo.User">
		<constructor-arg name="id" value="123"></constructor-arg>
		<constructor-arg name="name" value="张三"></constructor-arg>
	</bean>

	<!-- 方式二:采用setter方法实现依赖注入 ,还演示了结合属性的依赖注入 -->
	<bean id="user5" class="cn.sz.pojo.User">
		<property name="id" value="456"></property>
		<property name="name" value="李四"></property>
		<!-- 数组属性依赖注入 -->
		<property name="strs">
			<array>
				<value>数组属性1</value>
				<value>数组属性2</value>
				<value>数组属性3</value>
			</array>
		</property>
		<!-- list集合属性依赖注入 -->
		<property name="list">
			<list>
				<value>list属性1</value>
				<value>list属性2</value>
				<value>list属性3</value>
			</list>
		</property>
		<!-- set集合属性依赖注入(set集合内容不能重复) -->
		<property name="set">
			<set>
				<value>set属性1</value>
				<value>set属性2</value>
				<value>set属性3</value>
			</set>
		</property>
		<!-- map集合属性依赖注入 -->
		<property name="map">
			<map>
				<entry key="key1" value="map集合属性1"></entry>
				<entry key="key2" value="map集合属性2"></entry>
				<entry key="key3" value="map集合属性3"></entry>

			</map>
		</property>

		<!--Properties属性依赖注入 -->
		<property name="properties">
			<props>
				<prop key="p1">Properties属性1</prop>
				<prop key="p2">Properties属性2</prop>
			</props>
		</property>
	</bean>
</beans>


2、log4j.properties (日志文件)

[plain] view plain copy
  1. <span style="font-family:Microsoft YaHei;font-size:18px;">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. </span>  


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<String> list;
	private Set<String> set;
	private Map<String, String> 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<String> getList() {
		return list;
	}

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

	public Set<String> getSet() {
		return set;
	}

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

	public Map<String, String> getMap() {
		return map;
	}

	public void setMap(Map<String, String> 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()测试结果:


testB()测试结果:


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


接下来是名称空间注入:

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

applicationContext.xml


<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
   xmlns:user="http://www.springframework.org/schema/p"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xsi:schemaLocation="  
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">  
    <!-- 命名空间创建对象 -->  
   <bean id="user" class="cn.sz.pojo.User" user:uid="101" user:name="李四"></bean>  
</beans>


注:需要使用setter/getter方法

xmlns:user="http://www.springframework.org/schema/p"
user为任意的名称
<bean id="user" class="cn.sz.pojo.User" user:uid="101" user:name="李四"></bean>
bean中user是上面配置的user,名称一致



  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值