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的生命周期

在这里插入图片描述


参考文章

Python爬虫实战(基础篇)—23—爬取微信小程序<随机目的地旅行>生成随机地址(附GUI版) 爬取微信小程序<随机目的地旅行>生成随机地址 阅读详情

相关推荐

扫地机器人自动回充技术大揭秘:红外、蓝牙、雷达哪种更适合你家?

本文深入解析扫地机器人自动回充技术的三种主流方案:红外、蓝牙和雷达/LiDAR,详细比较它们的原理、优缺点及适用场景。红外技术成本低但易受干扰,蓝牙穿透性好但精度随距离降低,雷达精度最高适合复杂环境。根据户型大小和家居环境,提供选购建议,帮助用户选择最适合自己家庭的自动回充方案。

weixin_29070721的博客 503

什么是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

基于ADRC算法的多旋翼飞行器抗扰动控制实践

本文详细介绍了基于ADRC算法的多旋翼飞行器抗扰动控制实践,通过线性扩张状态观测器(LESO)实时估算风力等扰动,实现提前补偿,显著提升飞行稳定性。文章结合具体案例和工程实现技巧,展示了ADRC在突风条件下的优异表现,为无人机控制提供了高效解决方案。

weixin_29284885的博客 191

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

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

weixin_34162401的博客 649

vasp-自旋轨道耦合(SOC)计算步骤

在VASP中执行自旋轨道耦合(SOC)计算,具体的计算步骤如下: 结构优化获取CONTCAR文件 自洽计算(collinear normal VASP calculations)获取IBZKPT,CHGCAR和WAVECAR文件。 SCF+SOC计算,在此步骤中,将步骤2中的IBZKPT复制为KPOINTS,以便两个步骤具有相同的k网格,因此可以读取步骤2中的CHGCAR和WAVECAR文件。 能带结构计算,在此步骤中,将KPOINTS改为高对称点,读取步骤3中的CHGCAR和WAVECAR文件。

懒散的鱼与消失的猫 3万+

K-近邻算法: k-nearest neighbor classification (kNN) 详细介绍

@创建于:2020.04.09 @修改于:2020.04.09,2024.06.22 文章目录1、kNN介绍2、k近邻法的三要素详解2.1 距离度量2.2 k值的选择2.3 分类决策规则3、k近邻法的实现:kd树4、Python实现过程5、优缺点6、常见问题 1、kNN介绍 kNN是一个基本而简单的分类算法,作为监督学习,那么KNN模型需要的是有标签的训练数据,对于新样本的类别由与新样本距离最近的k个训练样本点按照分类...

chenhepg的博客 9万+

Java中的SOLID原则及示例

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

javaZhong的博客 1987

【openwrt-21.02】T750 openwrt 双系统说明及切换方法

高度集成的 T750 平台大幅减少组件数量,为产品设计者提供更小的尺寸和更低的功耗。T750 采用先进的 7nm 制程,高度集成 5G 调制解调器和四核 Arm CPU,提供较强的功能和配置,设备制造商得以打造精巧的高性能 CPE 产品,如固定无线接入(FWA)路由器和移动热点。3. preloader 加载并启动 A 系统,若 A 系统的任一启动阶段加载失败,preloader 将重新加载并启动 A 系统 3 次,若 3 次均失败,则自动切换至 B 系统,加载并启动 B 系统。A/B 系统切换流程如下。

wgl307293845的博客 1412

Spring 学习笔记 IOC&DI

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

三五二十五的博客 210

【局部规划模块轨迹优化算法】EM_planner最大期望滚动优化算法

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对EM_planner最大期望滚动优化算法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 759

ASM准入小助手卸载没有密码的方法:读取明文密码2024年7月有效

在一次工作过程中,电脑中意外的安装了一个ASM准入小助手软件,工作结束以后回来发现没有卸载,然后就决定把它卸载掉,但是居然给了我一个大大的提示框:由于联系不到当时给我安装的那个人了,所以一时陷入了焦灼的状态,因为我安装另一个终端准入,会直接提示冲突了。所以经过注册表(regedit)、任务管理器等各种折腾之后,最后都失败了,然后想起了多年前在吾爱论坛学到过的东西,最后意外的找到了密码,然后就完美成功卸载了。

布啦啦 7802

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

new。

wuilwxxxxx的博客 271

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

学习笔记之Spring中的IoC&DI

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

weixin_44247853的博客 166

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

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

Core00077的博客 407

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

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

weixin_30505043的博客 92

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、付费专栏及课程。

余额充值