首页 > 其他分享 >2、IOC

2、IOC

时间:2023-08-27 10:34:03浏览次数:28  
标签:userDao String void getUser str IOC public

2、IOC

2.1、IOC依赖注入

  1. UserDao 接口

    public interface UserDao {
       public void getUser();
    }
  2. UserDaoImpl 实现类

    public class UserDaoImpl implements UserDao{
       @Override
       public void getUser() {
           System.out.println("默认获取用户");
      }
    }

     

  3. UserService 业务层接口

    public interface UserService {
       public void getUser();
    }

     

  4. UserServiceImpl 接口实现

    public class UserServiceImpl implements UserService{
      private UserDao userDao=new MySqlImpl();
       @Override
       public void getUser() {
           userDao.getUser();
      }
    }

这样是我们以前正常的写法,这样的写法有一个弊端,就是在service 实现的时候用户的创建是写死的如果Dao层也有多个实现类的话,这样我们在创建的时候,就会有很大的局限性,比如

 

在这个Dao接口有多个实现,我们在执行方法的时候需要修改创建对象的代码

而我们可以在ServiceImpl中采用一个set方法,来实现对不同用户的执行

public class UserServiceImpl implements UserService{
  private UserDao userDao=null;

   public void setUserDao(UserDao userDao) {
       this.userDao = userDao;
  }

   @Override
   public void getUser() {
       userDao.getUser();
  }
}

这样,我们只需要在测试类中加上一个

public class Test {
   public static void main(String[] args) {
       UserServiceImpl userService = new UserServiceImpl();
       userService.setUserDao(new UserDaoImpl());
       userService.getUser();
  }
}

就可以实现不同实现的调用,两种方法,都是做了一样的事情,但是本质上的区别,第一种实例化对象是由系统决定的,而第二种,利用了传递参数的形式来实例化对象,这这种创建对象的方式是由使用程序的人来决定创建那个对象,这就是控制反转。通过这个简单的set方法将程序主动创建对象,转变为程序被动创建对象

控制反转的引入,大大降低了程序的耦合性

 

2.2、IOC本质

控制反转IoC(Inversion of Control),是一种设计思想DI(依赖注入)是实现IoC的一种方法,也有人认为DI只是IoC的另一种说法。没有IoC的程序中 , 我们使用面向对象编程 , 对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,个人认为所谓控制反转就是:获得依赖对象的方式反转了。

控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI)。

2.3、IOC容器

 

2.4、HelloSpring

首先建一个类

public class Hello {
   private String str;

   public String getStr() {
       return str;
  }

   public void setStr(String str) {
       this.str = str;
  }

   @Override
   public String toString() {
       return "Hello{" +
               "str='" + str + '\'' +
               '}';
  }
}

接下来,在resource下创建一个Beans.xml文件

然后去Spring官网,找到配置文件的头

<?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
       https://www.springframework.org/schema/beans/spring-beans.xsd">

   <bean id="..." class="...">  
       <!-- 这个bean的合作者和配置在这里 -->
   </bean>

   <bean id="..." class="...">
       <!-- c这个bean的合作者和配置在这里 -->
   </bean>

   <!-- 更多bean 定义在这里 -->

</beans>

我们在这里采用Bean标签,来实现类的托管 在配置文件中配置好类的Bean 之后

我们只需要在测试类里面去拿到容器

ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
//这个方法,可以传递多个参数,来读取多个配置文件

测试类

public class MyTest {

   public static void main(String[] args) {
       ApplicationContext applicationContext = new ClassPathXmlApplicationContext("Beans.xml");

       HelloSpring hello = (HelloSpring) applicationContext.getBean("Hello");

       System.out.println(hello.getStr());


  }
}

这里要注意、Spring最新版本6.xx版本,对JavaJdk的要求是最低是17,如果使用Java8版本就会出现错误,如果jdk是8版本的可以使用spring5以下的版本

标签:userDao,String,void,getUser,str,IOC,public
From: https://www.cnblogs.com/AnJiaYu/p/17659921.html

