类型分类
- JDK 内置类型
- 8 种基本类型 + String
- 数组
- set
- list
- map
- properites
- 用户自定义类型
set 注入
如果一个类中有各种定义的变量,比如用户自定义类型,那么应该怎么注入。
JDK内置类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| package com.rhino;
import lombok.Data;
import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set;
@Data public class Person {
private Integer id; private String name; private String[] emails; private Set<String> tels; private List<String> addresses; private Map<String,String> qqs; private Properties p;
public Person(){ System.out.println("Person.person"); }
}
|
8 种基本类型 + String
使用
1 2 3
| <property name="name"> <value>小明</value> </property>
|
数组
1 2 3 4 5 6
| <property name="emails"> <list> <value>123@com</value> <value>2222@com</value> </list> </property>
|
set 类型「无序」
1 2 3 4 5 6 7 8
| <property name="tels"> <set> <value>1239999</value> <value>1239909</value> <ref bean=""> </ref> </set> </property>
|
list 类型「有序」
1 2 3 4 5 6 7 8 9 10
| <property name="addresses"> <list> <value>123</value> <value>1234445</value> <value>1234445</value> <set></set> <ref bean=""/> <list></list> </list> </property>
|
map
1 2 3 4 5 6 7 8
| <property name="qqs"> <map> <entry> <key><value>suns</value></key> <value>123</value> </entry> </map> </property>
|
Properties
1 2 3 4 5 6
| <property name="p"> <props> <prop key="123">444</prop> <prop key="1234">555</prop> </props> </property>
|
总结来说,整个代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| <bean id="person" class="com.rhino.Person"> <property name="id"> <value>10</value> </property> <property name="name"> <value>小明</value> </property> <property name="emails"> <list> <value>123@com</value> <value>2222@com</value> </list> </property> <property name="tels"> <set> <value>1239999</value> <value>1239909</value> </set> </property> <property name="addresses"> <list> <value>123</value> <value>1234445</value> <value>1234445</value> </list> </property> <property name="qqs"> <map> <entry> <key><value>suns</value></key> <value>123</value> </entry> </map> </property> <property name="p"> <props> <prop key="123">444</prop> <prop key="1234">555</prop> </props> </property> </bean>
|
关于如何使用请参考
用户自定义类型
如果,一个类中嵌套另外一个自定义类。
第一种方式
新创建一个类,取名 User
。
1 2 3 4 5 6 7 8
| package com.rhino;
import lombok.Data;
@Data public class User { private Person person; }
|
然后在 applicationContext.xml
这样写
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <?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"> <bean id="user" class="com.rhino.User"> <property name="person"> <bean class="com.rhino.Person"/> </property> </bean> </beans>
|
上面的 xml
既可以赋值,也可以创建一个空对象。
然后在测试类中
1 2 3 4 5 6
| @Test public void test() { ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml"); User user = (User) ctx.getBean("user"); System.out.println(user.getPerson().getName()); }
|
有正确输出小明。
这种方式有下面的几种缺点
- 如果有一个类在多个类中使用,那么
xml
配置多次空对象,写了很多冗余代码
- 并且,每一个类的
xml
配置,如果都写空对象,那么,这个空对象会创建很多次,分属于不同的对象
第二种方式
xml
的配置改成
1 2 3 4 5 6
| <bean id="personImpl" class="com.rhino.Person"/> <bean id="user" class="com.rhino.User"> <property name="person"> <ref bean="personImpl"/> </property> </bean>
|
在外面创建一个 personImpl
,然后在有需要的地方进行 ref
引用。
这样多个类中,保证 person
的类实现唯一。