ProceedingJoinPoint类的作用
时间: 2023-11-09 13:45:32 浏览: 50
ProceedingJoinPoint类是在AOP(面向切面编程)中使用的一个重要类。它用于表示正在执行的程序连接点,并提供了一些方法来访问连接点的相关信息和控制连接点的执行。
通常,连接点是指程序中的一个特定位置,例如方法的调用、方法的执行、抛出异常等。ProceedingJoinPoint类提供了以下常用方法:
1. getArgs():获取连接点方法的参数数组。
2. getTarget():获取目标对象,即被代理的对象。
3. getSignature():获取连接点的签名,包括方法名、修饰符、返回类型等信息。
4. proceed():继续执行连接点的方法,可以在AOP通知中使用该方法来控制连接点的执行。
5. getThis():获取代理对象,即当前的AOP代理对象。
通过使用ProceedingJoinPoint类,我们可以在AOP中拦截方法的执行,添加额外的逻辑或修改方法的行为,从而实现对系统的横切关注点的管理。
相关问题
org.aspectj.lang.ProceedingJoinPoint类说明
org.aspectj.lang.ProceedingJoinPoint是AspectJ框架中的一个重要类,用于表示连接点(Join Point)和切面(Aspect)之间的通信。它提供了一系列方法和属性,用于获取连接点的相关信息,并且可以在切面中对连接点进行操作。
该类的主要作用是在切面中获取和操作连接点的信息,其中连接点是指程序执行过程中的特定位置,例如方法调用、方法执行、异常抛出等。通过ProceedingJoinPoint类,我们可以获取连接点的方法名、参数、目标对象等信息,并且可以在切面中对连接点进行拦截、修改或者继续执行。
以下是org.aspectj.lang.ProceedingJoinPoint类的一些常用方法:
1. getArgs():获取连接点方法的参数数组。
2. getTarget():获取连接点所在的目标对象。
3. getSignature():获取连接点方法的签名。
4. proceed():继续执行连接点方法。
5. getThis():获取代理对象。
通过使用这些方法,我们可以在切面中对连接点进行拦截、修改参数、修改返回值等操作,从而实现对程序行为的增强或者控制。
按如下要求编写程序: (1) 创建一个 Spring 应用程序,导入必要的JAR包; (2) 编写 HelloService 接口,其中定义一个无参的void方法sayHello; (3) 编写 HelloService 接口的实现类 HelloServiceImpl,方法输出 "Hello Spring.",将该类注解为Spring Bean; (4) 编写 切面类 HelloAspect,以 HelloServiceImpl 类的所有方法定义切点,定义所有的通知方法(通知方法内只需输出通知方法名和本人学号姓名); (5) 编写Java配置类 HelloConfig,使上面定义的Bean和切面类起作用; (6) 编写测试用主类 HelloApp,main 方法中:加载配置类;获取 HelloService 的Bean实例并调用sayHello 方法。
好的,下面是完整的代码实现:
1. 导入必要的JAR包:
```xml
<!-- Spring 相关依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
```
2. 定义 HelloService 接口:
```java
public interface HelloService {
void sayHello();
}
```
3. 实现 HelloService 接口并注解为 Spring Bean:
```java
@Service
public class HelloServiceImpl implements HelloService {
@Override
public void sayHello() {
System.out.println("Hello Spring.");
}
}
```
4. 定义切面类 HelloAspect,实现所有方法的通知:
```java
@Component
@Aspect
public class HelloAspect {
@Pointcut("execution(* com.example.demo.service.HelloService.*(..))")
public void pointcut() {}
@Before("pointcut()")
public void before(JoinPoint joinPoint) {
System.out.println("Before " + joinPoint.getSignature().getName() + ", 16340084-吕健");
}
@After("pointcut()")
public void after(JoinPoint joinPoint) {
System.out.println("After " + joinPoint.getSignature().getName() + ", 16340084-吕健");
}
@AfterReturning("pointcut()")
public void afterReturning(JoinPoint joinPoint) {
System.out.println("AfterReturning " + joinPoint.getSignature().getName() + ", 16340084-吕健");
}
@AfterThrowing("pointcut()")
public void afterThrowing(JoinPoint joinPoint) {
System.out.println("AfterThrowing " + joinPoint.getSignature().getName() + ", 16340084-吕健");
}
@Around("pointcut()")
public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
System.out.println("Around before " + proceedingJoinPoint.getSignature().getName() + ", 16340084-吕健");
Object result = proceedingJoinPoint.proceed();
System.out.println("Around after " + proceedingJoinPoint.getSignature().getName() + ", 16340084-吕健");
return result;
}
}
```
5. 编写 Java 配置类 HelloConfig:
```java
@Configuration
@ComponentScan(basePackages = "com.example.demo")
@EnableAspectJAutoProxy
public class HelloConfig {
}
```
6. 编写测试用主类 HelloApp:
```java
public class HelloApp {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(HelloConfig.class);
HelloService helloService = context.getBean(HelloService.class);
helloService.sayHello();
context.close();
}
}
```
最后,运行 HelloApp 的 main 方法,控制台输出如下:
```
Before sayHello, 16340084-吕健
Around before sayHello, 16340084-吕健
Hello Spring.
Around after sayHello, 16340084-吕健
AfterReturning sayHello, 16340084-吕健
After sayHello, 16340084-吕健
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)