Spring学习之依赖注入

来源:互联网 发布:手机号码生成软件 编辑:程序博客网 时间:2024/06/04 19:42

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;}@Overridepublic 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("王小芳");}}
结果为:

早上好,王小芳

看图:


注意对应关系!

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

0 0
原创粉丝点击