Java自定义注解和AOP的整合

需求背景:在一个login放发的前后增加一些逻辑处理,采用AOP和自定义注解的方式。

创建一个注解类,标记login()方法。

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Login {
    String value() default "";
}

public interface LoginService {
    void login();
}

在login方法上用上注解

@Service
public class LoginServiceImpl implements LoginService {
    
    @Override
    @Login   // 使用注解
    public void login() {
        System.out.println("这里执行各种login的逻辑代码");

    }
}

Aspect类。

@Aspect
@Component
public class LoginAspect  {

    //通过注解找到有这个注解的方法,并对这个方法的前前后后做一些操作。
    @Before(value = "@annotation(Login)")
    private void beforeLogin() {
        System.out.println("在登录之前的一些操作");
    }


    //可以在方法里添加注解作为参数,通过参数获取注解的数据
    @After(value = "@annotation(login)")
    private void afterLogin(Login login) {
        System.out.println("在登录之后的一些操作");
        String annoVal = login.value();
    }


    @Around(value = "@annotation(Login)")
    private Object around(ProceedingJoinPoint point) throws Throwable {
        long start = System.currentTimeMillis();
        Object obj = point.proceed(); // 执行真正的方法
        long end = System.currentTimeMillis();

        //通过获取Method和getAnnotation的方法,拿到注解,获取注解里的数据
        MethodSignature methodSignature = (MethodSignature)point.getSignature();
        Method method = methodSignature.getMethod();
        Login login = method.getAnnotation(Login.class);
        String annoVal = login.value();

        return obj;
    }


}

通过controller调用login方法,查看结果。

@RestController
public class LoginController {

    @Autowired
    LoginService loginService;

    @RequestMapping("/login")
    public String login() {
        loginService.login();
        return "";
    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值