使用setter方法注入简单类型和引用类型
先给类中的属性创建setter方法
简单类型(基本数据类型和String):
在xml文件中使用 property 标签,name,value属性
引用类型:
在xml文件中使用property标签,name,ref属性
name:对应BookServiceImpl中的属性名
ref:对应配置文件中注册的bean的id
<?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="bookDao" class="com.hyk.dao.impl.BookDaoImpl">
<property name="name" value="哈哈哈"/>
<property name="num" value="111"/>
</bean>
<bean id="userDao" class="com.hyk.factory.UserDaoFactoryBean"/>
<bean id="bookService" class="com.hyk.service.impl.BookServiceImpl">
<property name="bookDao" ref="bookDao"/>
<property name="userDao" ref="userDao"/>
</bean>
</beans>
使用构造器注入简单类型和引用类型
先给类创建对应的构造方法方法
简单类型:
在xml文件中使用 constructor-arg 标签,name,value属性
引用类型:
在xml文件中使用 constructor-arg 标签,name,ref属性
name:对应BookServiceImpl中的属性名
ref:对应配置文件中注册的bean的id
<?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="bookDao" class="com.hyk.dao.impl.BookDaoImpl">
<constructor-arg name="name" value="蛤蛤蛤"/>
<constructor-arg name="num" value="123"/>
</bean>
<bean id="userDao" class="com.hyk.factory.UserDaoFactoryBean"/>
<bean id="bookService" class="com.hyk.service.impl.BookServiceImpl">
<constructor-arg name="bookDao" ref="bookDao"/>
<constructor-arg name="userDao" ref="userDao"/>
</bean>
</beans>
以上方法,耦合度很高。、
依赖注入方式选择
1. 强制依赖使用构造器进行,使用setter注入有概率不进行注入导致nu11对象出现
2.可选依赖使用setter注入进行 ,灵活性强
3. Spring框架倡导使用构造器,第三方框架内部大多数采用构造器注入的形式进行数据初始化,相对严谨
4.如果有必要可以两者同时使用, 使用构造器注入完成强制依赖的注入, 使用setter注入完成可选依赖的注入
5.实际开发过程中还要根据实际情况分析,如果受控对象没有提供setter方法就必须使用构造器注入
6.自己开发的模块推荐使用setter注入