Spring4_04_注入参数

在上一篇提到的都是基本类型的注入的方式,书接上回。

注入参数的类型一般有以下几种常见:

  1. 基本类型注入
  2. 注入bean 
  3. 内部bean
  4. 注入null
  5. 级联属性
  6. 集合类型属性

下面用上一篇的实例,使用Junit 单元调试,一个一个的说这几种类型的注入: 

 基本类型注入


基本类型就是指:int ,float, String等等基本的数据类型。

还是上一篇的例子:

 xml:

	<bean id="person1" class="com.java.entity.Person">
		<property name="id" value="1"></property>
		<property name="name" value="基本类型注入"></property>
		<property name="age" value="11"></property>
	</bean>

测试类:

package com.java.test;

import static org.junit.Assert.*;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.java.entity.Person;

public class T {

	private ApplicationContext ac;
	@Before
	public void setUp() throws Exception {
		ac = new ClassPathXmlApplicationContext("beans.xml");
	}

	@Test
	public void test1() {
		Person person = (Person)ac.getBean("person1");
		System.out.println(person);
	}
}

用Junit调试:

 

注入bean


注入bean:指的是往容器中注入bean类型(类)的值,使用的是ref属性

为了区别bean,在entity包中新建了一个名为Dog,属性值只有姓名的类,在Person类中新增属性:Dog

 xml:

	<bean id="dog1" class="com.java.entity.Dog">
		<property name="name" value="jack"></property>
	</bean>
	<bean id="person2" class="com.java.entity.Person">
		<property name="id" value="2"></property>
		<property name="name" value="bean注入"></property>
		<property name="age" value="22"></property>
		<property name="dog" ref="dog1"></property>
	</bean>

测试:

	//bean注入
	@Test
	public void test2() {
		Person person = (Person)ac.getBean("person2");
		System.out.println(person);
	}

Junit调试:

内部bean


内部bean,是指只能被一个bean所使用,没有id,只能被包含引用,相当于私有化的。

具体看实例:

xml:

	<bean id="person3" class="com.java.entity.Person">
		<property name="id" value="2"></property>
		<property name="name" value="bean注入"></property>
		<property name="age" value="22"></property>
		<property name="dog">
			<bean class="com.java.entity.Dog">
				<property name="name" value="tom"></property>
			</bean>
		</property>
	</bean>

测试:

	//内部bean
	@Test
	public void test3() {
		Person person = (Person)ac.getBean("person3");
		System.out.println(person);
	}

Junit:

 

注入null值


往属性里注入空值null 

 xml:

	<bean id="person4" class="com.java.entity.Person">
		<property name="id" value="4"></property>
		<property name="name" value="bean注入"></property>
		<property name="age" value="22"></property>
		<property name="dog">
			<null></null>
		</property>
	</bean>

test:

	//注入null
	@Test
	public void test4() {
		Person person = (Person)ac.getBean("person4");
		System.out.println(person);
	}

Junit:

 

级联属性:


级联属性:为其里面的属性注入值,不经过bean过程。因此在person类中要new 一个对象,要不会报空指针异常

在person类中修改:

	private Dog dog = new Dog();//new一个Dog对象

xml:

	<bean id="person5" class="com.java.entity.Person">
		<property name="id" value="4"></property>
		<property name="name" value="bean注入"></property>
		<property name="age" value="22"></property>
		<property name="dog.name" value="jack2"></property>
	</bean>

test:

	//级联属性
	@Test
	public void test5() {
		Person person = (Person)ac.getBean("person5");
		System.out.println(person);
	}

Junit:

 

 集合类型属性


注入的集合类型:

下面一个个说: 

  1. List
  2. Set
  3. Map  
  4. properties

List集合:


person新增属性:

private List<String> hobbies = new ArrayList<>();

 生成geter,seter方法,并且重写toString方法

xml:

	<bean id="person6" class="com.java.entity.Person">
		<property name="id" value="4"></property>
		<property name="name" value="bean注入"></property>
		<property name="age" value="22"></property>
		<property name="dog" ref="dog1"></property>
		<property name="hobbies">
			<list>
				<value>唱歌</value>
				<value>跳舞</value>
			</list>
		</property>
	</bean>

test:

        //集合属性
	@Test
	public void test6() {
		Person person = (Person)ac.getBean("person6");
		System.out.println(person);
	}

Junit:

 Set集合


person类新增属性:

private Set<String> loves = new HashSet<String>();

生成geter,seter方法,并且重写toString方法,同上。 

xml:

	<bean id="person7" class="com.java.entity.Person">
		<property name="id" value="4"></property>
		<property name="name" value="bean注入"></property>
		<property name="age" value="22"></property>
		<property name="dog" ref="dog1"></property>
		<property name="hobbies">
			<list>
				<value>唱歌</value>
				<value>跳舞</value>
			</list>
		</property>
		<property name="loves">
			<set>
				<value>唱歌2</value>
				<value>跳舞2</value>
			</set>
		</property>
	</bean>

test:

        @Test
	public void test7() {
		Person person = (Person)ac.getBean("person7");
		System.out.println(person);
	}

Junit:

 Map集合


 person类新增属性:

private Map<String,String> works = new HashMap<String,String>();

生成geter,seter方法,并且重写toString方法,同上

xml:

	</bean>
		<bean id="person8" class="com.java.entity.Person">
		<property name="id" value="4"></property>
		<property name="name" value="bean注入"></property>
		<property name="age" value="22"></property>
		<property name="dog" ref="dog1"></property>
		<property name="hobbies">
			<list>
				<value>唱歌</value>
				<value>跳舞</value>
			</list>
		</property>
		<property name="loves">
			<set>
				<value>唱歌2</value>
				<value>跳舞2</value>
			</set>
		</property>
		<property name="works">
			<map>
				<entry>
					<key><value>上午</value></key>
					<value>写代码</value>
				</entry>
				<entry>
					<key><value>下午</value></key>
					<value>测试代码</value>
				</entry>
			</map>
		</property>
	</bean>

test:

	@Test
	public void test8() {
		Person person = (Person)ac.getBean("person8");
		System.out.println(person);
	}

Junit:

properties


  person类新增属性:

private Properties address = new Properties();

xml:

	<bean id="person9" class="com.java.entity.Person">
		<property name="id" value="4"></property>
		<property name="name" value="bean注入"></property>
		<property name="age" value="22"></property>
		<property name="dog" ref="dog1"></property>
		<property name="hobbies">
			<list>
				<value>唱歌</value>
				<value>跳舞</value>
			</list>
		</property>
		<property name="loves">
			<set>
				<value>唱歌2</value>
				<value>跳舞2</value>
			</set>
		</property>
		<property name="works">
			<map>
				<entry>
					<key><value>上午</value></key>
					<value>写代码</value>
				</entry>
				<entry>
					<key><value>下午</value></key>
					<value>测试代码</value>
				</entry>
			</map>
		</property>
		<property name="address">
			<props>
				<prop key="address1">1111</prop>
				<prop key="address2">2222</prop>
			</props>
		</property>
	</bean>
	

test:

	@Test
	public void test9() {
		Person person = (Person)ac.getBean("person9");
		System.out.println(person);
	}

 

附录


  1. 一头扎进Spring:Java学习路线图

猜你喜欢

转载自blog.csdn.net/qq_27163329/article/details/81140725