Spring
IOC容器:对象依赖关系的配置
示例接口和类
public class UserService implements IUserService { private IUserDao userDao ; // 接收IOC容器注入值 public void setUserDao(IUserDao userDao) { this.userDao = userDao; } public void save() { userDao.save(); } } public class UserAction { |
方式1:通过set方法注入,这种方式最常用!
<bean id="userdao" class="cn.itcast.d_di2.UserDao"></bean> <bean id="userService" class="cn.itcast.d_di2.UserService"> <property name="userDao" ref="userdao"></property> </bean> <bean id="userAction" class="cn.itcast.d_di2.UserAction" scope="prototype"> <property name="userService" ref="userService"></property> </bean> |
总结: 当创建的对象,不被容器其他地方引用的时候,可以这样写! 这样写不通用,内部对象只能用一次
这里,action如果是单例,内部bean默认就是单例; action如果是多例,内部bean就是多例
<bean id="userAction2" class="cn.itcast.d_di2.UserAction" scope="prototype"> <property name="userService"> <bean class="cn.itcast.d_di2.UserService"> <property name="userDao"> <bean class="cn.itcast.d_di2.UserDao"></bean> </property> </bean> </property> </bean> |
方式3: p名称空间,给属性注入值
方式4:自动装配 (了解)
a. default-autowire="byType" 配置到全局
当前所有的bean都采用”根据类型自动装配“
b. 配置到bean节点
autowire="byName" 根据名称自动装配, 会去容器找指定名称的对象,注入到set方法的参数中!
autowire="byType" 根据类型自动装配, 要确保改类型对应的对象在IOC容器中唯一,否则报错!
总结:
简化配置,但是维护麻烦!
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd" default-autowire="byType"> <bean id="userDao" class="cn.itcast.e_autowire.UserDao"></bean> |