Spring —— IOC 和 DI 入门

Spring —— IOC 和 DI 入门



Spring技术是JavaEE开发必备技能,企业开发技术选型命中率>90%,

从展业角度来讲能够简化开发,降低企业级开发的复杂性;能整合其它大部分框架,例如MyBatis、MyBatis-plus、Struts、Struts2、Hibernate等,提高企业级应用开发与运行效率

Spring —— IOC 和 DI 入门_第1张图片


1. 目前我们代码存在的问题

目前我们的代码存在哪些问题呢?

  • 耦合度偏高

Spring —— IOC 和 DI 入门_第2张图片

那应该怎么样降低代码的耦合度呢?

  • 使用对象时,在程序中不要主动使用new产生对象,转换为由外部提供对象

2. Spring核心概念

  • IOC(Inversion of Control)控制反转

    使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。通俗的讲就是将new对象的权利交给Spring,我们从Spring中获取对象使用即可

  • Spring技术对IoC思想进行了实现

    • Spring提供了一个容器,称为IOC容器,用来充当IoC思想中的“外部”
    • IOC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在IoC容器中统称为Bean
  • DI(Dependency Injection)依赖注入

    在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入

Spring —— IOC 和 DI 入门_第3张图片



3. IOC入门案例

  • 实现步骤

    1. 导入Spring坐标
    2. 定义Spring管理的类(接口)
    3. 创建Spring配置文件,配置对应类作为Spring管理的bean对象
    4. 初始化IOC容器(Spring核心容器/Spring容器),通过容器获取bean对象
    
  • 具体操作

    1. 导入Spring坐标

      
      <dependency>
          <groupId>org.springframeworkgroupId>
          <artifactId>spring-contextartifactId>
          <version>5.2.10.RELEASEversion>
      dependency>
      

    2. 定义Spring管理的类(接口)

      • BookDao接口和BookDaoImpl实现类

        public interface BookDao {
            public void save();
        }
        
        public class BookDaoImpl implements BookDao {
            public void save() {
                System.out.println("book dao save ...");
            }
        }
        
      • BookService接口和BookServiceImpl实现类

        public interface BookService {
            public void save();
        }
        
        public class BookServiceImpl implements BookService {
            private BookDao bookDao = new BookDaoImpl();
            public void save() {
                System.out.println("book service save ...");
                bookDao.save();
            }
        }
        

    3. 创建Spring配置文件,配置对应类作为Spring管理的bean对象

      • 定义applicationContext.xml配置文件并配置BookServiceImpl

        
        <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="bookService" class="run.xiaoliu.service.impl.BookServiceImpl">bean>
        
        beans>
        

        PS:bean定义时id属性在同一个上下文中(IOC容器中)不能重复


    4. 初始化IOC容器(Spring核心容器/Spring容器),通过容器获取Bean对象

      public class App {
          public static void main(String[] args) {
              //1.创建IoC容器对象,加载spring核心配置文件
              ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
              //2 从IOC容器中获取Bean对象(BookService对象)
              BookService bookService= (BookService)ctx.getBean("bookService");
              //3 调用Bean对象(BookService对象)的方法
              bookService.save();
          }
      }
      

    • 运行结果

      Spring —— IOC 和 DI 入门_第4张图片


4. DI 入门案例

  • 实现步骤

    1. 删除使用new的形式创建对象的代码
    2. 提供依赖对象对应的setter方法
    3. 配置service与dao之间的关系
    

  • 具体操作

    1. 删除使用new的形式创建对象的代码

      public class BookServiceImpl implements BookService {
      	// 1. 删除使用new的形式创建对象的代码
          // private BookDao bookDao = new BookDao;
          private BookDao bookDao;  
          public void save() {
              System.out.println("book service save ...");
              bookDao.save();
          }
      }
      

    2. 提供依赖对象对应的setter方法

      public class BookServiceImpl implements BookService {
          
          private BookDao bookDao;
          
          // 2. 提供依赖对象对应的setter方法
          public void setBookDao(BookDao bookDao) {
              this.bookDao = bookDao;
          }
          
          public void save() {
              System.out.println("book service save ...");
              bookDao.save();
          }
      }
      

    3. applicationContext.xml 中配置service与dao之间的关系

      
      <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="bookDao" class="run.xiaoliu.dao.impl.BookDaoImpl"/>
      
          <bean id="bookService" class="run.xiaoliu.service.impl.BookServiceImpl">
              
              <property name="bookDao" ref="bookDao"/>
          bean>
      beans>
      

  • 图解演示

    Spring —— IOC 和 DI 入门_第5张图片



以上即 IOC 和 DI 简单入门,特此记录!

你可能感兴趣的:(spring,java,学习)