IoC : 控制反转(Inversion of Control,英文缩写为IoC)
比如service层需要dao层对象, 不是由service层自己创建对象, 而是由spring容器创建dao层对象
DI:依赖注入(Dependency Injection)
Spring创建这个类过程中,将这个类所依赖的属性,设置到当前对象中
Spring创建对象和对象属性注入的三种方式 :
1.全部xml配置文件方式:
<bean id="userService" class="com.tencent.crm.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"></property>
</bean>
<bean id="customerDao" class="com.tencent.crm.dao.impl.CustomerDaoImpl" />
public class CustomerServiceImpl implements CustomerService {
private CustomerDao customerDao;
//提供set方法
public void setCustomerDao(CustomerDao customerDao) {
this.customerDao = customerDao;
}
2.全部注解开发:
<!-- 注解扫描包路径(重要) -->
<context:component-scan base-package="com.tencent.crm" />
@Component("userService")
@Service("userService") //作用同component,看起来JAVAEE三层架构清晰
public class CustomerServiceImpl implements CustomerService {
@Autowired
private CustomerDao customerDao;
@Component("userDao")
public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao {
3.XML和注解的整合开发:
由xml负责创建bean ,注解负责依赖注入属性
<!-- Autowired注解支持 -->
<context:annotation-config />
其实更推荐写注解扫描包路径,包含了annotation-cofig,annotation-cofig功能有限,不能创建bean
<bean id="userService" class="com.tencent.crm.service.impl.UserServiceImpl" />
<bean id="customerDao" class="com.tencent.crm.dao.impl.CustomerDaoImpl" />
public class CustomerServiceImpl implements CustomerService {
@Autowired
private CustomerDao customerDao;