前言
向一个普通的类中注入数据有什么方法?
set方法
构造方法
依赖注入描述了在容器之间建立bean与bean之间依赖关系的过程,如果bean运行需要的是数字或者字符串呢?
引用类型
基本数据类型与String
依赖注入方式
setter注入
简单类型
引用类型
构造器注入
简单类型
引用类型
一、Setter注入
1、引用数据类型
在bean中定义引用数据类型并且提供可访问的set方法。
private BookDao bookDao;
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
<bean id="bookService" name="service" class="com.tsj.service.impl.BookServiceImpl" scope="prototype">
<property name="bookDao" ref="BookDao_test"/>
</bean>
配置文件中使用property标签ref属性注入引用类型对象。
(property对应的是bean中的引用数据类型变量,ref对应其他bean的id)
2、基本数据类型和String
在bean中定义基本数据类型并且提供set方法。
private int connection;
private String databases;
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
public void setConnection(int connection) {
this.connection = connection;
}
在配置文件中使用property标签value属性进行注入简单数据类型
<bean id="bookDao" name="BookDao_test" class="com.tsj.dao.impl.BookDaoImpl" init-method="init" destroy-method="destroy">
<!--配置没有顺序一说-->
<property name="connection" value="10"/>
<property name="databases" value="mysql"/>
</bean>
二、 构造器注入
引用数据类型
在bean中定义引用数据类型属性并且提供可访问的构造方法
private BookDao bookDao;
//这是一个构造方法
public BookDaoImpl(BookDao bookDao) {
this.bookDao = bookDao;
}
在配置文件中使用constructor-arg标签ref属性注入引用数据类型对象
<bean id="bookService" name="service" class="com.tsj.service.impl.BookServiceImpl" scope="prototype">
<constructor-arg name="bookDao" ref="BookDao_test"/>
</bean>
<bean id="bookDao" name="BookDao_test" class="com.tsj.dao.impl.BookDaoImpl"/>
简单数据类型与String
在bean中定义引用数据类型并且提供可访问的set方法
private int connection;
private String databases;
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
public void setConnection(int connection) {
this.connection = connection;
}
配置中使用constructor-arg标签value属性注入简单数据类型
<bean id="bookDao" name="BookDao_test" class="com.tsj.dao.impl.BookDaoImpl">
<constructor-arg name="connectionNumber" value=10>
</bean>
参数适配
为了解决配置文件和set方法中变量名相同耦合度较高的问题,有以下两种解决方法。
总结
依赖自动装配
Ioc容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称之为自动装配
自动装配方式
1、按类型(最常用)
<bean id="userdao" name="userDao_1" class="com.tsj.dao.impl.UserDaoImpl" />
<bean id="bookService" name="service" class="com.tsj.service.impl.BookServiceImpl" autowire="byType"/>
(我们可以对比一下使用setter注入)
<bean id="bookService" name="service" class="com.tsj.service.impl.BookServiceImpl" scope="prototype">
<property name="bookDao" ref="BookDao_test"/>
</bean>
2、按名称
3、按构造方法
4、不启用自动装配
集合注入
注意:如果是引用类型注入,添加<ref bean=""/>
<bean id="bookService" name="service" class="com.tsj.service.impl.BookServiceImpl" scope="prototype">
<property name="bookDao" ref="BookDao_test"/>
<property name="list">
<list>
<value>1010</value>
<value>200</value>
<value>300</value>
</list>
</property>
<property name="arrar">
<array>
<value>dajiahao</value>
<value>2buabeo</value>
<value>fqf</value>
</array>
</property>
<property name="map">
<map>
<entry key="country" value="tianjin"/>
<entry key="country" value="tianjin"/>
<entry key="country" value="tianjin"/>
<entry key="country" value="tianjin"/>
</map>
</property>
</bean>