一、目錄結構
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SN2kDOxUGOxgTMilzYhZ2NxYzXxEDMwcTMxAzLcFTMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
二、代碼
1、SpringConfiguration
1 package cn.bijian.config;
2
3 import org.springframework.context.annotation.ComponentScan;
4 import org.springframework.context.annotation.Configuration;
5 import org.springframework.context.annotation.EnableAspectJAutoProxy;
6
7 @Configuration
8 @ComponentScan(basePackages = "cn.bijian")
9 @EnableAspectJAutoProxy
10 public class SpringConfiguration {
11
12 }
2、Account
1 package cn.bijian.model;
2
3 public class Account {
4 private Integer id;
5 private String name;
6 private Double money;
7
8 public Integer getId() {
9 return id;
10 }
11
12 public void setId(Integer id) {
13 this.id = id;
14 }
15
16 public String getName() {
17 return name;
18 }
19
20 public void setName(String name) {
21 this.name = name;
22 }
23
24 public Double getMoney() {
25 return money;
26 }
27
28 public void setMoney(Double money) {
29 this.money = money;
30 }
31
32 @Override
33 public String toString() {
34 return "Account{" +
35 "id=" + id +
36 ", name='" + name + '\'' +
37 ", money=" + money +
38 '}';
39 }
40 }
3、AccountService
1 package cn.bijian.service;
2
3
4 public interface AccountService {
5
6 void saveAccount();
7
8 void updateAccount(int i);
9
10 int deleteAccount();
11 }
4、AccountServiceImpl
1 package cn.bijian.service.impl;
2
3 import cn.bijian.service.AccountService;
4 import org.springframework.stereotype.Service;
5
6 @Service("accountService")
7 public class AccountServiceImpl implements AccountService {
8 @Override
9 public void saveAccount() {
10 System.out.println("執行了儲存");
11 }
12
13 @Override
14 public void updateAccount(int i) {
15 System.out.println("執行了更新"+i);
16 }
17
18 @Override
19 public int deleteAccount() {
20 System.out.println("執行了删除");
21 return 0;
22 }
23 }
5、Logger
1 package cn.bijian.utils;
2
3
4 import org.aspectj.lang.ProceedingJoinPoint;
5 import org.aspectj.lang.annotation.*;
6 import org.springframework.stereotype.Component;
7
8 @Component("logger")
9 @Aspect //目前類是一個切面類
10 /*
11 注解前置、後置、異常、最終有順序問題,而環繞通知沒有這個問題!
12 */
13 public class Logger {
14 @Pointcut("execution(* cn.bijian.service.impl.*.*(..))")
15 private void pt(){
16
17 }
18
19 @Before("pt()")
20 public void beforePrintLog(){
21 System.out.println("前置:開始記錄日志!!!");
22 }
23
24 @AfterReturning("pt()")
25 public void afterReturningPrintLog(){
26 System.out.println("後置:開始記錄日志!!!");
27 }
28
29 @AfterThrowing("pt()")
30 public void afterThrowingPrintLog(){
31 System.out.println("異常:開始記錄日志!!!");
32 }
33
34 @After("pt()")
35 public void afterPrintLog(){
36 System.out.println("最終:開始記錄日志!!!");
37 }
38
39 // @Around("pt()")
40 public Object aroundPrintLog(ProceedingJoinPoint pjp){
41 Object rtValue = null;
42 try {
43 Object[] args = pjp.getArgs();
44 System.out.println("前置:開始記錄日志!!!");
45 rtValue = pjp.proceed(args); //調用業務層方法(切入點方法)
46 System.out.println("後置:開始記錄日志!!!");
47 return rtValue;
48 }catch (Throwable e){
49 System.out.println("異常:開始記錄日志!!!");
50 throw new RuntimeException(e);
51 }finally {
52 System.out.println("最終:開始記錄日志!!!");
53 System.out.println("環繞:開始記錄日志!!!");
54 }
55 }
56 }
6、bean.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xmlns:aop="http://www.springframework.org/schema/aop"
5 xmlns:context="http://www.springframework.org/schema/context"
6 xsi:schemaLocation="http://www.springframework.org/schema/beans
7 https://www.springframework.org/schema/beans/spring-beans.xsd
8 http://www.springframework.org/schema/aop
9 https://www.springframework.org/schema/aop/spring-aop.xsd
10 http://www.springframework.org/schema/context
11 https://www.springframework.org/schema/context/spring-context.xsd">
12
13 <!-- <context:component-scan base-package="cn.bijian"></context:component-scan>-->
14 <!--開啟注解AOP的支援-->
15 <!-- <aop:aspectj-autoproxy></aop:aspectj-autoproxy>-->
16
17
18 <!-- <bean id="accountService" class="cn.bijian.service.impl.AccountServiceImpl"></bean>-->
19 <!-- <bean id="logger" class="cn.bijian.utils.Logger"></bean>-->
20 <!-- <!–AOP配置–>-->
21 <!-- <aop:config>-->
22 <!-- <!–pointcut:對業務層哪些方法進行增強 通路修飾符 傳回值 包名.包名.包名...類名.方法名(參數清單)–>-->
23 <!-- <aop:pointcut id="pt" expression="execution(* cn.bijian.service.impl.*.*(..))"/>-->
24 <!-- <!–配置切面–>-->
25 <!-- <aop:aspect id="logAdvice" ref="logger">-->
26 <!-- <!–通知方法和切入點方法關聯–>-->
27 <!-- <aop:before method="beforePrintLog" pointcut-ref="pt"></aop:before>-->
28 <!-- <aop:after-returning method="afterReturningPrintLog" pointcut-ref="pt"></aop:after-returning>-->
29 <!-- <aop:after-throwing method="afterThrowingPrintLog" pointcut-ref="pt"></aop:after-throwing>-->
30 <!-- <aop:after method="afterPrintLog" pointcut-ref="pt"></aop:after>-->
31 <!--<!– <aop:around method="aroundPrintLog" pointcut-ref="pt"></aop:around>–>-->
32 <!-- </aop:aspect>-->
33 <!-- </aop:config>-->
34
35 </beans>
1 package cn.bijian;
2
3 import cn.bijian.config.SpringConfiguration;
4 import cn.bijian.service.AccountService;
5 import org.junit.Test;
6 import org.junit.runner.RunWith;
7 import org.springframework.beans.factory.annotation.Autowired;
8 import org.springframework.test.context.ContextConfiguration;
9 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
10
11 @RunWith(SpringJUnit4ClassRunner.class)
12 //@ContextConfiguration(locations = "classpath:bean.xml")
13 @ContextConfiguration(classes = SpringConfiguration.class)
14 public class AccountServiceTest {
15 @Autowired
16 private AccountService accountService;
17
18 @Test
19 public void testSaveAccount(){
20 accountService.saveAccount();
21 }
22 }
1 <?xml version="1.0" encoding="UTF-8"?>
2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4 <modelVersion>4.0.0</modelVersion>
5
6 <groupId>cn.bijian</groupId>
7 <artifactId>Spring_review_4</artifactId>
8 <version>1.0-SNAPSHOT</version>
9
10 <properties>
11 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
12 <maven.compiler.source>1.7</maven.compiler.source>
13 <maven.compiler.target>1.7</maven.compiler.target>
14 </properties>
15
16 <dependencies>
17 <dependency>
18 <groupId>org.mybatis</groupId>
19 <artifactId>mybatis</artifactId>
20 <version>3.5.6</version>
21 </dependency>
22
23 <dependency>
24 <groupId>mysql</groupId>
25 <artifactId>mysql-connector-java</artifactId>
26 <version>8.0.21</version>
27 </dependency>
28
29 <dependency>
30 <groupId>log4j</groupId>
31 <artifactId>log4j</artifactId>
32 <version>1.2.17</version>
33 </dependency>
34
35 <dependency>
36 <groupId>junit</groupId>
37 <artifactId>junit</artifactId>
38 <version>4.12</version>
39 <scope>test</scope>
40 </dependency>
41
42 <dependency>
43 <groupId>org.apache.tomcat.maven</groupId>
44 <artifactId>tomcat7-maven-plugin</artifactId>
45 <version>2.2</version>
46 </dependency>
47
48 <dependency>
49 <groupId>org.slf4j</groupId>
50 <artifactId>slf4j-log4j12</artifactId>
51 <version>1.6.6</version>
52 </dependency>
53
54 <dependency>
55 <groupId>dom4j</groupId>
56 <artifactId>dom4j</artifactId>
57 <version>1.6.1</version>
58 </dependency>
59
60 <dependency>
61 <groupId>jaxen</groupId>
62 <artifactId>jaxen</artifactId>
63 <version>1.1.6</version>
64 </dependency>
65
66 <dependency>
67 <groupId>org.springframework</groupId>
68 <artifactId>spring-context</artifactId>
69 <version>5.0.3.RELEASE</version>
70 </dependency>
71
72 <dependency>
73 <groupId>c3p0</groupId>
74 <artifactId>c3p0</artifactId>
75 <version>0.9.1.2</version>
76 </dependency>
77
78 <dependency>
79 <groupId>commons-dbutils</groupId>
80 <artifactId>commons-dbutils</artifactId>
81 <version>1.7</version>
82 </dependency>
83
84 <dependency>
85 <groupId>org.springframework</groupId>
86 <artifactId>spring-test</artifactId>
87 <version>5.0.2.RELEASE</version>
88 </dependency>
89
90 <dependency>
91 <groupId>org.springframework</groupId>
92 <artifactId>spring-aop</artifactId>
93 <version>5.0.3.RELEASE</version>
94 </dependency>
95
96 <dependency>
97 <groupId>org.springframework</groupId>
98 <artifactId>spring-core</artifactId>
99 <version>5.0.3.RELEASE</version>
100 </dependency>
101
102 <dependency>
103 <groupId>org.aspectj</groupId>
104 <artifactId>aspectjweaver</artifactId>
105 <version>1.8.9</version>
106 </dependency>
107
108 </dependencies>
109
110
111 </project>