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") 這樣設置的是多例模式?