Spring最主要的思想是IoC(Inversion of Control,控制反转、反向控制),或者称为DI(Dependency Injection,依赖注入).IoC是对传统控制流程的一种颠覆。
在我平时写的程序中,各个类都是相互依赖的,比如在A中我需要用B类的方法,我就会在A类中new一个B类,这样看起来合情合理,但是耦合度较高,后期维护相当的困难,导致我每次做完一个项目或系统,都不忍心去维护他,惨不忍睹!但是学习了Spring的依赖注入概念之后,发现这种方法非常的方便,后期维护也较为容易(之前没有花时间去学习,一直到现在才有所了解,非常的惭愧)好了,现在以一个小例子讲解以下什么是依赖注入!!!
程序的结果是“XXX,早上好!”
依赖注入依靠的是接口编程(我写的面向接口编程,通俗易懂(欢迎批评))现在发现接口编程是多么的重要!
首先先导入Spring的包,缺少了包后来运行的时候会提示,到时候你也可以根据提示继续添加,我导入的是这些包
开始,我们先写一个IDao(InterfaceDao)
public interface IDao {
public String sayHellw(String name);
}
然后实现这个接口(DaoImplements)
public class DaoImpl implements IDao {
@Override
public String sayHellw(String name) {
int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
if(hour<6) return "凌晨早,"+name;
if(hour<12) return "早上好,"+name;
if(hour<13) return "中午好,"+name;
if(hour<18) return "下午好,"+name;
return "晚上好,"+name;
}
}
实现接口的方法,并判断当前的时间,然后返回时间加姓名。
接下来编写ISerice
public interface IService {
public void service(String name);
}
实现他ServiceImpl
public class ServiceImpl implements IService {
private IDao dao;
public IDao getDao() {
return dao;
}
public void setDao(IDao dao) {
this.dao = dao;
}
@Override
public void service(String name) {
System.out.println(dao.sayHellw(name));
}
}
注意里面声明了IDao还有下面的serDao()方法,你可以想象一下,就像一个人的内部突然装了一个接口,等待外部往里面填东西
到此,所有的代码编写完毕,我们可以看到,所有的代码里没有一个new,那么这些程序怎么实现呢?人体内的接口知道要填充的东西吗?这里需要配置文件applicationContext.xml,不要害怕,就相当于一个菜单,拿药的单子
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="daoImpl" class="com.example.DaoImpl" />
<bean id="service" class="com.example.ServiceImpl">
<property name="dao" ref="daoImpl"></property>
</bean>
</beans>
有了这个东西,程序就会知道怎么做了,医生也会知道用什么药来填充你!!!
测试代码:
public class test {
public static void main(String[] args) {
ApplicationContext acp = new FileSystemXmlApplicationContext("src/applicationContext.xml");
ServiceImpl service = (ServiceImpl) acp.getBean("service");
service.service("王小芳");
}
}
结果为:
早上好,王小芳
看图:
注意对应关系!
本篇是对依赖注入的初步认识,没有太深入讲解(本人还在学习中。。。)