中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot中怎么實現aop面向切面編程

發布時間:2021-06-11 17:03:23 來源:億速云 閱讀:176 作者:Leah 欄目:編程語言

SpringBoot中怎么實現aop面向切面編程,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。AOP是Spring框架中的一個重要內容,它通過對既有程序定義一個切入點,然后在其前后切入不同的執行內容,比如常見的有:打開數據庫連接/關閉數據庫連接、打開事務/關閉事務、記錄日志等。基于AOP不會破壞原來程序邏輯,因此它可以很好的對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發的效率。

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面向切面編程問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

肥西县| 进贤县| 临澧县| 黑河市| 南平市| 西乌珠穆沁旗| 大方县| 九龙坡区| 南京市| 柯坪县| 泰宁县| 富锦市| 阳东县| 偏关县| 进贤县| 湄潭县| 新竹县| 达拉特旗| 万安县| 兴海县| 左权县| 如皋市| 浦东新区| 原阳县| 绩溪县| 梅州市| 张家界市| 通城县| 甘南县| 喀喇| 昌都县| 红安县| 新宁县| 平顺县| 洛川县| 衡山县| 汾西县| 德州市| 甘德县| 安福县| 雷波县|