在上一篇提到的都是基本类型的注入的方式,书接上回。
注入参数的类型一般有以下几种常见:
- 基本类型注入
- 注入bean
- 内部bean
- 注入null
- 级联属性
- 集合类型属性
下面用上一篇的实例,使用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:
集合类型属性
注入的集合类型:
下面一个个说:
- List
- Set
- Map
- 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);
}
附录
- 一头扎进Spring:Java学习路线图