Um aspektorientierte Programmierung (AOP) einzuführen, müssen Sie zunächst ein Szenario wie dieses in Betracht ziehen: Das Unternehmen verfügt über ein Personalverwaltungssystem, das derzeit online ist, aber das System läuft instabil und Manchmal läuft es sehr langsam. Um herauszufinden, bei welchem Link das Problem auftritt, möchte der Entwickler die Ausführungszeit jeder Methode überwachen und dann das Problem anhand dieser Ausführungszeiten ermitteln. Wenn das Problem behoben ist, entfernen Sie diese Monitore. Das System wird derzeit ausgeführt. Wenn Sie Tausende von Methoden im System manuell ändern, ist die Arbeitslast zu groß und diese Überwachungsmethoden müssen in Zukunft entfernt werden Problem lässt sich sehr gut lösen. Aspektorientierte Programmierung (AOP) ist eine Möglichkeit, Code dynamisch zur Systemlaufzeit hinzuzufügen. Spring Boot bietet gute Unterstützung für AOP. In AOP sind einige allgemeine Konzepte zu verstehen:
Join-Punkte beziehen sich auf Methoden in einer Klasse, die erweitert werden können. Wenn Sie beispielsweise die Funktion dieser Methode ändern möchten, ist die Methode ein Verbindungspunkt. Pointcut bezieht sich auf die Definition des Vorgangs zum Abfangen des Verbindungspunkts. Diese Definition bezieht sich auf das Abfangen aller Methoden, die mit insert als Einstiegspunkt beginnen.
Nach dem Abfangen des Joinpoints besteht die auszuführende Operation darin, eine Benachrichtigung zu senden. Zum Beispiel die bereits erwähnte Druckprotokollüberwachung. Benachrichtigungen werden in Vorbenachrichtigungen, Nachbenachrichtigungen, Ausnahmebenachrichtigungen, endgültige Benachrichtigungen und umgebende Benachrichtigungen unterteilt. Aspekt (Aspekt): die Kombination aus Pointcut und Advice. Ziel (Zielobjekt): die zu seinde Klasse Erweitert wird zu Target . Erstellen Sie die UserService-Klasse unter dem Servicepaket wie folgt:
<!-- AOP 依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
@Service public class UserService { public String getUserById(Integer id){ System.out.println("get..."); return "user"; } public void deleteUserById(Integer id){ System.out.println("delete..."); } }
Code-Erklärung:
@Aspect-Annotation zeigt an, dass es sich um eine Aspektklasse handelt
@Pointcut ()-Annotation wird in der Methode pc1() verwendet, um einen Pointcut zu definieren. Das erste * in der Ausführung gibt an, dass die Methode einen beliebigen Wert zurückgibt, das zweite * gibt eine beliebige Klasse unter dem Servicepaket an, das dritte * gibt eine beliebige Methode in der Klasse an und die beiden Punkte in Klammern geben an, dass die Methodenparameter wie beschrieben beliebig sind hier Der Einstiegspunkt sind alle Methoden in allen Klassen unter dem Servicepaket
after()-Methode verwendet die @After-Annotation, was darauf hinweist, dass es sich um eine Nachbenachrichtigung handelt, die nach Ausführung der Zielmethode ausgeführt wird
afterReturning Die ()-Methode verwendet die Annotation @AfterReturning, um anzuzeigen, dass es sich um eine Rückgabebenachrichtigung handelt und der Rückgabewert der Zielmethode in dieser Methode abgerufen werden kann. Der Rückgabeparameter in der Annotation @AfterReturning stellt den Variablennamen des Rückgabewerts dar, der dem Methodenparameter entspricht. Beachten Sie, dass der Ergebnistyp in den Methodenparametern als Objekt definiert ist, was bedeutet, dass der Rückgabewert der Zielmethode einen beliebigen Typ haben kann. Wenn der Typ des Ergebnisparameters Long ist, kann diese Methode nur die Situation verarbeiten, in der Der Rückgabewert der Zielmethode ist Long
Die Methode afterThrowing () verwendet die Annotation @AfterThrowing und gibt an, dass es sich um eine Ausnahmebenachrichtigung handelt. Wenn also eine Ausnahme in der Zielmethode auftritt, wird die Methode aufgerufen. Der Ausnahmetyp ist Exception, was bedeutet, dass alle Ausnahmen in dieser Methode ausgeführt werden. Wenn der Ausnahmetyp ArithmeticException ist, bedeutet dies, dass die Methode nur dann zur Verarbeitung eingegeben wird, wenn die Zielmethode eine ArithmeticException-Ausnahme auslöst Neufassung dieses Absatzes: Die mit @Around annotierte Methode around() wird als Surround-Hinweis bezeichnet. Die Surround-Benachrichtigung verfügt über die leistungsstärkste Funktion aller Benachrichtigungen. Sie kann Vorbenachrichtigung, Nachbenachrichtigung, Ausnahmebenachrichtigung und Rückbenachrichtigung implementieren. Nachdem die Zielmethode die Surround-Benachrichtigung eingegeben hat, setzt die Zielmethode die Ausführung fort, indem sie die continue-Methode des ProceedingJoinPoint-Objekts aufruft. Entwickler können hier die Ausführungsparameter, Rückgabewerte usw. der Zielmethode ändern und Ausnahmen der Zielmethode behandeln
Konfiguration Erstellen Sie nach Abschluss eine Schnittstelle im Controller und rufen Sie die beiden Methoden im Userservice auf. Sie können sehen, dass der Code im LogAspect wie folgt dynamisch in die Zielmethode eingebettet und ausgeführt wird:
get...
getUserById-Methodenrückgabewert ist: userdelete...
deleteUserById-Methodenrückgabewert ist: null例如,如果想使用静态的 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"; } }
运行项目,输入"http://localhost:8081",查看结果
favicon.ico 是浏览器选项卡左上角的图标,可以放在静态资源路径下或者类路径下,静态资源路径下的 favicon.ico 优先级高于类路径下的 favicon.ico
可以使用在线转换网站:https://www.bitbug.net/ 将一张普通图片转为 .ico 图片,转换成功后,将文件重命名为 favicon.ico ,然后复制到 resources/static 目录下,如图
启动项目,查看效果
注意:清缓存,然后 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); } }
在 @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
添加前
添加后
Das obige ist der detaillierte Inhalt vonSo konfigurieren Sie die AOP-Integration von SpringBoot mit Web. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!