マイクロ人事日:springboot統合量Aop

AOPは、時には我々は、ログを印刷することで、トラブルシューティングに願っていたプロジェクトで、AOPは私たちが達成するのを助けることができ、アスペクト指向プログラミングです。
私たちは、創造springbootプロジェクトの後に、関連する依存AOPを追加する必要があります。

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

1.準備クラスのサービス

package org.javaboy.aop.service;

import org.springframework.stereotype.Service;

@Service
public class UserService {

    public String getUsernameById(Integer id) {
        System.out.println("getUsernameById");
        return "javaboy";
    }

    public void deleteUserById(Integer id) {
        System.out.println("deleteUserById");
    }


}

これは、クラスには2つのメソッドを提供し、サービスクラスです。

2.controllerクラス

package org.javaboy.aop;

import org.javaboy.aop.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/test1")
    public String getUsernameById(Integer id) {
        return userService.getUsernameById(id);
    }

    @GetMapping("/test2")
    public void deleteUserById(Integer id) {
        userService.deleteUserById(id);
    }
}

インジェクションサービスコントロールクラスのクラスメソッドは、コントローラクラスのサービスクラスを呼び出します。

3.書き込みAOP

package org.javaboy.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

//表示spring组件
@Component
//表示是切面
@Aspect
public class LogComponent {
    //定义拦截规则
    @Pointcut("execution(* org.javaboy.aop.service.*.*(..))")
    public void pc1() {

    }

    //前置通知
    @Before(value = "pc1()")
    public void before(JoinPoint jp) {
        //拿到执行方法名
        String name = jp.getSignature().getName();
        System.out.println("before--" + name);
    }

    //后置通知
    @After(value = "pc1()")
    public void after(JoinPoint jp) {
        String name = jp.getSignature().getName();
        System.out.println("after--" + name);
    }

    //返回通知
    @AfterReturning(value = "pc1()",returning = "result")
    public void afterReturning(JoinPoint jp,Object result) {
        String name = jp.getSignature().getName();
        System.out.println("afterReturning>>>>" + name + "------" + result);
    }

    //异常通知
    @AfterThrowing(value = "pc1()",throwing = "e")
    public void afterThrowing(JoinPoint jp,Exception e) {
        String name = jp.getSignature().getName();
        System.out.println("afterThrowing--" + name + "------" + e.getMessage());
    }


    //环绕通知(包含四个)
    @Around(value = "pc1()")
    public Object arround(ProceedingJoinPoint pjp) throws Throwable {
        return pjp.proceed();
    }
}

4.アクセスパスます。http:// localhost:8080 /
test1のコンソール印刷:

before--getUsernameById
getUsernameById
after--getUsernameById
afterReturning>>>>getUsernameById------javaboy
公開された287元の記事 ウォン称賛24 ビュー20000 +

おすすめ

転載: blog.csdn.net/qq_41998938/article/details/104028875