好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

spring IOC控制反转原理详解

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中配置了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

 

总结

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

原文地址:https://blog.csdn.net/m0_56079407/article/details/123236962

查看更多关于spring IOC控制反转原理详解的详细内容...

  阅读:16次