Spring(一)Spring中的IOC和DI

首先Spring和MyBaits一样是一个框架,Java不死的原因是因为Java有Spring这个非常强大的技术框架的支持,而且他是一个轻量级的Java开发框架

那么是谁创建了Spring呢?

Spring之父——Rod JohnSon

Spring的官网是:Spring.io(有需要的可以去上面看看)

Spring又有那些特征呢?(在这里简单的介绍了一下)

1.什么是IOC?

IOC的全称是Inverse Of Control ,是控制反转的意思,他是一个重要的面向对象编程的法则来消减计算机程序的耦合问题,也是轻量级的Spring框架的核心

那么如何理解这句话呢?

第一种理解:将组建对象的控制权从代码本身转移到外部容器

第二种理解:将创建对象实力的控制权从代码控制剥离到IOC容器控制

2.Spring 的第一个案例

编写一个Spring的基本步骤:

(1)首先要引入jar包

引入下面这两个jar包后其他两个自动会有

<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>

(2)创建一个类,我在这叫HappyService

package demo01;

import java.util.StringTokenizer;

/**
 * Created by mycom on 2018/3/3.
 */
public class HappyService {
    private String info;
    private Integer age;

    public HappyService(){
        System.out.println("======HappyService");
    }

    public void work(){
        System.out.println("我是"+info);
    }

    public String getInfo() {
        return info;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public void setInfo(String info) {
        this.info = info;
    }
}

(3)在resource下配置一个ApplicationContext.xml的文件

文件中的内容:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="service" class="demo01.HappyService">
        <property name="info" value="第一个Spring项目"></property>
        <property name="age" value="10"></property>
    </bean>
</beans>

(4)编写测试类

import demo01.HappyService;
import demo03.printer.Printer;
import demo03.printer.Printer;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Created by mycom on 2018/3/3.
 */
public class Test20180303 {
    @Test
    public void t1(){
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
        HappyService service =(HappyService) context.getBean("service");
        service.work();
    }


}

测试的结果如下

这是IOC的简介,下面再说一下DI

3.什么是DI

DI的全称是  Dependency  Injection 是依赖注入,主要是给对象属性输入属性值

那么他和IOC的关系是什么呢?

他们是Spring核心思想不同方面的描述,站在不同的维度对同一个概念或者事物的解释

下面用一个例子来解释(打印机案例)

一台打印机要先打印出东西首先要有  墨盒  纸张 还有一个打印机

那么首先我们要先编写一个墨盒接口,在墨盒的包下

package demo03.ink;

/**
 * Created by mycom on 2018/3/3.
 */
public interface Ink {
    public String getInk();
}

写完接口,要有实现类继承他,在写两个类,彩色墨盒和黑白墨盒

package demo03.ink;

/**
 * Created by mycom on 2018/3/3.
 */
public class BlackInk implements Ink {
    public String getInk() {
        return "黑白墨盒";
    }
}
package demo03.ink;

/**
 * Created by mycom on 2018/3/3.
 */
public class ColorInk implements Ink {
    public String getInk() {
        return "彩色墨盒";
    }
}

纸张接口

package demo03.paper;

/**
 * Created by mycom on 2018/3/3.
 */
public interface Paper {
    public String getPaper();
}

他的实现类

package demo03.paper;

/**
 * Created by mycom on 2018/3/3.
 */
public class B5Paper implements Paper {
    public String getPaper() {
        return "B5";
    }
}
package demo03.paper;

/**
 * Created by mycom on 2018/3/3.
 */
public class A4Paper implements Paper {
    public String getPaper() {
        return "A4";
    }
}

下面是打印机类,不是接口了

package demo03.printer;

import demo03.ink.Ink;
import demo03.paper.Paper;

/**
 * Created by mycom on 2018/3/3.
 */
public class Printer {
    private Ink ink;
    private Paper paper;

    public Ink getInk() {
        return ink;
    }

    public void setInk(Ink ink) {
        this.ink = ink;
    }

    public void printer(){
        System.out.println("我在一张"+ink.getInk()+"颜色的"+paper.getPaper()+"纸上写东西了");
    }

    public Paper getPaper() {
        return paper;
    }

    public void setPaper(Paper paper) {
        this.paper = paper;
    }
}

之后要在xml文件中进行配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


    <!--现在Spring中定义一个Ink-->
    <bean id="ink" class="demo03.ink.ColorInk"></bean>
    <!--在Spring中定义一个Paper-->
    <bean id="paper" class="demo03.paper.A4Paper"></bean>
    <!--在Spring中定义一个Printer-->
    <bean id="printer" class="demo03.printer.Printer">
        <property name="ink" ref="ink"></property>
        <property name="paper" ref="paper"></property>
    </bean>
</beans>

最后编写测试类,进行单侧

import demo01.HappyService;
import demo03.printer.Printer;
import demo03.printer.Printer;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Created by mycom on 2018/3/3.
 */
public class Test20180303 {
    @Test
    public void t1(){
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContextPrinter.xml");
        Printer printer =(Printer) context.getBean("printer");
        printer.printer();
    }


}

原文地址:https://www.cnblogs.com/my-123/p/8504604.html