Rumah > Java > javaTutorial > Bagaimana untuk mengkonfigurasi integrasi AOP SpringBoot dengan Web

Bagaimana untuk mengkonfigurasi integrasi AOP SpringBoot dengan Web

WBOY
Lepaskan: 2023-05-18 18:47:27
ke hadapan
896 orang telah melayarinya

Mengkonfigurasi AOP

Pengenalan kepada AOP

Untuk memperkenalkan pengaturcaraan berorientasikan aspek (AOP), anda perlu terlebih dahulu mempertimbangkan senario seperti ini: Syarikat itu mempunyai sistem pengurusan sumber manusia pada masa ini. telah berada dalam talian, tetapi sistem berjalan tidak stabil dan kadangkala berjalan dengan sangat perlahan Untuk mengesan pautan yang mempunyai masalah, pembangun ingin memantau masa pelaksanaan setiap kaedah, dan kemudian menentukan masalah berdasarkan masa pelaksanaan ini. Apabila masalah telah diselesaikan, keluarkan monitor ini. Sistem sedang berjalan Jika anda mengubah suai secara manual beribu-ribu kaedah dalam sistem, beban kerja akan menjadi terlalu banyak, dan kaedah pemantauan ini perlu dialih keluar pada masa hadapan. Jika anda boleh menambah kod secara dinamik semasa sistem berjalan, masalah dapat diselesaikan dengan baik. Pengaturcaraan berorientasikan aspek (AOP) ialah cara menambahkan kod secara dinamik pada masa jalan sistem. Spring Boot menyediakan sokongan yang baik untuk AOP. Dalam AOP, terdapat beberapa konsep biasa untuk difahami:

  • Mata gabungan ialah kaedah dalam kelas yang boleh dipertingkatkan. Sebagai contoh, jika anda ingin mengubah suai fungsi kaedah itu, maka kaedah itu ialah titik sambungan

  • Pointcut merujuk kepada mentakrifkan operasi memintas titik gabungan. Takrifan ini merujuk kepada memintas semua kaedah bermula dengan sisipan sebagai titik masuk

  • Selepas memintas Joinpoint, operasi yang perlu dilakukan ialah menghantar pemberitahuan. Sebagai contoh, pemantauan log cetakan yang dinyatakan sebelum ini. Pemberitahuan dibahagikan kepada prapemberitahuan, pascapemberitahuan, pemberitahuan pengecualian, pemberitahuan akhir dan pemberitahuan sekitar

  • Aspek: gabungan Pointcut dan Nasihat

  • Sasaran (objek sasaran): Kelas yang akan dipertingkatkan menjadi Sasaran

Spring Boot menyokong

Spring Boot menyediakan automasi untuk konfigurasi AOP berdasarkan pada Spring penyelesaian spring-boot-starter-aop, mula-mula perkenalkan dependencies, seperti berikut:

<!--    AOP 依赖    -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
Salin selepas log masuk

Kemudian buat kelas UserService di bawah pakej com.sang.aop.service, seperti berikut:

@Service
public class UserService {
    public String getUserById(Integer id){
        System.out.println("get...");
        return "user";
    }
    public void deleteUserById(Integer id){
        System.out.println("delete...");
    }
}
Salin selepas log masuk

Kemudian cipta Aspek, seperti berikut:

@Component
@Aspect
public class LogAspect {
    @Pointcut("execution(* com.sang.aop.service.*.*(..))")
    public void pc1() {
    }
    @Before(value = "pc1()")
    public void before(JoinPoint jp) {
        String name = jp.getSignature().getName();
        System.out.println(name + "方法开始执行...");
    }
    @After(value = "pc1()")
    public void after(JoinPoint jp) {
        String name = jp.getSignature().getName();
        System.out.println(name + "方法执行结束...");
    }
    @AfterReturning(value = "pc1()", returning = "result")
    public void afterReturning(JoinPoint jp, Object result) {
        String name = jp.getSignature().getName();
        System.out.println(name + "方法返回值为:" + result);
    }
    @AfterThrowing(value = "pc1()",throwing = "e")
    public void afterThrowing(JoinPoint jp, Exception e) {
        String name = jp.getSignature().getName();
        System.out.println(name+"方法抛异常了,异常是:"+e.getMessage());
    }
    @Around("pc1()")
    public Object around(ProceedingJoinPoint pjp) throws Throwable {
        return pjp.proceed();
    }
}
Salin selepas log masuk

