1、SpringAOP
1.1 作用
- 将业务逻辑中的通用功能横切出来的操作
- 通常日志,安全,缓存等这一类的功能,可以使用AOP来实现
1.2 概念
核心AOP概念
面向切面最早是AspectJ 字节码编程 (1995 )
SpringAOP集成AspectJ主要是面对企业级开发
1.3 Advice - 五种使用方式 都是在通用业务的方法上做标记
- @Before 在目标方法执行之前
- @After 在目标方法执行之后
- 只要目标方法执行完成,那么通用业务就会执行
- 目标方法执行完成:
- @AfterReturning 在目标方法正常返回的时候
- @AfterThrowing 在目标方抛出制定异常的时候
- @Around 环绕,可以获取目标方法,在目标方法前后都可以执行—最常用
- ProceedingJoinPoint 能够替代目标方法,目的是将目标方法在@Around方法中调用,只有@Around能够终止异常传播
1.4 表达式
- execution([@方法上的注解全名] [访问权限修饰符] 返回值 [类的全名.]方法名(参数))
- 可以使用通配符 * 匹配一个 …匹配0或多个
- 多个execution可以使用 &&,||,!来连接
2、SpringBoot
1、依赖管理
- SpringBoot 父级POM
- 规定了大多数依赖的版本,可以避免程序员自己引入依赖,出现版本的冲突和不兼容问题
- SpringBoot的入门POM(spring-boot-starter)
- 轻松协调依赖项,仅导入spring-boot-starter既可引入16个相关依赖,便捷容易(还有更多可选的包含web,jdbc等依赖)
- 通用测试库
- spring-boot-starter-test 作用是将绝大多数测试用的依赖引入进来
2、自动配置
SpringBoot会自动创建他认为你需要的Bean
SpringBoot项目的主启动类@SpringBootApplication合成注解的元注解包含三个主要内容
- @SpringBootConfiguration 底层就是@Configuration,标记该类是一个配置类及内部可以有@Bean
- @ComponentScan 组件扫描,配置了路径,默认扫描当前类所在包下的所有组件
- @EnableAutoConfiguration 启动自动配置注解
2.1 自动配置是如何实现的
- 提前在spring-boot-autoconfigure包下面有/MEAT/INF的文件中有一个spring.factories的文件,内部有很多配置类
- 这些类都有@Configuration和@Bean注解来标注
- 通过@Conditional的条件注解来判断它认为你是否需要该Bean
自动配置的执行时机
当你应用程序中的Bean创建完成执行,自动配置才会执行,自动配置会生成他认为你需要的Bean
3、覆写
SpringBoot设置是为了让覆写更简单(覆写,就是覆盖写,你的内容会覆盖SpringBoot自动配置的内容)
3.1 属性的覆写
SpringBoot内部有几百种属性,可以通过在application.properties对属性值进行覆写,覆写以后该文件内容稳准
因为写在其中的属性名称比较多,极容易造成覆写操作,因此一些不想覆盖的属性要写在其它配置文件中
3.2、显示定义Bean如果跟自动配置Bean发生碰撞,以显示定义的为准,如果不想自动生效,或者关闭自动配置可以在一下两项中配置
- @EnableAutoConfiguration(execlud=DataSourceAutoConfiguration.class)
- spring.autoconfigure.exclude = 类的全名
3.3、更多依赖项
如果在SpringBoot中的依赖项不满足你的需求,可以更改依赖项版本,或者将starter内的依赖项进行抛出替换,甚至内部的Tomcat都可以替换或抛出,SpringBoot中只能有一个内嵌式服务器
总结:SpringBoot的自动配置就是为了“查漏补缺”,SpringBoot覆写更加容易
4、外部Properties
程序员通常把属性值信息放在外部properties文件中
- SpringBoot会默认读取application.properties文件中的内容(默认是放在resource文件下的,可以创建一个config文件夹,放在该文件下也能读取到),提供给Environment对象和@Value,可以通过Environment对象.getProperty()和@Value获取到
- 如果想读取其他配置文件 需要使用@PropertySource注解
- Profile会将配置信息进行分组,在一个@onfiguration的配置类中通过注解@Profile进行分组,application–{profile}.properties进行分组,可以在代码定义选择不同的画境,方便配置的随时更换
5、fat jar
是一种打包方式,在打包jar的时候同时将项目依赖及内嵌式服务器一起打包,这样打开,就可以直接在云服务器等地方直接运行,不需要过多的环境
打包成普通的jar文件是不包含依赖,如果想运行还需要配置依赖
也可以打包成war文件
想打包 fat jat 仅需通过Maven等工具的一个依赖轻松构建