用Spring AOP技术实现对用户的删除,添加,修改,查询操作按如下格式,[调用的那个类,哪个方法,调用时间,执行的操作(增,删,改,查)]等信息,通过java的io操作实现将日志记录在log.txt文件中
时间: 2023-05-12 18:05:12 浏览: 86
可以通过在Spring配置文件中配置AOP切面,来实现对用户的删除、添加、修改、查询操作的日志记录。具体实现步骤如下:
1. 定义一个切面类,用于记录日志信息。在该类中定义一个方法,用于记录日志信息,方法中可以通过JoinPoint对象获取调用的类、方法、参数等信息,然后将这些信息写入到log.txt文件中。
2. 在Spring配置文件中配置切面,指定切入点为对用户的删除、添加、修改、查询操作,同时指定切面类中的方法为通知方法。
3. 在需要记录日志的方法上添加切点注解,以便让Spring AOP框架知道哪些方法需要被切入。
下面是一个示例代码:
```java
public class LogAspect {
private static final Logger logger = LoggerFactory.getLogger(LogAspect.class);
public void log(JoinPoint joinPoint) {
String className = joinPoint.getTarget().getClass().getName();
String methodName = joinPoint.getSignature().getName();
Object[] args = joinPoint.getArgs();
String operation = "";
if (methodName.startsWith("add")) {
operation = "添加";
} else if (methodName.startsWith("delete")) {
operation = "删除";
} else if (methodName.startsWith("update")) {
operation = "修改";
} else if (methodName.startsWith("query")) {
operation = "查询";
}
String message = String.format("%s类的%s方法在%s时进行了%s操作,参数为:%s",
className, methodName, new Date(), operation, Arrays.toString(args));
logger.info(message);
try {
FileWriter writer = new FileWriter("log.txt", true);
writer.write(message + "\n");
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
在Spring配置文件中配置切面:
```xml
<bean id="logAspect" class="com.example.LogAspect"/>
<aop:config>
<aop:aspect id="log" ref="logAspect">
<aop:pointcut id="userOperation" expression="execution(* com.example.UserService.add*(..)) or
execution(* com.example.UserService.delete*(..)) or
execution(* com.example.UserService.update*(..)) or
execution(* com.example.UserService.query*(..))"/>
<aop:around pointcut-ref="userOperation" method="log"/>
</aop:aspect>
</aop:config>
```
在需要记录日志的方法上添加切点注解:
```java
@Service
public class UserServiceImpl implements UserService {
@Override
@Log
public void addUser(User user) {
// 添加用户的业务逻辑
}
@Override
@Log
public void deleteUser(int userId) {
// 删除用户的业务逻辑
}
@Override
@Log
public void updateUser(User user) {
// 修改用户的业务逻辑
}
@Override
@Log
public User queryUser(int userId) {
// 查询用户的业务逻辑
return null;
}
}
```
注意:在上面的示例代码中,我们使用了自定义注解@Log来标记需要记录日志的方法,然后在切面类中判断方法是否被@Log注解标记,如果是,则记录日志。这样做的好处是,可以避免在切面类中硬编码方法名,提高代码的可维护性。
阅读全文