文章目录
- 3.6 Bean的依赖注入分析
- 3.7 Bean的依赖注入概念
- set方法
- 有参构造方法
- 3.8 Bean的依赖注入的数据类型
- 普通数据类型
- 集合数据类型
- list
- map
- properties
- 3.9 引入其他配置文件(分模块开发)
- 小结
3.6 Bean的依赖注入分析
业务层调用DAO层
- UserService接口
- 为接口创建1个实现
- 测试
- 现在把UserServiceImpl也配置到xml配置文件中
- 再次测试
但是可以改进为在容器内部注入
可以使用set方法,也可以使用构造方法
引出依赖注入
3.7 Bean的依赖注入概念
Service需要DAO的依赖注入
set方法
不用从容器中获得DAO了,因为在容器内部已经通过setUserDao获得了,
userDao是容器中的DAO
还需要在配置文件中告诉Spring要把容器中的DAO注入Service
这里的property的name是service里setXxx的xxx(要把第一个X小写),也就是下图的"UserDao",变为"userDao"
容器中的userDao(①)要通过service里的setUserDao方法(②)注入
测试:
但是如果是自己new一个UserServiceImpl的话,就会报错空指针
也就是save()里的userDao没有new,因为UserServiceImpl是自己new的,不是从容器中拿的,容器中的UserServiceImpl里才有DAO,自己new的里没有
即service依赖DAO的注入
set方法简便的注入方式——p命名空间
有参构造方法
ref代表对象引用
3.8 Bean的依赖注入的数据类型
普通数据类型
集合数据类型
list
map
properties
xml
<bean id="userDao" class="包名.UserDaoImpl">
<property name="strList">
<list>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</property>
<property name="userMap">
<map>
<entry key="u1" value-ref="user1"></entry>
<entry key="u2" value-ref="user2"></entry>
</map>
</property>
<property name="properties">
<props>
<prop key="p1">ppp1</prop>
<prop key="p2">ppp2</prop>
<prop key="p3">ppp3</prop>
</props>
</property>
</bean>
<bean id="user1" class="包名.User">
<property name="name" value="1"></property>
<property name="addr" value="2"></property>
</bean>
<bean id="user2" class="包名.User">
<property name="name" value="1"></property>
<property name="addr" value="2"></property>
</bean>
3.9 引入其他配置文件(分模块开发)
之前的配置文件 applicationContext.xml非常庞大,不容易读,且不方便后期维护
那么可以进行相应的拆解,比如按业务模块拆
然后在主文件中引入
小结