Spring Aop 獲取入?yún)⒑统鰠?/span>
1. 概述
本次,我利用 Spring Aop 的注解方式獲取切入點(diǎn)的入?yún)⒑统鰠ⅲ驗(yàn)楸容^簡單,所以就直接上代碼了。
2. 代碼編寫
注解類
/**
* 日志注解
*
* @author Jiantao Yan
* @title: Log
* @date 2021/1/5 20:33
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {
}
切入點(diǎn)
/**
* AOP 切入點(diǎn)測試
*
* @author Jiantao Yan
* @title: AopService
* @date 2021/1/5 20:29
*/
@Slf4j
@Service
public class AopService {
@Log
public User save(User user) {
log.info("------>save user={}", user);
return user;
}
}
切面
/**
* 日志切面
*
* @author Jiantao Yan
* @title: LogAspect
* @date 2021/1/5 20:33
*/
@Slf4j
@Aspect
@Component
public class LogAspect {
/**
* 以注解為切入點(diǎn)
*/
@Pointcut("@annotation(com.tao.leanrn.demo.aop.Log)")
public void pointcut() {
}
/**
* 環(huán)繞通知
* @param proceedingJoinPoint
*/
@SneakyThrows
@Around("pointcut()")
public void around(ProceedingJoinPoint proceedingJoinPoint) {
// 獲取入?yún)? Object[] args = proceedingJoinPoint.getArgs();
for (Object arg : args) {
// 入?yún)⑹欠駷?user
if (arg instanceof User) {
log.info("------->入?yún)閡ser={}", (User)arg);
}
log.info("----->入?yún)?arg={}", arg);
}
// 獲取出參
Object result = proceedingJoinPoint.proceed();
// 出參是否為 user
if (result instanceof User) {
log.info("------->入?yún)閡ser,result={}", (User)result);
}
log.info("----->出參.result={}", result);
}
}
實(shí)體類
/**
* 用戶
*
* @author Jiantao Yan
* @title: User
* @date 2021/1/5 20:30
*/
@Data
public class User {
private Long id;
private String username;
private Integer age;
}
3. 結(jié)果驗(yàn)證
單元測試編寫
@Slf4j
@SpringBootTest
class AopServiceTest {
@Autowired
private AopService aopService;
@Test
void save() {
User user = new User();
user.setId(1L);
user.setAge(19);
user.setUsername("booleandev");
User user1 = aopService.save(user);
log.info("------------->user1={}", user1);
}
}
結(jié)果
2021-01-05 21:01:13.759 INFO 7440 --- [ main] com.tao.leanrn.demo.aop.LogAspect : ------->入?yún)閡ser=User(id=1, username=booleandev, age=19)
2021-01-05 21:01:13.774 INFO 7440 --- [ main] com.tao.leanrn.demo.aop.LogAspect : ----->入?yún)?arg=User(id=1, username=booleandev, age=19)
2021-01-05 21:01:13.786 INFO 7440 --- [ main] com.tao.leanrn.demo.aop.AopService : ------>save user=User(id=1, username=booleandev, age=19)
2021-01-05 21:01:13.787 INFO 7440 --- [ main] com.tao.leanrn.demo.aop.LogAspect : ------->入?yún)閡ser,result=User(id=1, username=booleandev, age=19)
2021-01-05 21:01:13.787 INFO 7440 --- [ main] com.tao.leanrn.demo.aop.LogAspect : ----->出參.result=User(id=1, username=booleandev, age=19)
2021-01-05 21:01:13.787 INFO 7440 --- [ main] com.tao.leanrn.demo.aop.AopServiceTest : ------------->user1=null

浙公網(wǎng)安備 33010602011771號(hào)