两种依赖注入方式
- 属性注入,调用set方法
<bean id="goodsDao" class="com.shinerio.dao.GoodsDao"></bean>
<bean id="goodsService" class="com.shinerio.service.GoodsService">
<property name="dao" ref="goodsDao"></property>
</bean>
- 构造注入
<bean id="goodsDao" class="com.shinerio.dao.GoodsDao"></bean>
<bean id="goodsService" class="com.shinerio.service.GoodsService">
<!-- 可通过类型,索引,参数名 -->
<constructor-arg index="0" ref="goodsDao"></constructor-arg>
<!--
<constructor-arg name="dao" ref="goodsDao"></constructor-arg>
<constructor-arg type="com.shinerio.dao.GoodsDao" ref="goodsDao"></constructor-arg>
-->
</bean>
使用set方法注入需要遵循javabean规范
JavaBean:是本质就是一个POJO类,但具有一下限制:
- 该类必须要有公共的无参构造器,如public HelloImpl4() {};
- 属性为private访问级别,不建议public,如private String message;
- 属性必要时通过一组setter(修改器)和getter(访问器)方法来访问;
- setter方法,以“set” 开头,后跟首字母大写的属性名,如“setMesssage”,简单属性一般只有一个方法参数,方法返回值通常为“void”;
- getter方法,一般属性以“get”开头,对于boolean类型一般以“is”开头,后跟首字母大写的属性名,如“getMesssage”,“isOk”;
- 还有一些其他特殊情况,比如属性有连续两个大写字母开头,如“URL”,则setter/getter方法为:“setURL”和“getURL”,其他一些特殊情况请参看“Java Bean”命名规范。
注入集合数组
<bean id = "good" class="com.shinerio.domain.Goods">
<property name="name" value="可乐"></property>
<property name="price" value="3.0"></property>
<property name="num" value="100"></property>
<property name="color">
<list value-type="java.lang.String">
<value>红</value>
<value>黄</value>
<value>蓝</value>
</list>
</property>
</bean>
Set类型:需要使用标签来配置注入,其配置参数及含义和标签完全一样
Collection类型:因为Collection类型是Set和List类型的基类型,所以使用或标签都可以进行注入,配置方式完全
Map注入采用键值对
<map>
<entry key="10" value="CoreJava">
</entry>
<entry key="11" value="JavaWeb">
</entry>
<entry key="12" value="SSH2">
</entry>
</map>
数组的注入(二维数组嵌套使用arry标签)和set用法类似
Properties注入:Spring能注入java.util.Properties类型数据,需要使用标签来配置注入,键和值类型必须是String,不能变,子标签值来指定键值对
注入null值
通过<null/>
标签来注入
Spring还支持级联注入
延迟初始化:
<bean>
标签上指定 “lazy-init” 属性值为“true”即可延迟初始化Bean