文章目录
- 1 IoC(Inverse Of Controller)
- 2 DI(Dependency Injection)
- 3 AOP(面向切面编程)
- 3.1 什么是AOP?
- 3.2 AOP的作用?
- 3.3 AOP的核心概念
- 3.4 AOP常见通知类型
- 3.5 切入点表达式
- 4 自动配置
- 4.1 简述:SpringBoot自动配置的原理
- 4.2 源码跟踪
说明:IoC、DI均为软件工程中思想,致力提高“高内聚,低耦合”的软件设计思路。
1 IoC(Inverse Of Controller)
什么是IOC?(Inverse Of Controller)
控制反转
,把对象的创建权(new对象), 反转为Spring容器管理
,IOC创建的对象称之为Bean对象
。
1.1 声明bean的注解?(即把对象放入容器中的注解)
注解 | 说明 |
---|---|
@Component | 不属于以上三类时,用此注解 |
@Controller | 标注在控制层类上 |
@Service | 标注在业务类上 |
@Repository | 标注在数据访问层类上 |
2 DI(Dependency Injection)
什么是DI?(Dependency Injection)
依赖注入
,给容器中bean的属性赋值,常用使用方式,使用@Autowired注解声明在需要注入的类上
,此时就会去spring容器中
寻找Bean对象
。
2.1 依赖注入的注解?
注解 | 说明 |
---|---|
@Autowired | 按照类型注入 |
@Qualifier | 按照名称注入 要和@Autowired搭配使用 |
@Resource | 按照名称注入 = @Autowired + @Qualifier |
3 AOP(面向切面编程)
3.1 什么是AOP?
面向切面编程
3.2 AOP的作用?
在不改变原始代码的基础上进行功能增强
3.3 AOP的核心概念
名词 | 解释 |
---|---|
连接点 | 所有可以进行功能增强的方法都是连接点 |
切入点 | 进行了功能增强的方法就是切入点 |
通知 | 共性功能 |
切面 | 切入点 + 通知 |
目标对象 | 通知所应用的对象就是目标对 |
切入点表达式 | 指定哪些方法是切入点 |
3.4 AOP常见通知类型
通知类型 | 解释 |
---|---|
@Before | 前置通知 |
@After | 后置通知 |
@Around | 环绕通知 |
@AfterReturning | 返回后通知 |
@AfterThrowing | 异常后通知 |
3.5 切入点表达式
写法一:
@PointCut("execution(访问修饰符 返回值 包名.类名.方法名(参数))")
- 通配符:
*
单个或半个任意符号 多用于模糊匹配
..
多个连续任意符号 多用于参数省略或包名省略
写法二:
@PointCut("@annotation(注解的全路径类名)")
- 通过连接点对象获取目标方法的信息
获取类名:joinPoint.getTarget().getClass().getName()
获取方法名:joinPoint.getSignature().getName()
获取参数:joinPoint.getArgs()
执行目标方法:joinPoint.proceed()
获取返回值:Object result = joinPoint.proceed()
4 自动配置
4.1 简述:SpringBoot自动配置的原理
在Springboot启动的时候,会用到
核心注解@SpringBootApplication
,这个注解中有一个自动配置注解@EnableAutoConfiguration
,自动配置注解会自动寻找spring.factories 和 AutoConfiguration.imports
文件中的xxxAutoConfiguration自动配置类,在自动配置中使用@Bean注解把一些配置类和bean对象放到了Spring容器中,就完成了自动配置
- 自动配置注解:@EnableAutoConfiguration
- 自动配置文件:spring.factories 和 AutoConfiguration.imports 文件
- 自动配置类:xxxAutoConfiguration(@Bean).
注解 | 说明 |
---|---|
@Bean | 告诉方法,产生一个Bean对象并交给Spring管理。产生这个Bean对象的方法Spring只会调用一次,随后被放在Spring容器中。 |
4.2 源码跟踪
spring.factories
Spring Boot 中的SPI 机制(Java SPI 机制):为某个接口寻找服务的实现的机制,类似IOC的思想,就是将装配的控制权移到程序之外,在模块化设计中这个机制很重要。
- 当需要实现SDK 或Sring boot starter 给别人调用,使用
Factories机制(Spring Boot 中的SPI 机制)
可以让SDK或Stater的使用只需很少或不需要进行配置,只需在服务中引入我们的Jar包就即可。