zoukankan      html  css  js  c++  java
  • 什么是IOC,它的好处是什么

    IOC 即控制反转。将对象的控制权反过来交给spring进行管理。实现了对象与对象之间的解耦合。

    什么是控制?控制权指的是类的对象的创建和使用的权利。 比如A类和B类,在A类中创建B类对象,并调用B类的方法,那么我们称A类有B类的控制权。

    而控制反转即A类将创建的B的操作交给spring来做。A只需要向spring 获取B对象即可。

    它的好处是,对象的构建如果依赖非常多的对象,且层次很深,外层在构造对象时很麻烦且不一定知道如何构建这么多层次的对象,IOC帮我们管理对象的创建,只需要在配置文件里指定如何创建,每一个对象的配置文件都在类编写的时候指定了,所以最外层对象不需要关心深层次对象如何创建的,前人都已经写好了;

    例如:

    定义一个接口ByeService,里面有一个bye方法,并创建两个实现类(中文和英文的),通过spring将对象注入UserAction类中;

    我的目录为(仅供参考):

    1、先写两个实现类;

    ChineseService.java中的代码为:
    package before;
    
    public class ChineseService implements ByeService{
        @Override
        public void sayBye(){
            System.out.println("Today is 520 but I more like play code");
        }
    }
    EnglishService.java中的代码为:
    package before;
    
    public class EnglishService implements ByeService {
        @Override
        public void sayBye(){
            System.out.println("今天是520,但是我更喜欢敲代码");
        }
    }

    2、定义一个接口ByeService,目的是让两个实现类去实现这个接口;

    ByeService.java中的代码为:
    package before;
    
    public interface ByeService {
        void sayBye();
    }

    3、写一个spring配置文件applicationContext.xml;

    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 class="before.ChineseService" id="chineseService"></bean>
        <bean class="before.EnglishService" id="englishService"></bean>
        <bean class="spring.UserAction" id="userAction">
            <property name="byeService" ref="englishService"></property>
        </bean>
    </beans>

    4、写一个UserAction去测试是否成功;

    UserAction.java中的代码为:
    package spring;
    
    import before.ByeService;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class UserAction {
        private ByeService byeService;
    
        public void bye(){
            byeService.sayBye();
        }
        public void setByeService(ByeService byeService){
            this.byeService=byeService;
        }
    
        public static void main(String[] args) {
            ApplicationContext applicationContext=new ClassPathXmlApplicationContext("/applicationContext.xml");
            UserAction userAction= (UserAction) applicationContext.getBean("userAction");
            userAction.bye();
        }
    }

    测试结果为:

  • 相关阅读:
    ASE19团队项目 beta阶段 model组 scrum report list
    ASE19团队项目 beta阶段 model组 scrum7 记录
    ASE19团队项目 beta阶段 model组 scrum6 记录
    ASE19团队项目 beta阶段 model组 scrum5 记录
    ASE19团队项目 beta阶段 model组 scrum4 记录
    ASE19团队项目 beta阶段 model组 scrum3 记录
    ASE19团队项目 beta阶段 model组 scrum2 记录
    ASE19团队项目 beta阶段 model组 scrum1 记录
    【ASE模型组】Hint::neural 模型与case study
    【ASE高级软件工程】第二次结对作业
  • 原文地址:https://www.cnblogs.com/xie-qi/p/12926712.html
Copyright © 2011-2022 走看看