spring IOC控制反转原理详解

目录
  • IOC概念
    • 补:工厂模式和单例模式区别
  • IOC接口——实现IOC容器
    • 1.BeanFactory
    • 2.ApplicationContext
  • IOC操作管理Bean
    • xml配置bean
      • 工厂Bean和普通Bean
    • 注解配置bean
      • 注册Bean
      • 使用Bean
  • Bean的配置
    • 作用域:如何设置bean的单例or多例
    • 生命周期:创建到销毁
  • Bean扫描
  • 总结

IOC概念

  • 定义:控制反转,把对象的创建和调用(传统方式是通过new之后直接使用对象),交给Spring进行管理(依靠对象工厂通过注入的方式获取对象)
  • 降低耦合度
  • 底层原理:xml解析、工厂模式、反射

补:工厂模式和单例模式区别

单例模式(懒汉式,饿汉式)都只能创建一个指定类的唯一对象

工厂模式(一个接口,多态性的体现)可以创建该接口的工厂下的所有类的唯一对象

IOC接口——实现IOC容器

IOC容器可以有多个,new几个就有几个IOC容器,一个容器绑定一个xml文件,一个xml中可以配置多个bean,容器可以关闭

1.BeanFactory

  • Spring的内部接口,不建议开发者使用
  • 懒汉式,加载配置文件的时候不创建对象

2.ApplicationContext

  • BeanFactory的子接口
  • 功能更强大,建议开发者使用
  • 饿汉式,加载配置文件即创建对象
  • 由于创建对象会耗费时间和资源,因此饿汉式可以把时间开销放在项目启动时

第三个是基于注解的获取容器方式,利用反射而非解析xml配置

SpringBoot中获取ApplicationContext的三种方式

1.@Autowired: 在任意被spring托管的类中注入

2.ApplicationContextAware接口:实现这个接口可以在普通类中获取Spring的IOC容器

IOC操作管理Bean

xml配置bean

在bean.xml中配置了bean的属性后,先解析xml得到IOC接口对象(IOC容器),然后通过容器来getBean,获得对象

同时,ApplicationContext也可以换成其父接口BeanFactory,结果不受影响

DI:依赖注入(注入属性)

两种方法

set方法+property

有参构造+constructor

工厂Bean和普通Bean

注解配置bean

注册Bean

以下5个注解都可以创建Bean对象交给Spring的IOC容器进行管理

  • @Component:以下4个的元注解
  • @Service
  • @Controller
  • @Repository
  • @Configuration

因为元注解Component可以指定value=“别名”,所以以上5种注册Bean的方式都可以起别名,一个接口多个实现类Bean的情况需要起别名,否则Spring无法判断获取哪个Bean

使用Bean

  • @Autowired:根据自动装配
  • @Qualifier:根据别名装配,要和@Autowired搭配使用
  • @Resource:即可根据类也可根据别名
  • @Value:注入普通类型属性

Bean的配置

作用域:如何设置bean的单例or多例

scope属性值:(常用singleton和prototype)

  • singleton:默认值,单例对象,饿汉式
  • prototype:多实例对象,懒汉式
  • request请求、session会话:不常用

在bean.xml中或者@Bean(scope="")中配置

生命周期:创建到销毁

1.无参构造

2.调用set方法解析配置

3.调用bean的初始化方法

如果有配置了初始化方法,需要配置init-method=“初始化方法的名称”

例如:在@Bean(initmethod=“xxx方法”)

4.获取bean并使用

注解方法可以直接@Autowired注入bean,配置xml的方式通过

new ClassPathXmlApplicationContext(xxxx.xml)解析并获取IOC容器之后getBean

5.bean的销毁与销毁时方法

springboot中的bean创建与销毁

销毁方法的配置@Bean(destroyMethod = “xxxxx”)

如果是配置在xml中,则

<bean id="  " class="   " destroy-method="   "></bean>

xml配置的Bean的关闭:关闭IOC容器即可

Bean扫描

spring中xml配置

spring和springboot中的注解配置

