Spring-IOC

27 篇文章 0 订阅

Spring-ioc


1.1简介

rod johnson → 搞音乐的

平台型框架整合型的框架 → 方便的集成其他框架和第三方框架

Spring → 春天 冬将尽 春可期

Source of modern Java


1.2 IOC&DI
在这里插入图片描述


1.2.1 IOC控制反转

Inverse of Control 控制反转
控制:控制权 → 实例生成权
UserService userService = new UserServiceImpl();//控制 → 应用程序
UserService userService = Spring.getInstance(UserService.class);//Spring生成
反转:由应用程序变更为Spring

容器:实例放在spring容器中 → Spring容器、IOC容器

组件:容器中管理的实例(对象)


1.2.2 DI依赖注入

Dependency Injection 依赖注入
应用程序和Spring容器之间的关系。
依赖:谁依赖谁,应用程序依赖Spring容器;为什么?spring容器提供了应用程序所必须的外部资源
注入:谁注入谁。Spring容器注入给应用程序的资源


1.3Spring能做什么

hello=你好
hello = hello
hello = 萨瓦迪卡

在这里插入图片描述
在这里插入图片描述


2.入门案例

2.1入门案例1

Spring容器以什么样的形式存在,我们如何去获得spring容器
组件如何注册容器中


2.1.1依赖

5spring + 1logging
aop、core、beans、context、expression
只写spring-context
在这里插入图片描述

2.1.2 Spring配置文件(xml)


2.1.2.1 引入schema约束

1、复制已有的配置文件里的头
2、从spring官网找
3、自定义文件模板

在这里插入图片描述

2.1.2.2 配置文件名

application.xml或application-xxx.xml


2.1.3 ApplicationContext应用上下文

加载spring配置文件 → 获得应用上下文

应用上下文,大家可以认为就是我们的容器
在这里插入图片描述


2.1.4Spring配置文件中注册组件
在这里插入图片描述


2.1.5从容器中取出组件
在这里插入图片描述



3 补充

ctrl + shift + enter → 规整代码,补充最后的分号(光标在该行任意位置)
shift + enter → 快速另起一行
alt + shift + ↑↓ → 快速变换上下文顺序(可以选中,也可以不选中)
ctrl + shift + alt + c竖中指 → 快速复制全类名
ctrl + H → 看类的继承关系
ctrl + f12
ctrl + shift + F → 全局搜索的快捷键(这个快捷键和你的输入法的简繁体转换冲突)
ctrl + alt + V → 提取变量,补全代码
ctrl + w → 快速选中一整块内容


4 入门案例2


维护组件之间的依赖关系
UserService
UserDao
在这里插入图片描述

4.1 类中维护组件之间的依赖关系

在这里插入图片描述

4.2 配置文件中维护组件之间的依赖关系
在这里插入图片描述

4.3 单元测试

在这里插入图片描述

4.4 小结
当前并没有带来新的功能,而是已有的功能。提高了组件的重用频率,搭建一个更加灵活可靠的系统。


5 接口


5.1 ApplicationContext

生成并管理组件,认为就是容器。
在这里插入图片描述

ClasspathXmlApplicationContext:加载的是classpath路径
FileSystemXmlApplicationContext:加载的是文件路径

在这里插入图片描述

5.2BeanFactory

bean工厂 → 生成全部bean的地方


6 bean的作用域scope

singleton:组件的默认scope为singleton

prototype原型(每一次取出都是一个新的组件


6.1 scope的配置

在这里插入图片描述

6.2 单元测试
在这里插入图片描述

6.3 单元测试2
在这里插入图片描述
在这里插入图片描述


7 Bean的实例化方式

容器中的组件是怎么样来的

7.1构造方法


7.1.1无参构造
在这里插入图片描述

7.1.2有参构造
在这里插入图片描述

7.2工厂

是否是静态工厂:工厂中方法是否是静态方法


7.2.1静态工厂
在这里插入图片描述

7.2.2实例工厂
在这里插入图片描述

7.2.3FactoryBean

BeanFactory和FactoryBean

李艮隶 隶艮李


区别:
BeanFactory生产全部的bean;

FactoryBean生成特定的Bean,通常都叫XXXFactoryBean → 对应的组件的类型就是XXX

FactoryBean中的getObject
在这里插入图片描述


8 Bean的生命周期

在应用程序获得bean之前就已经开始了。初始化容器的时候开始。

8.1BeanPostProcessor

容器中有实现BeanPostProcessor的组件,那么就是执行到对应方法

可以做通用的处理,也可以筛选出需要的组件做个性化的处理

在这里插入图片描述
在这里插入图片描述

8.2 组件可用状态

在这里插入图片描述

8.3 scope对生命周期的影响


影响的是生命周期开始的时间:
singleton:容器初始化的时候
prototype:当你获得(getBean)这个组件的时候开始,容器关闭时没有生命周期

8.4 完整流程

8.4.1 代码
在这里插入图片描述

8.4.2 流程图

在这里插入图片描述


9 注解

9.1准备
context:component-scan base-package

设定包目录,去扫描该包目录下的所有类,如果包含组件注册功能的注解,就注册到容器。
在这里插入图片描述

9.2 组件注册功能
在类定义时增加注解(ElementType.TYPE)完成组件注册。
@Component
@Service (service层组件通常使用)
@Repository (dao层组件通常使用)
@Controller (控制层组件通常使用,SpringMVC阶段才会用)


9.2.1组件id

可以使用注解的value属性指定组件id,默认以类名的首字母小写作为组件id
在这里插入图片描述

9.3注入功能

要使用注入功能注解,需要保证当前类是容器中的组件。

9.3.1值类型(String、基本类型、包装类)
在这里插入图片描述

9.3.1.1 值的引用

如果按照上面直接使用@Value,值是和代码直接耦合在一起的 → 解耦

需要加载配置文件:需要在spring的配置文件中引用该properties配置文件
在这里插入图片描述

在spring配置文件中可以使用表达式
在这里插入图片描述

9.3.2 javabean类型(容器中的组件)

组件之间存在依赖关系

@Autowired
@Autowired + @Qualifier
@Resource
在这里插入图片描述

9.4 生命周期和scope

生命周期注解直接写在方法上

init-method: @PostConstruct
destroy-method: @PreDestroy
在这里插入图片描述

Scope注解 写在类定义上
在这里插入图片描述


9.5 单元测试

主要要做的事情,从容器中取出对应的组件,并且测试该组件提供的功能。

9.5.1 引入依赖

spring-test
在这里插入图片描述

9.5.2 单元测试类(为了使用注入功能注解)
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值