Penerangan kod:

  • @Anotasi aspek menunjukkan bahawa ini ialah kelas aspek

  • @Pointcut( ) anotasi digunakan dalam kaedah pc1() untuk mentakrifkan pointcut.. * pertama dalam pelaksanaan menunjukkan bahawa kaedah mengembalikan sebarang nilai, yang kedua * menunjukkan mana-mana kelas di bawah pakej perkhidmatan, yang ketiga * menunjukkan sebarang kaedah dalam kelas, dan dua titik dalam kurungan menunjukkan bahawa parameter kaedah adalah sewenang-wenangnya, seperti yang diterangkan. di sini Titik masuk ialah semua kaedah dalam semua kelas di bawah pakej perkhidmatan

  • kaedah sebelum() menggunakan anotasi @Before, menunjukkan bahawa ini adalah pra-pemberitahuan dan kaedah itu dilaksanakan sebelum kaedah sasaran dilaksanakan. Parameter JoinPoint boleh memberikan nama, pengubah suai dan maklumat lain tentang kaedah sasaran

  • kaedah selepas() menggunakan anotasi @After, menunjukkan bahawa ini ialah pemberitahuan selepas. kaedah berada dalam kaedah sasaran Laksanakan selepas pelaksanaan

  • kaedah afterReturning() menggunakan anotasi @AfterReturning, menunjukkan bahawa ini adalah pemberitahuan pulangan dan nilai pulangan kaedah sasaran boleh diperolehi dalam kaedah ini. Parameter pemulangan dalam anotasi @AfterReturning mewakili nama pembolehubah nilai pulangan yang sepadan dengan parameter kaedah. Ambil perhatian bahawa jenis hasil ditakrifkan dalam parameter kaedah sebagai Objek, yang bermaksud bahawa nilai pulangan kaedah sasaran boleh dari mana-mana jenis Jika jenis parameter hasil adalah Panjang, maka kaedah ini hanya boleh mengendalikan situasi di mana nilai pulangan kaedah sasaran ialah Panjang

  • Kaedah afterThrowing() menggunakan anotasi @AfterThrowing, menunjukkan bahawa ini ialah pemberitahuan pengecualian, iaitu, apabila pengecualian berlaku dalam sasaran kaedah, kaedah akan dipanggil Jenis pengecualian ialah Pengecualian, yang bermaksud bahawa semua pengecualian akan dimasukkan Dieksekusi dalam kaedah ini, jika jenis pengecualian ialah ArithmeticException, ia bermakna hanya apabila kaedah sasaran membuang pengecualian ArithmeticException, kaedah itu akan menjadi. dimasukkan untuk diproses

  • Versi perenggan ini yang ditulis semula: Kaedah around() yang dianotasi dengan @Around dipanggil nasihat sekeliling. Pemberitahuan keliling mempunyai fungsi yang paling berkuasa daripada semua pemberitahuan Ia boleh melaksanakan pra-pemberitahuan, pasca-pemberitahuan, pemberitahuan pengecualian dan pemberitahuan kembali. Selepas kaedah sasaran memasuki pemberitahuan sekeliling, kaedah sasaran meneruskan pelaksanaan dengan memanggil kaedah proceed bagi objek ProceedingJoinPoint Pembangun boleh mengubah suai parameter pelaksanaan, nilai pulangan, dsb. kaedah sasaran di sini dan mengendalikan pengecualian kaedah sasaran <. 🎜>

Selepas konfigurasi selesai, buat antara muka dalam pengawal dan hubungi kedua -dua kaedah dalam perkhidmatan pengguna masing -masing. , seperti berikut:

kaedah getUserById mula dilaksanakan...

get...
nilai pulangan kaedah getUserById ialah: pengguna
perlaksanaan kaedah getUserById tamat...
Kaedah deleteUserById mula dilaksanakan...
padam...
nilai pulangan kaedah deleteUserById ialah: null
perlaksanaan kaedah deleteUserById tamat...

Lain-lain

Halaman alu-aluan tersuai

Selepas projek Spring Boot dimulakan, ia akan mencari index.html sebagai fail halaman utama dalam laluan sumber statik Jika ia tidak ditemui, ia akan mencari indeks dinamik .html sebagai fail halaman utama.

例如,如果想使用静态的 index.html 页面作为项目的首页,只需在 resources/static 目录下创建 index.html 文件疾苦。若想使用动态页面作为项目首页,则需在 resources/templages 目录下创建 index.html (使用Thymeleaf 模板) 或者 index.ftl(使用 FreeMarker 模板),然后在 Controller 中返回逻辑视图名,如下:

@Controller
public class IndexController {
    @RequestMapping("/index")
    public String index(){
        return "index";
    }
}
Salin selepas log masuk

运行项目,输入"http://localhost:8081",查看结果

Bagaimana untuk mengkonfigurasi integrasi AOP SpringBoot dengan Web

自定义 favicon

favicon.ico 是浏览器选项卡左上角的图标,可以放在静态资源路径下或者类路径下,静态资源路径下的 favicon.ico 优先级高于类路径下的 favicon.ico

可以使用在线转换网站:https://www.bitbug.net/ 将一张普通图片转为 .ico 图片,转换成功后,将文件重命名为 favicon.ico ,然后复制到 resources/static 目录下,如图

Bagaimana untuk mengkonfigurasi integrasi AOP SpringBoot dengan Web

启动项目,查看效果

Bagaimana untuk mengkonfigurasi integrasi AOP SpringBoot dengan Web

注意:清缓存,然后 Ctrl+F5 强制刷新

除去某个自动配置

Spring Boot 中提供了大量的自动化配置类,在 Spring Boot 的入口类上有一个 @SpringBootApplication 注解。该注解是一个组合注解,由 @SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan 组成,其中 @EnableAutoConfiguration 注解开启自动化配置,相关的自动化配置就会被使用。要移除某个自动化配置,开发者可以按照以下方法进行相应的配置更改

@SpringBootApplication
@EnableAutoConfiguration(exclude = {ErrorMvcAutoConfiguration.class})
public class Chapter04Application {
    public static void main(String[] args) {
        SpringApplication.run(Chapter04Application.class, args);
    }
}
Salin selepas log masuk

在 @EnableAutoConfiguration 注解中使用 exclude 属性去除 Error 的自动化配置类,这时如果在 resources/static/error 目录下创建 4xx.htnl、5xx.html ,访问出错时就不会自动跳转了。由于 @EnableAutoConfiguration 注解的 exclude 属性值是一个数组,因此有多个要排除的自动化配置文件只需要继续添加即可。另外一种配置方法是在 application.properties 文件中进行配置,示例如下:

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration

添加前

Bagaimana untuk mengkonfigurasi integrasi AOP SpringBoot dengan Web

添加后

Bagaimana untuk mengkonfigurasi integrasi AOP SpringBoot dengan Web

Atas ialah kandungan terperinci Bagaimana untuk mengkonfigurasi integrasi AOP SpringBoot dengan Web. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan