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("王小芳"); } }结果为:
早上好,王小芳
看图:
注意对应关系!
本篇是对依赖注入的初步认识,没有太深入讲解(本人还在学习中。。。)