Spring学习之依赖注入

Spring最主要的思想是IoC(Inversion of Control,控制反转、反向控制),或者称为DI(Dependency Injection,依赖注入).IoC是对传统控制流程的一种颠覆。

在我平时写的程序中,各个类都是相互依赖的,比如在A中我需要用B类的方法,我就会在A类中new一个B类,这样看起来合情合理,但是耦合度较高,后期维护相当的困难,导致我每次做完一个项目或系统,都不忍心去维护他,惨不忍睹!但是学习了Spring的依赖注入概念之后,发现这种方法非常的方便,后期维护也较为容易(之前没有花时间去学习,一直到现在才有所了解,非常的惭愧)好了,现在以一个小例子讲解以下什么是依赖注入!!!

程序的结果是“XXX,早上好!”

依赖注入依靠的是接口编程(我写的面向接口编程,通俗易懂(欢迎批评))现在发现接口编程是多么的重要!

首先先导入Spring的包,缺少了包后来运行的时候会提示,到时候你也可以根据提示继续添加,我导入的是这些包

Spring学习之依赖注入_第1张图片

开始,我们先写一个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("王小芳");
	}
}
结果为:

早上好,王小芳

看图:

Spring学习之依赖注入_第2张图片

注意对应关系!

本篇是对依赖注入的初步认识,没有太深入讲解(本人还在学习中。。。)

你可能感兴趣的:(spring,依赖注入,接口编程)