Spring IoC

IOC简介

控制反转(IoC,Inversion of Control),是一种思想,指的是将创建对象的操作权交给容器,通过容器来装配和管理对象的创建。

依赖注入

IoC思想的实现方式之一是__依赖注入__(Dependency Injection,简称DI),依赖注入指程序运行过程中,若需要调用另一个对象协助时,无需在代码中创建被调用者,而是依赖外部容器,由外部容器创建后传递给程序
依赖注入使spring的Bean之间以配置文件的方式组织在一起,而不是以硬编码的方式耦合在一起。

容器加载配置文件的两种方式

__ApplicationContext__和__BeanFactory__是容器的两种方式,提供了高级IOC的配置机制。
ApplicationContext是BeanFactory的一个子类,有更多的功能,推荐使用。BeanFactory可以实现延迟加载,将配置文件加载到spring容器时,不进行对象创建,getBean时再创建,可以应用在内存较小的环境里,但一般不用它。
如下图,第二个方法不会出现StudentService构造函数打印输出的内容,而一则会。
在这里插入图片描述

Bean装配的三种方式(创建对象的三种方式)

Bean装配指ioc容器将对象创建好并传递给使用者的过程,是依赖注入的一部分。
Bean装配由三种方式:
1,默认方式
是通过__反射__实现的,使用配置文件指定类,spring ioc容器会调用bean的无参构造方法来创建对象,所以务必保证这些bean有无参构造方法。
2,实例工厂
在这里插入图片描述
3,静态工厂
在这里插入图片描述
配置文件的区别:
在这里插入图片描述
测试用最普遍的applicationContext的方式:在这里插入图片描述

Bean的作用域

使用springioc为我们创建对象的时候,可以设定该对象的作用域,默认是单例的。
1,singleton:单例模式。即在一个Spring ioc容器中,使用singleton定义的Bean是单例的,只有一个实例。
2,prototype:原型模式。即每次使用getBean方法获取的同一个bean实例都是一个新的实例。(默认是singleton)
在这里插入图片描述
3,request:对于每次HTTP请求,都将会产生一个不同的Bean实例。
4,session:对于每个不同的HTTP session,都将产生一个不同的Bean实例。
5,application:在一个web应用中产生一个Bean实例,就相当于在一个ServletContext中只有该bean的实例。
6,websocket:在一个websocket中会产生一个bean实例。

Bean的生命周期

配置
在这里插入图片描述
在bean中添加方法
在这里插入图片描述
关闭容器(关闭时才会调用destory-method)
在这里插入图片描述

将创建好的对象传递给过来的三种方式(依赖注入的三种方式)

springioc容器初始化好bean的实例对象之后,会对对象的属性进行初始化,初始化的过程依然是由容器自动完成,这就是依赖注入。spring里面常用的注入方式有三种,setter方法注入构造方法注入特定接口注入(污染,不再使用)

xml方式

1,setter注入
使用了 private Class class这种方式来创建bean对象后,需要配置文件中添加相关配置,告诉容器调用set方法将对象注入进去。
2,构造方法注入
不用set,get,带参数的构造方法,在初始化的时候就注入,也要加配置。
优点:修改xml之后,不需要重新编译代码;减少侵入性。
缺点:冗余,麻烦

注解方式

@Component、@Service、@Repository、@Controller
@Autowired 根据类型装配
@resource 根据名字装配
@scope(配置作用域)
优点:配置方便,使用直观
缺点:出现在了代码中,侵入性强

可以两种都用,xml优先级高于注解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值