首页 > 其他分享 >【Spring】spring的IoC概念

【Spring】spring的IoC概念

时间:2024-05-25 08:58:33浏览次数:26  
标签:依赖 Spring greeting spring IoC public 注入

1、IoC的基本概念

  • IoC,即控制反转,是一种设计思想,用于降低代码之间的耦合度。在传统的程序设计中,对象的创建和对象之间的依赖关系通常由对象自身来管理。而在IoC思想中,这种控制权被“反转”了,交由一个外部容器(在Spring中就是IoC容器)来管理。
  • IoC也被称为依赖注入(Dependency Injection,DI)。这意味着,对象不再自己查找其依赖或使用工厂模式来创建其依赖,而是由容器负责将这些依赖“注入”到对象中。

2、Spring IoC容器的实现

  • Spring提供了IoC容器的两种实现方式:BeanFactory和ApplicationContext。其中,ApplicationContext是BeanFactory的子接口,提供了更多企业级的功能,如事件传播、资源加载等。在实际开发中,ApplicationContext更为常用。
  • 当应用程序启动时,Spring IoC容器会根据配置文件或注解来创建和管理bean。这些bean之间的依赖关系也由容器来管理。

3、IoC的优点

  • 降低耦合度:通过IoC容器来管理对象之间的依赖关系,可以降低代码之间的耦合度,提高代码的可维护性和可扩展性。
  • 提高开发效率:开发人员无需关心对象的创建和依赖管理,可以专注于业务逻辑的实现,从而提高开发效率。
  • 方便测试:由于对象的创建和依赖关系都由容器来管理,因此可以方便地替换依赖项以进行单元测试或集成测试。

4、Spring IoC的注入方式

Spring IoC支持三种主要的注入方式:构造器注入、setter方法注入和根据注解注入。这些方式可以根据实际需求灵活选择。

4.1构造方法注入

  • 在这种方式中,依赖关系是通过目标类的构造函数传递的。
  • 容器在实例化Bean时,会调用目标类的构造函数,并传入所需的依赖项。
  • 这种方式可以保证依赖项的完整性,使得类在实例化之初就已具备所需的依赖。
  • 构造方法注入比较直观,对象被构造完成后即进入就绪状态,可以立即使用。
// 定义一个服务接口  
public interface GreetingService {  
    String greet();  
}  
  
// 实现服务接口  
public class SimpleGreetingService implements GreetingService {  
    private final String greeting;  
  
    // 使用构造方法进行注入  
    public SimpleGreetingService(String greeting) {  
        this.greeting = greeting;  
    }  
  
    @Override  
    public String greet() {  
        return greeting;  
    }  
}  
  
// Spring配置文件(XML方式)  
<bean id="greetingService" class="com.example.SimpleGreetingService">  
    <constructor-arg value="Hello, World!"/>  
</bean>

或者使用Java配置类

@Configuration  
public class AppConfig {  
    @Bean  
    public GreetingService greetingService() {  
        return new SimpleGreetingService("Hello, World!");  
    }  
}

4.2setter方法注入

  • 容器实例化Bean之后,会调用该Bean的setter方法来注入依赖。
  • 需要在类中提供对应的setter方法,以便容器可以调用并注入依赖。
  • 这种方式相较于构造方法注入更加灵活,可以在对象创建后的任意时间点进行依赖注入
public class ComplexGreetingService implements GreetingService {  
    private String greeting;  
  
    public void setGreeting(String greeting) {  
        this.greeting = greeting;  
    }  
  
    @Override  
    public String greet() {  
        return greeting;  
    }  
}  
  
// Spring配置文件(XML方式)  
<bean id="complexGreetingService" class="com.example.ComplexGreetingService">  
    <property name="greeting" value="Hello from Setter Injection!" />  
</bean>

或者使用Java配置类

@Configuration  
public class AppConfig {  
    @Bean  
    public GreetingService complexGreetingService() {  
        ComplexGreetingService service = new ComplexGreetingService();  
        service.setGreeting("Hello from Setter Injection!");  
        return service;  
    }  
}

