在我们平常的开发之中,往往一个类要依赖其他的类来完成某个操作,这个时候我们会将我们需要的类new出来,然后调用他的方法执行操作,这就使得类之间的依赖性变大,代码的耦合性增强。不利于项目的维护。因此,spring ioc 应运而生。spring是如何执行依赖注入的,下面是一个例子。
新建java web项目,结构如下
导入jar包,需要的jar包有 log jar包,spring相关jar包 spring jar包下载方式 log jar包下载
建立公共dao和daoImpl
PublicDao.java
package cp.spring.dao;
public interface PublicDao {
public String add();
public String delete();
public String update();
public String select();
}
PublicDaoImpl.java 实现增删改查的模拟操作
package cp.spring.dao;
public class PublicDaoImpl implements PublicDao {
public String add() {
return "增加操作~~~~~~~~~~~";
}
public String delete() {
return "删除操作~~~~~~~~~~~";
}
public String update() {
return "修改操作~~~~~~~~~";
}
public String select() {
return "查询操作~~~~~~~~~";
}
}
新建 spring配置文件
<?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"
xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!-- 公共dao -->
<bean id="daoSrv" class="cp.spring.dao.PublicDaoImpl"></bean>
</beans>
建立测试service TestService.java
package cp.spring.service;
import cp.spring.dao.PublicDao;
public class TestService {
private PublicDao daoSrv;
/**
* 执行增加操作
* @return
*/
public String add(){
return daoSrv.add()+"\n------ 增加成功!";
}
/**
* 执行删除操作
* @return
*/
public String delete(){
return daoSrv.delete()+"\n------ 删除成功!";
}
/**
* 执行更新操作
* @return
*/
public String update(){
return daoSrv.update()+"\n------ 更新成功!";
}
/**
* 执行查询操作
* @return
*/
public String select(){
return daoSrv.select()+"\n------ 查询成功!";
}
/**
* @return the daoSrv
*/
public PublicDao getDaoSrv() {
return daoSrv;
}
/**
* @param daoSrv the daoSrv to set
*/
public void setDaoSrv(PublicDao daoSrv) {
this.daoSrv = daoSrv;
}
}
在spring配置文件中注入测试service
<?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"
xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!-- 公共dao -->
<bean id="daoSrv" class="cp.spring.dao.PublicDaoImpl"></bean>
<bean id="testService" class="cp.spring.service.TestService">
<!-- setter方法注入 -->
<property name="daoSrv" ref="daoSrv" />
</bean>
</beans>
编写测试action代码
package cp.spring.action;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cp.spring.service.TestService;
public class TestAction {
public static void main(String[] args) {
/**
* IOC思想 通过工厂类解析xml文件,以“反射”的方式创建对象:
*/
BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
TestService testService = (TestService)factory.getBean("testService");
String select = testService.select();
System.out.println(select);
}
}
运行测试action,就会得到我们想要的结果,这样就实现了IOC(依赖注入)。