给Bean的属性赋值(注入)
接上一章初学spring01
-
通过构造方法赋值
-
public People newInstance(){ return new People(19,"maoyan2",true); }
-
<bean id="people1" class="com.catjava.pojo.People"> <constructor-arg index="0" name="years" type="int" value="18"></constructor-arg> <constructor-arg index="1" name="name" type="String" value="maoyan"></constructor-arg> <constructor-arg index="2" name="sex" type="boolean" value="1"></constructor-arg> </bean>
-
-
设置注入(set方法)
-
先设置配置文件
-
<bean id="people4" class="com.catjava.pojo.People"> <property name="years"> <value>30</value> </property> <property name="name"> <value>maoyan3</value> </property> <property name="sex"> <value>true</value> </property> </bean>
-
-
在People类中的set方法中添加一行代码
-
public void setYears(int years) { System.out.println("调用了set方法"); this.years = years; }
-
-
输出结果
- 无参构造方法
调用了set方法
People [years=30, name=maoyan3, sex=true]
很明显可以看出,设置注入的方法本质上是调用了People类的set方法
- 无参构造方法
-
-
如果是其他属性,非基本属性,例如(Set List 数组 map Properties )
-
先在People中添加
private Set<String> setsSet; private List<String> listsList; private String[] strings; private Map<String, String> mapsMap; private Properties properties;
-
Set<?>
-
<!-- Set类型 --> <property name="setsSet"> <set> <value>01set</value> <value>02set</value> <value>03set</value> </set> </property>
-
-
List<?>
-
<!-- List类型 --> <property name="listsList"> <list> <value>01list</value> <value>02list</value> <value>03list</value> </list> </property>
-
-
数组
-
<!-- 数组 --> <property name="strings"> <array> <value>01数组</value> <value>02数组</value> <value>03数组</value> </array> </property>
-
-
Map<?,?>
-
<!-- Map类型 --> <property name="mapsMap"> <map> <entry key="01" value="map1"></entry> <entry key="02" value="map2"></entry> <entry key="03" value="map3"></entry> </map> </property>
-
注意这里是entry
-
-
Properties 类型
-
<!-- Properties 类型 --> <property name="properties"> <props> <prop key="01">properties1</prop> <prop key="02">properties2</prop> <prop key="03">properties3</prop> </props> </property>
-
-
DI(依赖注入)
-
概念:当A类需要依赖B类时,把B类赋值给A类的过程,叫做依赖注入,即DI
-
如:先创建一个GirlFriend类
-
private int years; private String hobby;
-
set和get方法还有toString方法都省略了。
-
-
再在配置文件中创建一个GirlFriend的Bean
<!-- GirlFriend --> <bean id="grilfriend" class="com.catjava.pojo.GirlFriend"> <!-- 赋值进去 --> <property name="years"> <value>18</value> </property> <property name="hobby"> <value>play games</value> </property> </bean>
-
在People类和bean中都加入girlfriend
private GirlFriend girlFriend;
- 并实现set,get还有toString方法
<!-- girlfriend类 --> <property name="girlFriend" ref="grilfriend"> </property>
- 这里的ref是调用别的bean所用到的,值为另一个bean的id值
输出结果:
无参构造方法
调用了set方法
People [years=30, name=maoyan3, sex=true, setsSet=[01set, 02set, 03set], listsList=[01list, 02list, 03list], strings=[01数组, 02数组, 03数组], mapsMap={01=map1, 02=map2, 03=map3}, properties={03=properties3, 02=properties2, 01=properties1}, girlFriend=GirlFriend [years=18, hobby=play games]]