Spring学习——IOC&DI学习笔记

Spring IoC&DI Spring是什么?IoC&DI是什么?IoC和DI的使用 阅读详情

Spring学习——IOC&DI学习笔记

SOLID:面向对象设计的五个基本原则

  • S:单一职责原则(Single-Responsibility Principle)
    • 定义:对于一个类而言,应该只有一个能够引起它变化的原因,也就是一个类只做一件事
    • 为什么要遵循SPR:
      • 减少类之间的耦合:当需求变化的时候,只修改一个类,从而隔离了变化
      • 提高类的复用性
  • O:开放-封闭原则(Open-Closed Principle)
    • Open for extension:模块的行为是开放的,可扩展的
    • Closed for modification:模块是不可修改的
    • 实现开放封闭原则的核心就是抽象编程,让类依赖于固定的抽象类,所以修改就是封闭的,通过面向对象的继承和多态,可以实现抽象类的继承,所以是可扩展的,开放的
  • L:里氏替换原则(Liskov-Substitution Principle)
    • 定义:子类必须能够替换成它们的父类,并且能够出现在父类能够出现的任何地方,但是父类不一定能替换子类
    • 如何遵循里氏替换原则:
      • 父类的方法都要在子类中实现或者重写,派生类只实现其抽象类中声明的方法,而不应当给出多余的方法定义或实现
      • 在程序中应当只出现父类对象,而不是直接使用子类对象,这样可以实现运行期绑定(多态绑定)
    • 违反了里氏替换原则,就必然会违反开放封闭原则
  • I:接口隔离原则(Interface-Segregation Principle)
    • 定义:避免使用胖接口,应该把胖接口中的方法分组,用多个接口替代它,每个接口服务于一个子模块,也就是说,一个模块不应该依赖于它不需要的接口方法,一个类对另一个类的依赖性应该是建立在最小的接口上的
    • 如果能够隔离接口,那么就不会发生接口污染
    • 接口污染:比如模块A依赖于方法A,模块B依赖于方法B,模块C依赖于方法C,而此时提供服务的抽象类同时包含ABC三个方法,那么模块ABC就同时依赖于同一个服务提供类,如果模块A的服务方法A需要发生改变,此时BC模块也会受到影响
    • 利用委托和多继承分离接口
  • D:依赖倒置原则(Dependency-Inversion Principle)
    • 定义:上层模块不应该依赖于下层模块,它们共同依赖于一个抽象;抽象不能依赖与具体,具体应该依赖于抽象
    • 面向接口编程,而不是面向实现编程
    • 依赖倒置的核心原则就是解耦,SpringIoC容器的核心就是解耦和加载依赖

