SpringIOC的使用
IOC的概念
Inverse of Controller被称为控制反转或反向控制。(控制转移)所谓的控制指的是对象关系的指定,对象的创建、初始化和销毁等逻辑。IOC指的是将控制逻辑交给第三方框架或容器负责。当两个组件关系发生改变,只需要修改框架或容器配置即可。IOC主要解决的是两个组件对象调用问题,可以以低耦合方式建立使用关系。
DI的概念
Dependency Injection依赖注入。Spring框架采用的是DI技术实现了IOC控制思想。Spring提供了两种形式的注入方法。
- setter方式注入
依靠的set方法,将组件对象传入首先添加属性变量和setter方法之后再中定义部分采用下面描述方法
<property name = "属性名" ref = "要注入的对象id值">
<property/>
- 构造方法注入
依靠构造方法,将组件对象传入
案例
抽象接口
public interface CostDAO {
public void save();
public void delete();
}
实现类
jdbcCostDao实现
public class JdbcCostDAO implements CostDAO {
public JdbcCostDAO() {
//单例模式的Bean组件是在容器实例化时创建,
//prototype是在调用getBean()方法时调用
System.out.println("--创建CostDAO对象--");
}
public void myinit() {
System.out.println("--初始化DAO对象--");
}
public void mydestory() {
System.out.println("--释放DAO资源--");
}
@Override
public void save() {
System.out.println("利用JDBC技术添加资费记录");
}
@Override
public void delete() {
System.out.println("利用JDBC技术删除资费记录");
}
}
HibernateCostDao实现
public class HibernateCostDao implements CostDAO{
public void delete(){
System.out.println("删除操作");
}
public void save() {
System.out.println("添加操作");
}
}
applicationContext.xml中bean组件
jdbcCostDao
<bean id = "jdbcCostDAO" scope = "singleton" lazy-init = "true"
init-method = "myinit" destroy-method = "mydestory" class = "com.shagou.JdbcCostDAO"
></bean>
HibernateCostDao
<bean id = "HibernateCostDao" scope = "prototype" class = "com.shagou.HibernateCostDao"></bean>
Spring支持
<bean id = "CostAction" scope = "prototype" class = "com.shagou.CostAction.CostAction">
<!-- 利用setCostDao方法接收CostDao对象 -->
<property name = "costDao" ref = "HibernateCostDao"></property>
</bean>
CostAction测试类
public class CostAction {
//利用Spring的IOC机制使用JdbcCostDAO组件对象
private CostDAO costDao;
//set方式注入
public void setCostDao(CostDAO costDao) {
this.costDao = costDao;
}
public String execute(){
System.out.println("处理资费添加操作");
costDao.save();
return "success";
}
}