@ComponentScan

  • 被Component及其子注解标注的Bean需要用ComponentScan扫描到才能使用
  • SpringBootApplication启动类包括了@ComponentScan
  • @ComponentScan默认扫描该类包下的所有Bean
  • @ComponentScan可以自定义basePackages、includeFilters、excludeFilters

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • spring中IOC控制反转依赖注入和new对象的区别说明

    目录 IOC控制反转依赖注入和new对象的区别 new对象 依赖注入 spring的IOC容器比New对象究竟好在哪 IOC控制反转依赖注入和new对象的区别 spring默认是单例模式的,依赖注入其中操作的都是一个对象 new对象 单例中如果要做到注入的效果就是在类的头部进行实例化对象,这个时候该对象不管使用与否都贯穿该类的始终.该类对象不被回收,这个实例化对象也不会被回收,因为存在引用状态.如果要使用多例对象则最好使用new创建对象而不是依赖注入,即使依赖注入有多例模式也不推荐. 依赖注入:

  • 浅析springboot通过面向接口编程对控制反转IOC的理解

    IoC是什么 Ioc-Inversion of Control,即"控制反转",不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制.如何理解好Ioc呢?理解好Ioc的关键是要明确"谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了",那我们来深入分析一下: ●谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象

  • Spring.Net控制反转IoC入门使用

    Spring.Net包括控制反转(IoC) 和面向切面(AOP),这篇文章主要说下IoC方面的入门. 一.首先建立一个MVC项目名称叫SpringDemo,然后用NuGet下载spring(我用的是Spring.Net NHibernate 4 support) 二.类设计,在Models文件夹下面建立类,主要IUserInfo,UserInfo,Order 三个类代码如下: public interface IUserInfo { string ShowMeg(); } public clas

  • Spring的IOC控制反转详解

    目录 1.什么是 IOC? 2.分享Bromon的blog上对IoC与DI浅显易懂的讲解 3.Spring 容器创建对象的三种方式 第一种方法:利用默认的构造方法 第二种方法:利用静态工厂方法 第三种方法:利用实例工厂方法 4.Spring 容器创建对象的时机 第一种:默认情况下,启动 spring 容器便创建对象(遇到bean便创建对象) 第二种:在spring的配置文件bean中有一个属性 lazy-init="default/true/false" 5.spring的bean中的

  • Java Spring 控制反转(IOC)容器详解

    目录 什么是容器? 无侵入容器 IOC控制反转 IOC理论推导 传统应用程序开发的弊端 "注入"机制 小结 IOC本质 DI(依赖注入) 总结 IoC 容器是 Spring 的核心,也可以称为 Spring 容器.Spring 通过 IoC 容器来管理对象的实例化和初始化,以及对象从创建到销毁的整个生命周期. Spring 中使用的对象都由 IoC 容器管理,不需要我们手动使用 new 运算符创建对象.由 IoC 容器管理的对象称为 Spring Bean,Spring Bean 就是

  • spring IOC控制反转原理详解

    目录 IOC概念 补:工厂模式和单例模式区别 IOC接口——实现IOC容器 1.BeanFactory 2.ApplicationContext IOC操作管理Bean xml配置bean 工厂Bean和普通Bean 注解配置bean 注册Bean 使用Bean Bean的配置 作用域:如何设置bean的单例or多例 生命周期:创建到销毁 Bean扫描 总结 IOC概念 定义:控制反转,把对象的创建和调用(传统方式是通过new之后直接使用对象),交给Spring进行管理(依靠对象工厂通过注入的方

  • Spring框架IOC容器底层原理详解

    目录 1.什么是IOC 2.IOC容器的底层原理 3.那么上边提到的三种技术如何实现IOC的呢 4.IOC(接口) 1.什么是IOC IOC – Inverse of Control,控制反转,将对象的创建权力反转给Spring框架! 在java当中一个类想要使用另一个类的方法,就必须在这个类当中创建这个类的对象,那么可能会出现如下情况, 比如A类当中创建着B对象,B类当中有C对象,C类当中有A对象,这个如果一个类出了问题,那么可能会导致这个框架出现问题. Spring 将创建对象的权利给了IO

  • Spring AOP的实现原理详解及实例

    Spring AOP的实现原理详解及实例 spring 实现AOP是依赖JDK动态代理和CGLIB代理实现的. 以下是JDK动态代理和CGLIB代理简单介绍 JDK动态代理:其代理对象必须是某个接口的实现,它是通过在运行期间创建一个接口的实现类来完成对目标对象的代理. CGLIB代理:实现原理类似于JDK动态代理,只是它在运行期间生成的代理对象是针对目标类扩展的子类.CGLIB是高效的代码生成包,底层是依靠ASM(开源的Java字节码编辑类库)操作字节码实现的,性能比JDK强. 在Spring中

  • Spring事件Application Event原理详解

    这篇文章主要介绍了Spring 事件Application Event原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Spring 的事件(Application Event)为 Bean 与 Bean 之间的消息通信提供了支持.当一个 Bean 处理完一个任务之后,希望另一个 Bean 知道并能做相应的处理,这时我们就需要让另一个 Bean 监听当前 Bean 所发送的事件.(观察者模式) Spring 的事件需要遵循以下流程: 自定

  • Java反射机制在Spring IOC中的应用详解

    目录 Java反射机制在Spring IOC的应用 下面是Spring通过配置进行实例化对象 Spring的配置如下所示 实现一下Spring底层处理原理 反射机制.反射机制的作用.反射机制的功能 1.反射机制的作用 2.Java反射机制的功能 3.反射机制相关的重要的类有哪些? Java反射机制在Spring IOC的应用 IOC:即"控制反转",不是什么技术,而是一种思想.使用IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制. 本篇文章主要讲解一下IOC

  • Spring事务处理流程和原理详解

    一.事务理论学习 利用数据库事务实现应用事务控制 1.要求:同一个事务需要同一个库的同一个连接. 2. 3.分布式事务 JTA 二.spring事务处理建模 1. 2. 三.spring事务处理流程 1. 2. 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们.

  • Spring事务的开启原理详解

    在事务配置类上声明@EnableTransactionManagement注解开启事务 在事务配置类上定义数据源 在事务配置类上定义事务管理器 在相关类或者方法上使用@Transactional声明事务 代码如下: @Configuration @EnableTransactionManagement public class RootConfig{ @Bean public DataSource dataSource(){ DruidDataSource dataSource = new Dr

  • Java注解机制之Spring自动装配实现原理详解

    Java中使用注解的情况主要在SpringMVC(Spring Boot等),注解实际上相当于一种标记语言,它允许你在运行时动态地对拥有该标记的成员进行操作.注意:spring框架默认不支持自动装配的,要想使用自动装配需要修改spring配置文件中<bean>标签的autowire属性. 自动装配属性有6个值可选,分别代表不同的含义: byName ->从Spring环境中获取目标对象时,目标对象中的属性会根据名称在整个Spring环境中查找<bean>标签的id属性值.如果

  • MySQL事务及Spring隔离级别实现原理详解

    1.事务具有ACID特性 原子性(atomicity):一个事务被事务不可分割的最小工作单元,要么全部提交,要么全部失败回滚. 一致性(consistency):数据库总是从一致性状态到另一个一致性状态,它只包含成功事务提交的结果 隔离型(isolation):事务所做的修改在最终提交一起,对其他事务是不可见的 持久性(durability):一旦事务提交,则其所做的修改就会永久保存到数据库中. 2.事务的隔离级别 1)隔离级别的定义与问题 READ UNCOMMITTED(读未提交):事务的修

  • Spring Security UserDetails实现原理详解

    1. 前言 今天开始我们来一步步窥探它是如何工作的.我们又该如何驾驭它.本篇将通过 Spring Boot 2.x 来讲解 Spring Security 中的用户主体UserDetails.以及从中找点乐子. 2. Spring Boot 集成 Spring Security 这个简直老生常谈了.不过为了照顾大多数还是说一下.集成 Spring Security 只需要引入其对应的 Starter 组件.Spring Security 不仅仅能保护Servlet Web 应用,也可以保护Rea

随机推荐