Notes
依赖自动装配
- IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程为自动装配
- 自动装配方式
- 按类型(常用)
- 按名称
- 按构造方法(不推荐)
- 不启用自动装配(手动配置,参考上节)
Set方式自动装配
public class BookServiceImpl implements BookService {
BookDao bookDao;
public void setBookDao(BookDao bookDao) { this.bookDao = bookDao; }
public void save() { }
}
|
bean标签属性:autowire=” “
<bean id="userDao" class="com.mvnweb.dao.impl.UserDaoImpl"/> // 或<bean class="com.mvnweb.dao.impl.UserDaoImpl"/> <bean id="bookService" class="com.mvnweb.service.impl.BookServiceImpl" autowire="byType"/>
|
注意被装配的bean必须存在
当被装配的bean标签有多个时,一个实体类对应多个bean实例会报不唯一异常
即按类型装配(autowire=” byType”)时不能出现如下情况:
//一个实体类有多个bean实例对象 <bean id="userDao" class="com.mvnweb.dao.impl.UserDaoImpl"/> <bean id="userDao1" class="com.mvnweb.dao.impl.UserDaoImpl"/>
<bean id="bookService" class="com.mvnweb.service.impl.BookServiceImpl" autowire="byType"/>
|
通常我们都是默认都是唯一,如果真要写两(多个)可以按名称装配(autowire=” byName”)
按名匹配:属性名对应类标id【实际上用的名是set方法名取属性的首字母小写setBookDao→bookDao】
<bean id="userDao1" class="com.mvnweb.dao.impl.UserDaoImpl"/> <bean id="userDao" class="com.mvnweb.dao.impl.UserDaoImpl"/> <bean id="bookService" class="com.mvnweb.service.impl.BookServiceImpl" autowire="byName"/>
|
如果名不匹配:返回Null Pointer Exception异常(注入了没找到,返回一个空对象)
总结:通常还是按类型,避免改名出现问题,尽量降低耦合。
依赖自动装配特征
- 自动装配用于引用类型的依赖注入,不能对简单类型进行操作【1,2这种数值配置时还是比较抽象的】
- 使用按类型装配时(byType)必须保障容器中相同的bean唯一,推荐使用
- 使用按名称装配时(byName)必须保障容器中具有指定名称的bean,因为变量名与配置耦合,不推荐使用
- 自动装配优先级低于setter注入与构造器注入,同时出现时,自动装配配置失效
几种集合注入方式
集合注入通常都是以简单数据类型为主,很少有引用类型,后续有时间再补充,这里主要是简单数据类型的注入
xml配置格式:其他大致相同,注意map和properties即可
map
properties
引用类型
<bean id="userDao" class="com.mvnweb.dao.impl.UserDaoImpl"> <property name="arrayDemo"> <array> <value>0</value> <value>1</value> <value>2</value> //引用类型 <ref bean=""> </array> </property> <property name="list"> <list> <value>"0"</value> <value>"1"</value> <value>"2"</value> </list> </property> <property name="set"> <set> <value>it</value> <value>pc</value> <value>kit</value> </set> </property> <property name="map"> <map> <entry key="ik" value="mo"/> <entry key="lo" value="pp"/> <entry key="ke" value="vl"/> </map> </property> <property name="properties"> <props> <prop key="ok">0</prop> <prop key="la">1</prop> <prop key="po">2</prop> </props> </property> </bean>
|
配置也是动态的,加入标签,对应添加元素
这里了解格式即可,集合注入通常框架使用得比较多,开发不常用