Skip to content

Commit 7a9550d

Browse files
committed
docs: 运行了 04fx/spring01 中的示例,并添加了自己的一些理解注释
1 parent 0887f4f commit 7a9550d

5 files changed

Lines changed: 57 additions & 19 deletions

File tree

04fx/spring01/src/main/java/io/kimmking/spring02/Aop1.java

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,38 @@
33
import org.aspectj.lang.ProceedingJoinPoint;
44

55
public class Aop1 {
6+
/*
7+
Spring 做 AOP 第一种方式:用代码和XML配置的方式来配置
8+
- 在类中写了三个方法,名叫 startTransaction, commitTransaction, around
9+
- 特别注意:around 的参数必须是 ProceedingJoinPoint
10+
- 在 Spring 配置文件中,将做 AOP 的类 Aop1 注册成一个 Bean
11+
- 参考 resources/applicationContext.xml 第40行
12+
- 然后我们就可以定义我们的 AOP
13+
- 参考 resources/applicationContext.xml 第47行
14+
- 先定义一个切点
15+
- 再定义一个切面
16+
- 然后把两个匹配到一块儿,就可以让切面的代码作用到所有切点上去
17+
- Tips:这里我们定义的切点是一个表达式,这个表达式可以用来匹配我们的包路径,类名,方法名,包括参数
18+
- 详情可以去看网上文章或者相关书籍
19+
*/
620

7-
//前置通知
8-
public void startTransaction(){
9-
System.out.println(" ====>begin ding... "); //2
10-
}
21+
//前置通知
22+
public void startTransaction(){
23+
System.out.println(" ====>begin ding... "); //2
24+
}
1125

12-
//后置通知
13-
public void commitTransaction(){
14-
System.out.println(" ====>finish ding... "); //4
15-
}
26+
//后置通知
27+
public void commitTransaction(){
28+
System.out.println(" ====>finish ding... "); //4
29+
}
1630

17-
//环绕通知
18-
public void around(ProceedingJoinPoint joinPoint) throws Throwable{
19-
System.out.println(" ====>around begin ding"); //1
20-
//调用process()方法才会真正的执行实际被代理的方法
21-
joinPoint.proceed();
22-
23-
System.out.println(" ====>around finish ding"); //3
24-
}
31+
//环绕通知
32+
public void around(ProceedingJoinPoint joinPoint) throws Throwable{
33+
System.out.println(" ====>around begin ding"); //1
34+
//调用process()方法才会真正的执行实际被代理的方法
35+
joinPoint.proceed();
36+
37+
System.out.println(" ====>around finish ding"); //3
38+
}
2539

2640
}

04fx/spring01/src/main/java/io/kimmking/spring02/Aop2.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,19 @@
1010

1111
@Aspect
1212
public class Aop2 {
13+
/*
14+
Spring 做 AOP 第二种方式:用全注解方式来配置(与第一种方式是等价的)
15+
- 定义了一个 AOP 切面的类 Aop2,开启了它上面的切面注解 @Aspect 表示整个类就是一个切面
16+
- 定义了一个方法 point (空的就可以了),在上面我们定义了一个切点(明确是 Klass 类相关的 dong 方法)
17+
- 再定义三个方法
18+
- 用 @Before 注解修饰的 before 方法
19+
- 用 @AfterReturning 注解修饰的 after 方法
20+
- 用 @Around 注解修饰的 around 方法
21+
- 每个注解里面需要给定一个 point(),表示对应的切点
22+
23+
- 在配置文件中开启自动代理,它就会扫描到用注解配置的一些切面
24+
- 参考 resources/applicationContext.xml 第45行
25+
*/
1326

1427
@Pointcut(value="execution(* io.kimmking.*.Klass.*dong(..))")
1528
public void point(){

04fx/spring01/src/main/java/io/kimmking/spring02/School.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,16 @@
99

1010
@Data
1111
public class School implements ISchool {
12-
12+
/*
13+
@Autowire 和 @Resource 是两种常用的注入方法
14+
@Autowire 是默认按照类型来注入的
15+
- 注入时可使用 required 参数,值为 ture 和 false,表示我们是在启动的时候就要
16+
找到 Klass,把它先配置好;还是当我们调用 Klass 的某个属性方法的时候,再看它
17+
要不要装配,再拿到装配(懒加载)
18+
19+
@Resource 是默认按名字来注入的
20+
*/
21+
1322
// Resource
1423
@Autowired(required = true) //primary
1524
Klass class1;

04fx/spring01/src/main/java/io/kimmking/spring02/SpringDemo01.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
public class SpringDemo01 {
99

1010
public static void main(String[] args) {
11-
11+
// 为了更加方便查看 Spring 的执行过程,将 Student 和 Klass 都在配置文件中注册了 Bean
12+
1213
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
1314
// Student student123 = context.getBean(Student.class);
1415

04fx/spring01/src/main/resources/applicationContext.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@
4040
<bean id="aop1" class="io.kimmking.spring02.Aop1" />
4141

4242
<bean id="aop2" class="io.kimmking.spring02.Aop2" />
43-
43+
44+
<!-- 是否强制使用字节码增强技术 -->
4445
<!-- <aop:aspectj-autoproxy proxy-target-class="true" />-->
4546
<aop:aspectj-autoproxy />
4647

0 commit comments

Comments
 (0)