3、注解注入

  • 注解注入即通过注解来指定需要注入的依赖,由Spring容器在运行时自动完成依赖的注入工作。
  • 使用@Autowired注解可以实现自动装配,Spring会自动将匹配的Bean注入到需要的字段、构造函数或setter方法中。
@Service  
public class GreetingController {  
    private final GreetingService greetingService;  
  
    @Autowired // 通过注解进行构造方法注入  
    public GreetingController(GreetingService greetingService) {  
        this.greetingService = greetingService;  
    }  
  
    public String sayHello() {  
        return greetingService.greet();  
    }  
}

或者在字段上使用@Autowired

@Service  
public class GreetingController {  
    @Autowired // 通过注解进行字段注入  
    private GreetingService greetingService;  
  
    public String sayHello() {  
        return greetingService.greet();  
    }  
}

标签:依赖,Spring,greeting,spring,IoC,public,注入
From: https://blog.csdn.net/wosixiaokeai/article/details/139073395

相关文章

  • SpringMVC+MyBatis 开发社交网站-26_实现图书分页查询
    实现图书分页查询imooc-reader项目:webapp\WEB-INF\ftl\management\book.ftl 图书管理页面<scriptsrc="/resources/layui/layui.all.js"></script><script>   vartable=layui.table;//table数据表格对象   var$=layui.$;//jQuery   varedit......
  • SpringMVC+MyBatis 开发社交网站-25_实现图书新增功能
    实现图书新增功能imooc-reader项目:pom.xml<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/mav......
  • 【Spring】SpringMVC基本概念
    1、介绍1.1简介SpringMVC是SpringFramework中的一个模块,它基于Java实现了WebMVC设计模式,用于构建Web应用程序。SpringMVC提供了清晰的职责划分,使得开发者能够更加简洁和直观地开发Web层。1.2优点松耦合:基于Spring框架的依赖注入(DI)和面向切面编程(AOP)等特性......
  • 基于Springboot的在线英语阅读分级平台(有报告)。Javaee项目,springboot项目。
    演示视频:基于Springboot的在线英语阅读分级平台(有报告)。Javaee项目,springboot项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringBoot+Mybatis+Vue+Maven+Layui+Elementui来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构的Web......
  • 基于Springboot的国产动漫网站(有报告)。Javaee项目,springboot项目。
    演示视频:基于Springboot的国产动漫网站(有报告)。Javaee项目,springboot项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringBoot+Mybatis+Vue+Maven+Layui+Elementui来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构的Web系统。界......
  • 基于SpringBoot+Vue的电商应用系统的设计与实现
    摘 要现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本电商应用系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达......
  • 基于spring boot的多维分类的知识管理系统的设计与实现
    摘 要随着国内市场经济这几十年来的蓬勃发展,突然遇到了从国外传入国内的互联网技术,互联网产业从开始的群众不信任,到现在的离不开,中间经历了很多挫折。本次开发的多维分类的知识管理系统有管理员和用户两个角色。管理员可以管理用户信息,知识分类,知识信息等,用户可以查看和下载......
  • 基于springboot+vue的原创歌曲分享平台
    开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9系统展示系统首页用户注册音乐分享个人中心后台登录管理员功能界面用户管理音乐分类管理音乐分享管......
  • Spring6 对 集成MyBatis 开发运用(附有详细的操作步骤)
    1.Spring6对集成MyBatis开发运用(附有详细的操作步骤)@目录1.Spring6对集成MyBatis开发运用(附有详细的操作步骤)每博一文案2.大概的实现步骤概述3.详细实现操作步骤4.Spring配置文件的import,导入外部xml配置5.总结:6.最后:每博一文案理想主义的花终将盛开在浪......
  • SpringMVC接收数据和响应数据
    目录SpringMVC接收数据和响应数据一、SpringMVC介绍1.概念2.核心组件和流程3.SpringMVC快速实操二、接收数据1.访问路径设置2.接收参数三、响应数据1.方法分析2.页面跳转3.返回JSON数据SpringMVC接收数据和响应数据一、SpringMVC介绍1.概念SpringW......