一、新建Spring-Maven项目

  • 在pom.xml文件中添加插件管理依赖
      <build>
          <plugins>
              <plugin>
                  <artifactId>maven-compiler-plugin</artifactId>
                  <version>3.1</version>
                  <configuration>
                      <source>1.8</source>
                      <target>1.8</target>
                  </configuration>
              </plugin>
          </plugins>
      </build>
    
  • 在pom.xml文件中添加Spring-Context依赖
    • 其他版本地址
      • https://mvnrepository.com/artifact/org.springframework/spring-context
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-context</artifactId>
              <version>5.2.5.RELEASE</version>
          </dependency>
    

二、在Spring-context使用IOC和依赖注入

  • 在resource里面新建一个spring的xml文件
    • applicationContext.xml ,如图
      idea 新建spring maven项目、ioc和依赖注入-LMLPHP

    • 新建接口类

          package org.study;
      
          public interface ISomeService {
              void doSome();
          }
      
      
    • 新建接口实现类

          package org.study;
      
          public class SomeService implements  ISomeService{
              /**
               * 构造函数
               */
              public SomeService()
              {
                  System.out.println("SomeService 构造函数!");
              }
          
              /**
               *
               */
              @Override
              public void doSome() {
                  System.out.println("doSome 函数!");
              }
          } 
      
    • Main函数中执行

          package org.example;
      
          import org.springframework.context.ApplicationContext;
          import org.springframework.context.support.ClassPathXmlApplicationContext;
          import org.study.ISomeService; 
          
          public class Main {
          
              public static void main(String[] args) {
                  //加载配置文件
                  ApplicationContext context =   new ClassPathXmlApplicationContext("applicationContext.xml");
                  //第一种方式
                  ISomeService iSomeService = (ISomeService)context.getBean("SomeService");
                  iSomeService.doSome();
                  //第二种方式 要求:获取对应的实例,该实例必须实现对应的接口
                  ISomeService iSomeService1 =  context.getBean("SomeService",ISomeService.class);
                  iSomeService.doSome(); 
              }
          }
      
    • 在当前的服务中调用其他服务

      • 第一种方式
        • 使用setter的方式
          • 接口类
                  package org.study;
            
                  public interface ISomeService1 {
                      void doSome();
                  } 
            
          • 实现类
                  package org.study;
            
                  public class SomeService1 implements  ISomeService1{
                      private ISomeService iSomeService;
                  
                      public void setiSomeService(ISomeService iSomeService) {
                          this.iSomeService = iSomeService;
                      } 
                      /**
                       * 构造函数
                       */
                      public SomeService1()
                      {
                          System.out.println("SomeService1 构造函数!");
                      } 
                      /**
                       *
                       */
                      @Override
                      public void doSome() {
                  
                          iSomeService.doSome();
                  
                      }
                  } 
            
          • 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 ="SomeService" class="org.study.SomeService"></bean>
              
              
                <bean id="SomeService1" class="org.study.SomeService1" >
                  <!--使用 setter-->
               <property  name="iSomeService" ref="SomeService"></property>  
                </bean>
              
              </beans>
              <!--
              name : 提供setter方法的属性名称
              ref:容器中已经有的bean名称
                -->
            
      • 第二种方式
        • 使用构造函数方式
          • 接口类
                  package org.study;
            
                  public interface ISomeService1 {
                      void doSome();
                  } 
            
          • 实现类
                  package org.study;
            
                  public class SomeService1 implements  ISomeService1{
                      private ISomeService iSomeService;
                   
                  
                   public  SomeService1 (ISomeService iSomeService){
                       this.iSomeService = iSomeService;
                   }
                      /**
                       * 构造函数
                       */
                      public SomeService1()
                      {
                          System.out.println("SomeService1 构造函数!");
                      }
                  
                      /**
                       *
                       */
                      @Override
                      public void doSome() {
                  
                          iSomeService.doSome();
                  
                      }
                  }
            
            
          • 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 ="SomeService" class="org.study.SomeService"></bean> 
              
                <bean id="SomeService1" class="org.study.SomeService1" >
                   <constructor-arg name="iSomeService" ref="SomeService"></constructor-arg>
                </bean>
              
              </beans>
              <!--
              name :  属性名称
              ref:容器中已经有的bean名称
                -->
            
      • main函数执行
           ISomeService1 iSomeService1 = context.getBean("SomeService1",ISomeService1.class);
          iSomeService1.doSome();
        
05-03 20:52