SpringBoot中怎么實現aop面向切面編程,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。AOP是Spring框架中的一個重要內容,它通過對既有程序定義一個切入點,然后在其前后切入不同的執行內容,比如常見的有:打開數據庫連接/關閉數據庫連接、打開事務/關閉事務、記錄日志等?;贏OP不會破壞原來程序邏輯,因此它可以很好的對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發的效率。
spring aop默認是使用JDK動態代理,即基于接口的代理,可以通過proxy-target-class屬性修改。如果proxy-target-class=true, 那基于類的代理將起作用(這時需要cglib庫)。
引入依賴
<!--aop--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <!--spring 的aop默認是使用JDK代理,即--> <!--用來動態代理用的,基于類的代理--> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>3.2.12</version> </dependency>
注:在完成了引入AOP依賴包后,一般來說并不需要去做其他配置。也許在Spring中使用過注解配置方式的人會問是否需要在程序主類中增加@EnableAspectJAutoProxy來啟用,實際并不需要。AOP的默認配置屬性中spring.aop.auto屬性默認是開啟的,也就是說只要引入了AOP依賴后,默認已經增加了@EnableAspectJAutoProxy。
實現AOP的切面主要有以下幾個要素:
使用@Aspect注解將一個java類定義為切面類
使用@Pointcut定義一個切入點,可以是一個規則表達式,比如某個package下的所有函數,也可以是一個注解等。
根據需要在切入點不同位置的切入內容,即不同的通知:@Before、@After、@AfterReturning、@Around、@AfterThrowing
普通業務組件
/**
* 普通業務組件
*/
@Component
public class CustomerBusiness {
private String message;
public void setMessage(String message) {
this.message = message;
}
public void getMessage() {
System.out.println("Your Message : " + message);
}
}切面
@Aspect //聲明式一個切面組件
@Component //加入到IoC容器
public class TimeHandler {
//指定切入點表達式,攔截那些方法,即為哪些類生成代理對象
@Pointcut("execution(* com.linhw.demo.ascpet.CustomerBusiness.*())")
public void pointCut(){
}
@Before("pointCut()")
public void printBeforeTime() {
System.out.println("---------------Before CurrentTime = " + System.currentTimeMillis());
}
@After("pointCut()")
public void prinAftertTime() {
System.out.println("---------------After CurrentTime = " + System.currentTimeMillis());
}
}測試
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = {AopApplication.class})
public class AopTest {
@Autowired
CustomerBusiness business;
@Test
public void testAop(){
business.setMessage("hello world");
business.getMessage();
}
}關于SpringBoot中怎么實現aop面向切面編程問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。