工厂方法模式

  • 简单工厂模式:负责生产对象的一个类成为工厂类(定义了静态方法创建产品实例)
    • 解决的问题:把类的实例化操作和类的使用操作分离,让使用者不需要知道具体参数就可以实例化出所需要的产品类,避免在客户端中显示指定,实现了解耦
    • 具体实例:
      package org.Pattern;
      
      abstract class Product{
          public abstract void productShow();
      }
      
      class ProductA extends Product{
          @Override
          public void productShow(){
              System.out.println("Product A has been created");
          }
      }
      
      class ProductB extends Product{
          @Override
          public void productShow(){
              System.out.println("Product B has been created");
          }
      }
      
      class SimpleFactory{
          public static Product createProduct(String productName){
              switch (productName){
                  case "A":
                      return new ProductA();
                  case "B":
                      return new ProductB();
                  default:
                      return null;
              }
          }
      }
      
      public class SimpleFactoryPattern {
          public static void main(String[] args) {
              SimpleFactory simpleFactory=new SimpleFactory();
              try{
                  simpleFactory.createProduct("A").productShow();
              }catch (NullPointerException e){
                  System.out.println("There is no product A");
              }
      
              try{
                  simpleFactory.createProduct("B").productShow();
              }catch (NullPointerException e){
                  System.out.println("There is no product B");
              }
      
              try{
                  simpleFactory.createProduct("C").productShow();
              }catch (NullPointerException e){
                  System.out.println("There is no product C");
              }
          }
      }
      
      
    • 问题:
      • 工厂类集中了所有实例的创建,一旦不能工作整个系统都会瘫痪
      • 违背了开放关闭原则,一旦添加新产品就要修改工厂类的逻辑
      • 采用静态方法创建实例,无法被继承和重写
  • 工厂方法模式
    • 定义:在简单工厂模式的基础上,使用公共接口作为工厂父类,工厂子类负责创建具体类的对象

    • 解决了简单工厂模式的违背开放关闭原则的问题

    • 工厂方法模式的类图如下:

      在这里插入图片描述

    • 代码如下:

      package org.Pattern;
      
      abstract class FactoryPatternProduct{
          public abstract void show();
      }
      
      abstract interface FactoryPatternFactory{
          public abstract FactoryPatternProduct create();
      }
      
      class AProduct extends FactoryPatternProduct{
      
          @Override
          public void show() {
              System.out.println("Product A has been created.");
          }
      }
      
      class BProduct extends FactoryPatternProduct{
      
          @Override
          public void show() {
              System.out.println("Product B has been created");
          }
      }
      
      class AFactory implements FactoryPatternFactory{
      
          @Override
          public FactoryPatternProduct create() {
              return new AProduct();
          }
      }
      
      class BFactory implements FactoryPatternFactory{
      
          @Override
          public FactoryPatternProduct create() {
              return new BProduct();
          }
      }
      
      public class FactoryPattern {
          public static void main(String[] args) {
              AFactory aFactory=new AFactory();
              BFactory bFactory=new BFactory();
      
              FactoryPatternProduct aProduct=aFactory.create();
              FactoryPatternProduct bProduct=bFactory.create();
      
              aProduct.show();
              bProduct.show();
          }
      }
      
      
  • Spring底层如何使用工厂方法模式
    • FactoryBean可以被认为是抽象工厂类,FactoryBean是一个抽象接口,其定义了一个接口:getObject(),
      public interface FactoryBean<T> {
      T getObject() throws Exception;
      
      Class<?> getObjectType();
      
      boolean isSingleton();
      
    }
    ```
    • AbstractFactoryBean是一个抽象类(也可认为AbstractFactoryBean是Spring底层的抽象工厂类),其实现了FactoryBean接口,这个抽象类中的getObject方法返回了Bean实例
      public final T getObject() throws Exception {
          if (this.isSingleton()) {
              return this.initialized ? this.singletonInstance : this.getEarlySingletonInstance();
          } else {
              return this.createInstance();
          }
      }
      
    • 在创建Bean实例时,如果不是单例模式,则调用了createInstance()方法,这是一个抽象方法,在继承了AbstractFactoryBean的具体类中进行实现,比如MapFactoryBean就是一个具体工厂类

IoC容器

  • 容器:为某种特定组件的运行提供必要支持的一个软件环境

  • IoC思想:Inversion of Control 控制反转。传统的资源查找方式是组件向容器发起请求,容器查找资源并返回资源。IoC思想要求容器主动将资源推送给所管理的组件,组件只需要采用一种合适的方式来接收资源。这主要是一种解耦合的思想。

  • 依赖注入DI(Dependency Injection):依赖注入可以理解为IoC思想的一种实现方式,组件可以以一些预定义的方式接受来自容器的资源注入。

  • 举个例子来说明IoC和DI:

    • 现在我们有两份代码:myApp.jar和lib.jar,myApp.jar实现了项目的主要逻辑,lib.jar中定义了一个接口Person和该接口的实现类Student和Teacher,如下图:

    在这里插入图片描述

    • 上图中,myApp.jar中new了一个Student对象出来,也就是说myApp.jar把Student的实例注入到了对象p中。我们可以发现,上图中的依赖注入方式(也就是通过new一个对象来实现依赖注入)是强耦合的,如果有一天我们不再需要Student类了,那么我们还需要在myApp.jar中修改相应的代码,这显然不符合开放关闭原则,如果引入Spring中的IoC机制就可以很好的实现解耦:

    在这里插入图片描述

    这样,我们只需要通过修改xml文件中相应的配置就可以在myApp.jar中移除Student对象的注入,实现了解耦。

  • IoC容器:

    • Spring提供了两种IoC容器:BeanFactory和ApplicationContext,其中BeanFactory是ApplicationContext的子类
    • BeanFactory:
      • BeanFactory是Spring最底层的接口,包含了Bean的定义,读取bean配置文档,管理bean的加载、实例化,控制bean的生命周期,维护bean之间的依赖关系。
      • BeanFactory 是初始化 Bean 和调用它们生命周期方法的“吃苦耐劳者”。注意,BeanFactory 只能管理单例(Singleton)Bean 的生命周期。它不能管理原型(prototype,非单例)Bean 的生命周期。这是因为原型 Bean 实例被创建之后便被传给了客户端,容器失去了对它们的引用。
    • ApplicationContext是在BeanFactory的基础上实现的,在BeanFactory所支持的功能基础上扩展支持了其他功能,比如资源访问、事件传递、Bean的自动装配、各种不同应用层的Context实现
    • BeanFactory和ApplicationContext的区别:
      • BeanFactory采用延迟加载的形式来注入Bean,只有在getBean()的时候才对该Bean进行加载实例化;ApplicationContext在容器启动的时候一次性创建了所有的Bean(单例Bean),这样的好处就是在容器启动的时候就可以发现配置上的错误,但是占用内存空间较大。
      • BeanFactory通常以编程的方式被创建,ApplicationContext还能以声明的方式创建,如使用ContextLoader。
      • BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用,但两者之间的区别是:BeanFactory需要手动注册,而ApplicationContext则是自动注册。
    • 使用BeanFactory获取Bean:
      BeanFactory factory = new XmlBeanFactory("XXX.xml");
      factory.getBean("xxxx");
      
    • ApplicationContext:
      • ClassPathXmlApplicationContext:从类路径下的XML配置文件加载上下文定义,把应用上下文当作类资源

      • FileSystemXmlApplicationContext:读取文件系统下的XML文件配置加载上下文定义

      • XmlWebApplicationContext:读取Web应用下的XML配置文件加载上下文定义

      • 举个例子:

        实现代码:

        • IUserDao接口:
          package org.IoCExample;
          
          public interface IUserDao{
              public void FindUserAge();
          }
          
        • IUserService接口:
          package org.IoCExample;
          
          public interface IUserService {
              public void login();
          }
          
        • UserDaoImplement:
          package org.IoCExample;
          
          public class UserDaoImplement implements IUserDao{
          
              @Override
              public void FindUserAge() {
                  System.out.println("UserDaoImplement的FindUserAge方法被调用");
              }
          }
          
        • UserServiecImplement:
          package org.IoCExample;
          
          public class UserServiceImplement implements IUserService{
              private IUserDao userDao;
          
              //当Spring框架创建UserDaoImplement对象之后,通过setUserDao给私有成员userDao赋值,注意,xml文件中property中的name要和此处相对应
              public void setUserDao(IUserDao userDao){
                  this.userDao=userDao;
              }
          
              public IUserDao getUserDao(){
                  return this.userDao;
              }
          
              @Override
              public void login() {
                  System.out.println("UserServiceImplement的login方法被调用");
                  userDao.FindUserAge();
              }
          }
          
          
        • IoCTest:
          package org.IoCExample;
          
          import org.springframework.context.ApplicationContext;
          import org.springframework.context.support.ClassPathXmlApplicationContext;
          
          public class IoCTest {
              public static void main(String[] args) {
                  ApplicationContext applicationContext=new ClassPathXmlApplicationContext("org/IoCExample/applicationContext.xml");
          
                  /*
                  // 根据bean的class类型从IoC容器中获取bean对象
                  IUserService userService=applicationContext.getBean(UserServiceImplement.class);
                  userService.login();
                  */
          
                  /*
                  // 根据bean的id从IoC容器中获取bean对象
                  IUserService userService=(IUserService)applicationContext.getBean("UserService");
                  userService.login();
                  IUserService userService=applicationContext.getBean("UserService", IUserService.class);
                  userService.login();
                  */
          
              }
          }
          
        • 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"
              xmlns:aop="http://www.springframework.org/schema/aop"
              xsi:schemaLocation="http://www.springframework.org/schema/beans
                  http://www.springframework.org/schema/beans/spring-beans.xsd
                  http://www.springframework.org/schema/aop
                  http://www.springframework.org/schema/aop/spring-aop.xsd">
          
              <bean id="userDao" class="org.IoCExample.UserDaoImplement"></bean>
              <bean id="UserService" class="org.IoCExample.UserServiceImplement">
                  <property name="userDao" ref="userDao"></property>
              </bean>
          
          </beans>
          
    • bean标签:
      • 作用:配置托管给spring的对象,默认情况下调用类的无参构造函数,如果没有无参构造函数则不能成功
      • 属性:
        • id:指定对象在容器中的标识,将其作为参数传入到getBean()方法中可以获取对应的对象
        • class:指定类全类名,默认情况下调用无参构造函数
        • scope:指定对象的作用范围,可选值如下:
          • singleton:单例对象,默认值
          • prototype:多例对象
          • request:将对象存入到web项目的request域中
          • session:将对象存入到web项目的session域中
          • global session:将对象存入到web项目集群的session域中,若不存在集群,则global session相当于session
        • init-method:指定类中的初始化方法名称,在对象创建成功之后执行
        • destroy-method:指定类中销毁方法名称,对prototype多例对象没有作用,因为多利对象的销毁时机不受容器控制

Spring中Bean的生命周期

在这里插入图片描述


参考文章

高通平台开发系列讲解(USB篇)MBIM协议详解 📢本文主要介绍高通平台USB网卡MBIM协议。 阅读详情

相关推荐

LLM之RAG实战(五十四)| 复杂文档处理RAG框架:Ragflow

RAGFlow 是一种结合了检索增强(Retrieval-Augmented Generation,RAG)与流程控制(Flow)的人工智能技术架构。它通过检索外部知识库中的信息,结合自然语言生成技术,为用户提供更准确、更丰富的回答。同时,它还引入了流程控制机制,能够根据任务需求动态调整信息检索和生成的流程,从而更好地完成复杂的任务。RAGFlow 的核心优势在于将检索和生成相结合,打破了传统生成模型仅依赖内部参数进行文本生成的局限。

wshzd的博客 1066

什么是SOLID

S.O.L.I.D是面向对象设计和编程(OOD&OOP)中几个重要编码原则(Programming Priciple)的首字母缩写。SRP The Single Responsibility Principle 单一责任原则 OCP The Open Closed Principle 开放封闭原则 LSP The Liskov Substitution Principle 里氏替换原则

我给媳妇儿讲java 5282

储能BMS三级架构解析:从模组到堆的管理与控制

本文深入解析了储能电池管理系统(BMS)的核心三级架构,即电池模组管理层(BMU)、电池簇管理层(BCMU)和电池堆管理层(BAMS)。文章详细阐述了各级的职能分工与协同机制,从底层数据采集、均衡管理,到中层信息汇总与安全控制,再到顶层的系统总控与对外通信,揭示了该架构如何实现大规模储能电池的精细化、安全与高效管理。

ik678901234的博客 471

程序员该有的艺术气质—SOLID原则

      昨天Amazon在我们学校有场讲座,主要是跟我们分享一些经验:作为一个程序员该有的编码硬技术和工作软技术。当然他们也有来我们学校招聘人才的目的,想要吸引我们去他们公司,于我而言,这么牛逼的一个公司我当然特别想去啦,这场讲座我是必听无疑,的确学到了一些知识。没有过实际项目的在校生往往不能写出漂亮的代码(包括编码规范、注释、设计模式、性能等等),因为他们更多注重的正确性,只要结果出来了且是...

weixin_34162401的博客 649

保姆级教程:用Zemax 18.9复现单模光纤耦合仿真(附康宁SMF-28e参数)

本文提供了一份详细的Zemax 18.9单模光纤耦合仿真教程,以康宁SMF-28e为例,涵盖从软件设置、材料参数输入到系统构建和优化的全流程。通过光束耦合分析和物理光学传播(POP)技术,帮助用户准确模拟光纤耦合效率,并解决常见问题,适用于光学设计初学者和专业人士。

weixin_27330481的博客 312

用Python爬虫抓取大宗交易成交数据:全面解析与实战代码

大宗交易是指在证券市场中,涉及大额买卖的交易。此类交易通常由机构投资者进行,其交易量较大,对市场的影响显著。大宗交易数据包含了买卖双方的成交价格、成交量等关键信息,这些数据对于投资者和分析师而言,具有重要的市场预测意义。Python爬虫是一种自动化抓取互联网上数据的工具。通过爬虫,我们可以定期获取大宗交易数据,节省人工查询的时间。爬虫的工作原理通常包括:发送HTTP请求、获取响应数据、解析网页内容、提取关键信息、存储和展示数据。

2201_76125261的博客 417

Java中的SOLID原则及示例

类是任何Java应用程序的构建块。如果这些区块不强,那么建筑(即应用)将来将面临艰难时期。这实际上意味着,当应用程序范围上升或应用程序在生产或维护中面临某些设计问题时,不那么好的编写会导致非常困难的情况。 另一方面,一组精心设计和编写的类可以加速编码过程的突飞猛进,同时减少错误的数量。 在本教程中,我们将使用 5个最推荐的设计原则的示例来讨论Java中的SOLID原则,在编写类时我们应该记住这...

javaZhong的博客 1987

项目介绍 MATLAB实现基于LSTM-XGBoost长短期记忆网络(LSTM)结合极端梯度提升(XGBoost)进行多变量时序预测的详细项目实例(含模型描述及部分示例代码)

本项目基于MATLAB平台,实现LSTM-XGBoost混合模型进行多变量时序预测。通过LSTM网络自动提取时序特征,结合XGBoost强大的回归能力,有效解决多变量时序数据的高维复杂性、长短期依赖捕捉等难题。项目包含完整的数据预处理流程、模型构建与训练方法,以及性能评估指标。提供的GUI界面支持参数调整、训练监控和结果可视化,适用于能源、金融、气象等多领域预测任务。配套代码详细注释,便于理解模型实现细节,为时序预测研究提供实用参考框架。

优质创作者: 人工智能技术领域 对于有一定基础的 MATLAB和Python带具体需求都可以详谈 MATLAB和Python可以提供代码调试服务加油 谢谢 你的鼓励是我前行的动力 谢谢支持 加油 谢谢 101

Spring 学习笔记 IOC&DI

一.IOC IOC—Inversion of Control,即“控制反转”,是一种设计思想。在Java开发中,Ioc意味着对象的产生由容器控制。 DI—Dependency Injection,即“依赖注入”:组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。是实现IOC的方式。 1.DI方式 1.1 set()方法: <bean id=...

三五二十五的博客 210

《一》:LBE,VR 大空间系列——场景环境需求解析

当前,大量 VR 体验活动在室内场地开展。因此,对于场地照明有特定要求:除天花板外,场地的所有表面均需有照明覆盖。这是为了保证玩家无论处于场地的哪个位置,地面与墙面都不会出现明显的影子。场地内不建议安装射灯或高强度的点光源,若已安装此类灯具,需使用柔光板进行遮盖。此外,要避免在阳光下使用 VR 设备台。参考图(请忽略其中Maker标签)

unitygroup的博客 942

YOLOv8【第十章:多任务扩展深度篇·第1节】YOLOv8-Seg 实例分割:Mask原型生成与系数预测原理解析!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 1806

Spring IoC&DI 入门案例学习笔记

new。

wuilwxxxxx的博客 271

leetcode134 加油站

题目如下 在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。 说明: 如果题目有解,该答案即为唯一答案。 输入数组均为非空数组,且长度相同。 输...

ayang818 's blog 233

学习笔记之Spring中的IoC&DI

    Spring是为了降低企业级应用开发复杂性而开发的框架,IoC控制反转和DI依赖注入是Spring的核心部分。 IoC:控制反转     IoC其实是一种思想,让我们从繁琐的对象交互中解脱出来,更注重于对象本身。就是把创建对象和管理对象依赖关系的权力交给IoC容器管理,这种控制权的转移被形象的称为控制反转。 DI:依赖注入     依赖注入是指Spring 创建对象的过程中,将对象依赖属性...

weixin_44247853的博客 166

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

[spring学习笔记-01]IOC&DI概述

前言 没什么好说的 引一句话: 你是你自己最大的倚仗。 正文 IOC(Inversion of Control) 控制反转 核心思想是:反转资源获取的方向。 容器主动的将资源推送给它所管理的组件。组件只需要选择一种合适的方式来接受资源。 引用视频里的例子来讲: 以前要买菜,你得上街去买,IOC的思想则是你在院子里放个框,菜会自己蹦进来。 其实很好理解,...

Core00077的博客 407

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Spring框架学习笔记(2)——IOC&DI

IOC:控制反转,创建对象的权利交给Spring,Spring会自动创建对象。 DI:依赖注入,操作的对象靠Spring注入,如果不使用Spring,对象的属性值是要靠setter方法来添加的,使用Spring可以由Spring在创建对象的时候为对象的属性赋值。 转载于:https://www.cnblogs.com/huangjian2/p/6101762.html...

weixin_30505043的博客 92

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Spring4学习笔记(二):IOC&DI概述

IOC(Inversion of Control):其思想是反转资源获取的方向. 传统的资源查找方式要求组件向容器发起请求查找资源. 作为回应, 容器适时的返回资源. 而应用了 IOC 之后, 则是容器主动地将资源推送给它所管理的组件, 组件所要做的仅是选择一种合适的方式来接受资源. 这种行为也被称为查找的被动形式 DI(Dependency Injection) — IOC 的另一种表述方式:即

h 467

Spring 学习笔记 2. 尚硅谷_佟刚_Spring_IOC&DI概述

1,远古时代 这里讲述的IOC的演变历史,举一个例子,假如需要生成HTML和PDF格式的报表,以前的开发方式就是有个报表服务类需要使用报表生成器 它需要和其他三个都关联,它既需要知道接口类型,也需要知道具体有哪些实现类。而且还可能需要知道如何创建实现类的对象。这种是耦合度最高的方式,它需要知道接口和其实现类的细节。 举个例子,在远古时代,一个人想制造一把斧子,不仅自己要想出斧子的形状,还要亲自...

weixin_30438813的博客 131

【Java Web】学习笔记

JavaWeb笔记

2402_84949062的博客 1607

2.Spring学习笔记_IOC&DI概述(by尚硅谷_佟刚)

一、IOC和DI的概念 IOC(Inversion of Control):其思想是反转资源获取的方向. 传统的资源查找方式要求组件向容器发起请求查找资源. 作为回应, 容器适时的返回资源. 而应用了 IOC 之后, 则是容器主动地将资源推送给它所管理的组件, 组件所要做的仅是选择一种合适的方式来接受资源. 这种行为也被称为查找的被动形式 DI(Dependency Injection) —

无尾鱼的博客 538

学习笔记(02):国内第1套_Spring4 视频教程-佟刚_Spring_IOC&DI;概述

Spring4.0是 Spring 推出的一个重大版本升级,进一步加强了 Spring 作为 Java 领域第一开源平台的地位。Spring4.0 引入了众多 Java 开发者期盼的新特性,如泛型依赖注入、SpEL、校验及格式化框架、Rest风格的 WEB 编程模型等。...

weixin_43538368的博客 257

【学习】Spring IoC&DI

Spring IoC 和 DI 的使用

m0_0 2152

【Spring】Ioc&DI

在 Java 开发的世界里,Spring 框架无疑是一颗璀璨的巨星,而其中的控制反转(Inversion of Control,简称 Ioc)和依赖注入(Dependency Injection,简称 DI)更是其核心特性之一。今天,就让我们一起深入探索 Spring 中的 Ioc 和 DI。

2302_79806056的博客 4536

spring IoC&DI

就是对象交给spring来创建 在上面加上Component的意思是,这个类可以交给spring自己来创建 现在service和dao都交给spring来创建了 怎么取出来呢 在成员上面加上Autowired,就可以让spring自己来创建了这样我们就不用new了 spring就帮我们new完了 如果没有new的话,就是null的 这样就可以运行了不加Component的话都启动不起来,因为没有加入spring 不加Autowired的话就会报错,因为为null有了controller,spring就会

ck的博客 880

Spring ioc&DI

我们上面说了五大类注解,但是类注解存在两个问题:1.如果我们使用外部包中的类,没办法添加类注解2.一个类,如果需要多个对象,那就需要用到我们的方法注解我们先来看如何去使用我们会发现报错了,找不到这个类型的bean,这是因为spring根本没有去看我们加载了@Bean注解的这个类,因为我们进程中有很多的类,有内部的有外部的,Spring不可能把所有的都加载一遍,所以他只会把添加了五大注解的类,存储到spring容器中我们发现为什么我这次使用了类注解,也报错了啊。

huapiaoy的博客 1873

【Spring】详解Spring IOC&DI

在前面中,我们讲解了Spring MVC是什么以及如何使用。那么本篇我们就来讲Spirng Framework,我们一般讲的Spring就指的是Spring Framework。在前面中,我们已经讲解了什么是Spring,IOC和AOP是Spring框架的核心思想。本篇我们主要讲IOC容器的使用。想了解什么是Spirng可以看这篇【Spring】什么是Spring?-优快云博客回顾一下IOC和DI。IOC(控制反转)是Spring框架中的核心思想。

zhyhgx的博客 2246
上一篇: NOIP 2008 双栈排序 二分图
NeighThorn
博客等级 码龄11年 20粉丝 171原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值