AOP核心概念:
连接点:
JoinPoint, 可以被AOP控制的方法
通知:
Advice 指哪些重复的逻辑,也就是共性功能(最终体现为一个方法)
切入点:
PointCut, 匹配连接点的条件,通知仅会在切入点方法执行时被应用
目标对象:
Target, 通知所应用的对象
通知类型:
如果每一个方法的前面都需要加上切点表达式, 这个时候可以使用@Pointcut("")
@Pointcut("execution(*, com.findyou.service.impl.DeptServiceImpl.*(..))")
public void pt(){}
@Around("pt()")
public void test() {
log.info("around....")
}
通知顺序:
和类名的字母排序有关系,但是可以通过@Order(数字)来控制顺序
切点表示式:
切入点表达式-execution:
包名.类名是可以省略的,但是不建议去省略
使用通配符描述切点:
注意* 代表的是 任意一个
如果要描述多个的话 可以写成:
@Pointcut("execution() || execution()") // 之间用 || 来隔开
书写建议:
切入点表达式-@annotation:
SpringBoot
配置优先级:
如果 写了3份配置文件 例如: application.properties application.yaml application.yml 运行会发现
优先级最高的是 .properties 其次是yml 最后是yaml, 现在企业主流的是 yml
打包成jar包的形式:
运行jar包:
Bean管理:
bean的获取:
默认的情况,Spring启动的时候,会把bean都创建好放在IOC容器里面,如果想主动获取这些bean,可以通过以下方法:
1: 根据bean的名称去获取:
ioc容器对象.getBean("想获取bean的名称") 如果bean没有名字 那么默认的就是类名小写
2:根据bean的类型去获取:
ioc容器对象.getBean(想要获取bean类名.class)
3:根据bean的名称以及类型去获取:
ioc容器对象.getBean("想要获取bean的名称", 想要获取bean类名.class)
这三次获取的bean是一样的 这说明是同一个bean对象 也就是单例的
bean的作用域:
bean是单例的还是多例的取决于bean的作用域的配置, spring支持5种作用域, 前2种重要
默认是单例的模式设置作用域通过@Scope这个注解 例如@Scope("prototype") 这样设置的是多例模式