相关文章

  • SpringIOC、SpringMVC
    SpringIOCSpringIOC(InversionofControl,控制反转)是Spring框架的核心功能之一。它是一种设计模式,用于实现松耦合和可维护的应用程序。在传统的应用程序开发中,对象之间的依赖关系通常由对象自己创建和管理。这种方式导致了高度耦合和难以维护的代码。而SpringIoC通过将对象的......
  • IOC容器
    namespaceFeng.FramWorkDesign{publicclassIOCContainer{privateDictionary<Type,object>mInstance=newDictionary<Type,object>();publicvoidRegister<T>(Tinstance){varkey=typeof(T);......
  • 字符设备驱动-13.ioctl命令详解
    1引入ioctl一个字符设备驱动通常会实现设备打开、关闭、读、写等功能,在一些需要细分的情境下,如果需要扩展新的功能增添命令,通常以增设ioctl()命令的方式实现。对于ioctl这个系统调用接口,Linux的创始人在2.0版本之前并没有进行添加,仅有write和read两个接口,但是后来发现当需要......
  • Spring中ioc的优点
    Spring中IOC(InversionofControl,控制反转)的优点包括:降低了代码的耦合度:通过IOC容器管理对象的创建和依赖关系的注入,使得对象之间的关系更加松散,减少了代码的耦合度,提高了代码的可维护性和可测试性。提供了更好的扩展性:IOC容器可以通过配置文件或注解来管理对象的创建和依赖关系的......
  • Prism IoC 依赖注入
    现有2个项目,SinglePageApp是基于Prism创建的WPF项目,框架使用的是Prism.DryIoc,SinglePageApp.Services是C#类库,包含多种服务,下面通过使用Prism中的依赖注入方式,将自定义的服务注册到SinglePageApp项目中。 1.认识Prism中的依赖注入Prism项目中的App继承于PrismAppl......
  • Spring源码学习笔记13——总结篇, 从IOC到AOP
    系列文章目录和关于我零丶序言在《Spring源码学习笔记12——总结篇,IOC,Bean的生命周期,三大扩展点》中,我们总结了SpringIOC部分的知识,为了更好的给群里的伙伴们分享SpringAOP的知识,遂有了这篇文章,这篇文章将从IOC聊到AOP,其中IOC不会那么细致,重点还是在AOP。一丶引入1.AOP概述......
  • IOC控制反转
    IOC控制反转,是一种程序设计思想。在了解IOC控制反转我们首先先了解以下几个概念1、理解DIP(依赖反转原则)2、理解DI设计模式2、DI(依赖注入)3、IOC容器一、环境讲解首先我们要先理解其中我们的IOC、和DIP只是一种编程中的原则,是按照这套原则进行的操作,然后DI(依赖性注入)是我们......
  • IOC和DI
    IOC:控制反转是一种设计原则,把自己创建对象的过程交给Spring容器帮我们创建,在这个过程中常用的注解有4个:@component、@controller、@service、@repository(不常用)对象有两种模式单例,每次的对象都是那一个,完全由Spring容器来全权管理多例,每次都是一个全......
  • IOC(控制反转)
    1、通过下面这个案例来理解IOC这种思想创建一个项目,建一个dao层的包。在包下建立一个UserDao接口,里面写一个方法。再写这个接口的几个实现类,每个实现类中的方法实现不同的效果。建一个service层的包,下面写一个UserService接口,然后写接口实现类,实现类就是调用Dao层的方法(用以下......
  • Net7配置Autofac下IOC中的AOP,以及Autofac的三种生命周期写法
    Net7配置Autofac下IOC中的AOP是分两种,一种是基于接口的,一种是基于实现类的基于接口的好处是简单,但不能有效的控制具体到某个方法。也就是说,只能基于类来做操作,一个类下所有的方法都要接受注册基于实现类的是稍微麻烦一点,生效方法必须改为virtual,但可以实现到具体某个方法的效......