• 框架:Spring IoC


    Spring篇

    第二章、Spring IoC简介

    一、基本概念

    控制反转是一个比较抽象的概念,是Spring框架的核心,用来消减计算机程序的耦合问题。

    依赖注入是IoC的另外一种说法,只是从不同的角度描述相同的概念。

    二、控制反转和依赖注入

    • 控制反转:当Spring框架出现后,对象的实例(汽车)不再由调用者(我)来创建,而是由Spring容器(汽车店)来创建。Spring容器负责控制程序之间的关系(汽车店控制我和汽车零件的关系),而不是由调用者的程序代码直接控制。这样,控制权由调用者转移到Spring容器,控制权发生了反转,这就是Spring的控制反转。
    • 依赖注入:从Spring容器角度上看,Spring容器负责将被依赖对象赋值给调用者的成员变量,相当于为调用者注入它所依赖的实例,这就是Spring的依赖注入。

    【附】:依赖注入采用的Java 的反射机制

    三、代码操作

    1、布局

    2、构造方法注入

    2.1、接口

    •  在包dao中添加接口TestDao
    package dao;
    
    public interface TestDao {
        public void sayHello();
    }
    • 在包server中添加接口TestDIService
    package server;
    
    public interface TestDIService {
        public void sayHello();
    }

    2.2、接口实现类

    • 在包dao中添加接口实现类TestDaoImpl
    package dao;
    
    /**
     * 接口实现类
     * lin
     * 2018/11/22
     */
    public class TestDaoImpl implements TestDao {
        @Override
        public void sayHello() {
            System.out.println("TestDiDaoSay:“Spring,Make persistent efforts!”");
        }
    }
    • 在包server中添加接实现类TestDIServiceImpl
    package server;
    
    import dao.TestDao;
    
    public class TestDIServiceImpl implements TestDIService {
        private TestDao testDao;
        //构造方法,用于实现依赖注入接口对象testDiDao
        public TestDIServiceImpl(TestDao testDao){
            super();
            this.testDao=testDao;
        }
    
        @Override
        public void sayHello() {
            //调用testDIDao中的sayHello方法
            testDao.sayHello();
            System.out.println("TestDIService构造方法注入say:Study Hard!");
        }
    }

    2.3、配置文件

     添加配置文件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">
        <!--将指定类TextDaoImpl配置给Spring,让Spring创建其实例-->
        <bean id="test" class="dao.TestDaoImpl"/>
        <!--使用构造方法注入-->
        <bean id="testDIService" class="server.TestDIServiceImpl">
            <!--将myTestDIDao注入到TestDIServiceImpl类的属性testDIDao-->
            <constructor-arg index="0" ref="test"/>
            <!--constructor-arg:用于定义类的构造方法的参数-->
            <!--index:定义参数的位置-->
            <!--ref:某一个实例的引用-->
        </bean>
    </beans>

    2.4、测试类

     在包test添加测试类TestDI

    package test;
    
    import dao.TestDao;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import server.TestDIService;
    
    public class Test {
        public static void main(String[] args) {
            //初始化Spring容器ApplicationContest,加载配置文件
            ApplicationContext appCon=new ClassPathXmlApplicationContext("applicationContext.xml");
            //通过容器获取test实例
            TestDIService testDIService=(TestDIService)appCon.getBean("testDIService");
            testDIService.sayHello();
        }
    }

    3、使用属性setter方法注入

    3.1、接口实现类

     在包server中添加TestDIServiceImpl_setter类

    package server;
    
    import dao.TestDao;
    import dao.TestDaoImpl;
    
    public class TestDIServiceImpl_setter implements TestDIService {
        private TestDao testDao;
        //添加testDIDao属性的setter方法,用于实现依赖注入o
        public void setTestDIDao(TestDao testDIDao) {
            this.testDao=testDIDao;
        }
    
        @Override
        public void sayHello() {
            //调用testDIDao中的sayHello方法
            testDao.sayHello();
            System.out.println("setter方法注入say:Study Hard!");
        }
    }

    3.2、配置文件

     在原有的配置文件applicationContext.xml中添加bean属性

    <bean id="testDIServicel" class="server.TestDIServiceImpl_setter">
            <!--调用TestDIServiceImpl_setter中的setter方法,将myTestDIDao注入到TestDIServiceImpl_setter类的testDIDao上-->
            <property name="testDIDao" ref="test"/>
    </bean>

    总:

    <?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">
        <!--将指定类TextDaoImpl配置给Spring,让Spring创建其实例-->
        <bean id="test" class="dao.TestDaoImpl"/>
        <!--使用构造方法注入-->
        <bean id="testDIService" class="server.TestDIServiceImpl">
            <!--将myTestDIDao注入到TestDIServiceImpl类的属性testDIDao-->
            <constructor-arg index="0" ref="test"/>
            <!--constructor-arg:用于定义类的构造方法的参数-->
            <!--index:定义参数的位置-->
            <!--ref:某一个实例的引用-->
        </bean>
        <!--使用setter方法注入-->
        <bean id="testDIServicel" class="server.TestDIServiceImpl_setter">
            <!--调用TestDIServiceImpl_setter中的setter方法,将myTestDIDao注入到TestDIServiceImpl_setter类的testDIDao上-->
            <property name="testDIDao" ref="test"/>
        </bean>
    </beans>

    3.3、测试类

    在test中插入代码

    //通过容器获取testDIService实例,测试setter方法注入
            TestDIService testDIService1=(TestDIService)appCon.getBean("testDIServicel");
            testDIService1.sayHello();

    package test;
    
    import dao.TestDao;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import server.TestDIService;
    
    public class Test {
        public static void main(String[] args) {
            //初始化Spring容器ApplicationContest,加载配置文件
            ApplicationContext appCon=new ClassPathXmlApplicationContext("applicationContext.xml");
            //通过容器获取test实例
            TestDIService testDIService=(TestDIService)appCon.getBean("testDIService");
            testDIService.sayHello();
            //通过容器获取testDIService实例,测试setter方法注入
            TestDIService testDIService1=(TestDIService)appCon.getBean("testDIServicel");
            testDIService1.sayHello();
        }
    }
  • 相关阅读:
    hdu1006
    矩阵快速幂计算hdu1575
    MATLAB逻辑函数
    pair类型
    MATLAB基础操作符与数据格式显示
    MATLAB矩阵基础运算
    状态压缩DP常遇到的位运算
    HDU1565方格取数
    C语言的数组名和对数组名取地址
    ubunut 12.04 (64bit) android编译环境搭建
  • 原文地址:https://www.cnblogs.com/hahayixiao/p/10020007.html
Copyright © 2020-2023  润新知