# Spring AOP AspectJ 切入点表达式示例

> 原文： [https://howtodoinjava.com/spring-aop/aspectj-pointcut-expressions/](https://howtodoinjava.com/spring-aop/aspectj-pointcut-expressions/)

在本教程中，我列出了一些示例，这些示例将帮助您编写**切入点表达式**，以将任何类型的方法连接点匹配到 Spring 应用程序中。 有关完整的 AspectJ 切入点语言，请参阅 AspectHT 网站上的 AspectJ 编程指南。

## 1\. 如何匹配方法签名模式

最典型的切入点表达式用于通过其签名来匹配许多方法。

#### 1.1. 匹配另一个包中一个类中的所有方法

例如，以下切入点表达式与`EmployeeManager`接口中声明的所有方法匹配。 前面的通配符将方法与任何修饰符（公共，保护和私有）和任何返回类型匹配。 参数列表中的两个点匹配任意数量的参数。

```java
execution(* com.howtodoinjava.EmployeeManager.*(..))
```

#### 1.2. 匹配同一包中一个类中的所有方法

如果目标类或接口与此切面位于同一包中，则可以省略包名称。

```java
execution(* EmployeeManager.*(..))
```

#### 1.3. 匹配`EmployeeManager`中的所有公共方法

在开始处使用`public`关键字，并使用*匹配任何返回类型。

```java
execution(public * EmployeeManager.*(..))
```

#### 1.4. 匹配返回类型为`EmployeeDTO`的`EmployeeManager`中的所有公共方法

在开始时使用`public`关键字并返回类型。

```java
execution(public EmployeeDTO EmployeeManager.*(..))
```

#### 1.5. 匹配返回类型为`EmployeeDTO`和第一个参数为`EmployeeDTO`的`EmployeeManager`中的所有公共方法

在开始时使用`public`关键字并返回类型。 另外，还要指定您的第一个参数。 其余参数可以通过两个点进行匹配。

```java
execution(public EmployeeDTO EmployeeManager.*(EmployeeDTO, ..))
```

#### 1.6. 匹配返回类型为`EmployeeDTO`和带有确定参数的`EmployeeManager`中的所有公共方法

在开始时使用`public`关键字并返回类型。 另外，还要指定所有参数类型。

```java
execution(public EmployeeDTO EmployeeManager.*(EmployeeDTO, Integer))
```

## 2\. 如何匹配类签名模式

当应用于 [**Spring AOP**](https://howtodoinjava.com/spring/spring-aop/spring-aop-aspectj-example-tutorial-using-annotation-config/) 时，这些切入点的范围将缩小以仅匹配特定类型内的所有方法执行。

#### 2.1. 匹配包`com.howtodoinjava`中的类中定义的所有方法

这很像前面的例子。

```java
 within(com.howtodoinjava.*) 
```

#### 2.2. 匹配在`com.howtodoinjava`包以及所有子包中的类中定义的所有方法

对于包含，子包使用两个点。

```java
 within(com.howtodoinjava..*) 
```

#### 2.3. 匹配另一个包中的类的所有方法

与前面使用执行关键字的示例非常相似。

```java
 within(com.howtodoinjava.EmployeeManagerImpl) 
```

#### 2.4. 匹配同一包中的类的所有方法

如果使用相同的软件包，请删除软件包名称。

```java
 within(EmployeeManagerImpl) 
```

#### 2.5. 匹配`EmployeeManager`接口的所有实现类中的所有方法

使用`+`（加号）匹配接口的所有实现。

```java
 within(EmployeeManagerImpl+) 
```

## 3\. 如何匹配类名模式

您可以匹配所有具有相同命名模式的 bean，例如

#### 3.1. 匹配名称以`Manager`结尾的 bean 中定义的所有方法。

这很简单。 使用`*`来匹配 Bean 名称中的任何前缀，然后匹配单词。

```java
 bean(*Manager) 
```

## 4\. 如何组合切入点表达式

在 AspectJ 中，切入点表达式可以与运算符`&& (and)`，`|| (or)`和`! (not)`组合。 例如

#### 4.1. 匹配以`Manager`或`DAO`结尾的所有方法

使用`'||'`符号将两个表达式组合在一起。

```java
 bean(*Manager) || bean(*DAO) 
```

我希望当您在应用程序中确定正确的切入点表达式时遇到任何困难时，上述信息对您有所帮助。

学习愉快！