编写一个类Student,属性为id,name,password,创建一个info方法,输出Student的id,name,password信息,并使用AOP中的Before在info方法前输出语句:
时间: 2024-09-29 10:06:59 浏览: 26
一个简化版的管理系统示例
在Java中,我们可以使用Spring AOP(Aspect Oriented Programming,面向切面编程)来实现这个需求。首先,你需要定义一个简单的`Student`类:
```java
public class Student {
private int id;
private String name;
private String password;
public Student(int id, String name, String password) {
this.id = id;
this.name = name;
this.password = password;
}
// getter和setter方法省略
public void info() {
System.out.println("ID: " + id);
System.out.println("Name: " + name);
System.out.println("Password: " + "[Sensitive] " + password); // 避免直接显示密码
}
}
```
然后,我们创建一个切面(Aspect),并在其中添加`@Before`注解来执行前置通知:
```java
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
@Aspect
@Component
public class LoggingAspect {
@Around("@annotation(infoMethod)")
public Object logInfo(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("Executing info method for student...");
long startTime = System.currentTimeMillis();
// 执行原目标方法
Object result = joinPoint.proceed();
long endTime = System.currentTimeMillis();
long executionTime = endTime - startTime;
System.out.printf("Info method executed in %d milliseconds.\n", executionTime);
return result;
}
@annotationRetention(RetentionPolicy.RUNTIME)
@interface infoMethod {
}
}
```
最后,在需要使用`info`方法的地方,你可以通过`@infoMethod`注解来标记那个方法:
```java
public class Main {
@Autowired
private Student student;
@infoMethod
public void displayStudentInfo() {
student.info();
}
public static void main(String[] args) {
// ...
new Main().displayStudentInfo();
}
}
```
现在,每次调用`displayStudentInfo`方法时,都会在打印学生信息之前先看到"Executing info method for student..."这条消息。
阅读全文