Spring Annotation註解進行aop的學習

来源:http://www.cnblogs.com/light-dzhg/archive/2016/08/28/5814107.html
-Advertisement-
Play Games

使用Maven管理項目,pom文件為: 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="h ...


使用Maven管理項目,pom文件為:

 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3     <modelVersion>4.0.0</modelVersion>
 4     <groupId>com.dzg</groupId>
 5     <artifactId>spring_study</artifactId>
 6     <version>0.0.1-SNAPSHOT</version>
 7     <properties>
 8         <maven.compiler.source>1.8</maven.compiler.source>
 9         <maven.compiler.target>1.8</maven.compiler.target>
10         <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
11     </properties>
12 
13     <dependencies>
14         <dependency>
15             <groupId>org.springframework</groupId>
16             <artifactId>spring-context</artifactId>
17             <version>4.3.2.RELEASE</version>
18         </dependency>
19         <!-- https://mvnrepository.com/artifact/junit/junit -->
20         <dependency>
21             <groupId>junit</groupId>
22             <artifactId>junit</artifactId>
23             <version>4.12</version>
24         </dependency>
25         <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjrt -->
26         <dependency>
27             <groupId>org.aspectj</groupId>
28             <artifactId>aspectjrt</artifactId>
29             <version>1.8.9</version>
30         </dependency>
31         <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
32         <dependency>
33             <groupId>org.aspectj</groupId>
34             <artifactId>aspectjweaver</artifactId>
35             <version>1.8.9</version>
36         </dependency>
37         <!-- https://mvnrepository.com/artifact/aopalliance/aopalliance -->
38         <dependency>
39             <groupId>aopalliance</groupId>
40             <artifactId>aopalliance</artifactId>
41             <version>1.0</version>
42         </dependency>
43 
44     </dependencies>
45 </project>
pom.xml

 

建立User類:

 1 package com.dzg.spring.model;
 2 
 3 public class User {
 4     private int id;
 5     private String password;
 6     private String username;
 7     public int getId() {
 8         return id;
 9     }
10     public String getPassword() {
11         return password;
12     }
13     public String getUsername() {
14         return username;
15     }
16     public void setId(int id) {
17         this.id = id;
18     }
19     public void setPassword(String password) {
20         this.password = password;
21     }
22     public void setUsername(String username) {
23         this.username = username;
24     }
25 }
User.java

 

建立UserService類:

 1 package com.dzg.spring.service;
 2 
 3 import javax.annotation.Resource;
 4 
 5 import org.springframework.stereotype.Component;
 6 
 7 import com.dzg.spring.dao.UserDAO;
 8 import com.dzg.spring.model.User;
 9 
10 @Component
11 public class UserService {
12 
13     private UserDAO userDAO;
14 
15     public void add(User user) {
16         userDAO.save(user);
17     }
18 
19     public UserDAO getUserDAO() {
20         return userDAO;
21     }
22 
23     public UserService() {
24 
25     }
26 
27     @Resource(name = "u")
28     public void setUserDAO(UserDAO userDAO) {
29         this.userDAO = userDAO;
30     }
31 
32 }
UserService.java

 

建立UserDAO介面類:

1 package com.dzg.spring.dao;
2 
3 import com.dzg.spring.model.User;
4 
5 public interface UserDAO {
6     public void save(User user);
7 }
UserDAO.java

 

建立實現UserDAO介面的實體類UserDAOImpl類:

 1 package com.dzg.spring.dao.impl;
 2 
 3 import org.springframework.stereotype.Component;
 4 
 5 import com.dzg.spring.dao.UserDAO;
 6 import com.dzg.spring.model.User;
 7 
 8 @Component("u")
 9 public class UserDAOImpl implements UserDAO {
10 
11     @Override
12     public void save(User user) {
13         System.out.println("user saved!");
14     }
15 
16 }
UserDAOImpl.java

 

建立LogInterceptor類:

 1 package com.dzg.spring.aop;
 2 
 3 import org.aspectj.lang.annotation.Aspect;
 4 import org.aspectj.lang.annotation.Before;
 5 import org.springframework.stereotype.Component;
 6 
 7 @Aspect
 8 @Component("log")
 9 public class LogInterceptor {
10 
11     @Before("execution(public void com.dzg.spring.dao.impl.UserDAOImpl.save(com.dzg.spring.model.User))")
12     public void beforeMethod() {
13         System.out.println("save start!");
14     }
15 
16 }
LogInterceptor.java

 beans.xml文件:

 

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
 4     xmlns:aop="http://www.springframework.org/schema/aop"
 5     xsi:schemaLocation="http://www.springframework.org/schema/beans
 6         http://www.springframework.org/schema/beans/spring-beans.xsd
 7         http://www.springframework.org/schema/context
 8         http://www.springframework.org/schema/context/spring-context.xsd
 9         http://www.springframework.org/schema/aop
10         http://www.springframework.org/schema/aop/spring-aop.xsd">
11 
12     <context:annotation-config></context:annotation-config>
13     <context:component-scan base-package="com.dzg.spring"></context:component-scan>
14     <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
15     <!-- <bean id="userDAO" class="com.dzg.spring.dao.impl.UserDAOImpl"></bean> 
16         <bean id="logInterceptor" class="com.dzg.spring.aop.LogInterceptor"></bean> 
17         <bean id="userService" class="com.dzg.spring.service.UserService"> <property 
18         name="UserDAO" ref="userDAO" /> </bean> -->
19 </beans>
beans.xml

 

測試代碼(使用的是junit測試)

 1 package com.dzg.spring.service;
 2 
 3 import org.junit.Test;
 4 import org.springframework.context.support.ClassPathXmlApplicationContext;
 5 
 6 import com.dzg.spring.model.User;
 7 
 8 public class UserServiceTest {
 9 
10     @Test
11     public void testAdd() throws Exception {
12         ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
13 
14         UserService service = (UserService) ctx.getBean("userService");
15         System.out.println(service.getClass());
16         User u = new User();
17         u.setUsername("zhangsan");
18         u.setPassword("zhangsan");
19         service.add(u);
20         ctx.close();
21     }
22 
23 }
UserServiceTest.java

 

控制台輸出:

class com.dzg.spring.service.UserService$$EnhancerBySpringCGLIB$$21c652e7
Method Around Start!
Method start!
user saved!
Method Around Complete!
Method Complete!

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、MyBaris簡介 1)MyBaris發展過程 MyBatis的前身叫iBatis,本是apache的一個開源項目, 2010年這個項目由apache software foundation 遷移到了google code,並且改名為MyBatis。 MyBatis是支持普通SQL查詢,存儲過程 ...
  • (一) 接需求 : 需求相關 (貼圖 ) 生成三核對文件 1、新增三核對菜單頁面中,增加生成三核對文件功能按鈕,彈窗可根據變電站、電壓等級查詢定值單。 2、定值單信息以表格形式展示,根據選擇情況,生成三核對文件。 整體就是這樣的一個需求,分sheet,合併單元格,設置各種單元格格式,要有序號。 (二 ...
  • Mybatis是輕量級的持久化框架,的確上手非常快. Mybatis大體上的思路就是由一個總的config文件配置全局的信息,比如mysql連接信息等。然後再mapper中指定查詢的sql,以及參數和返回值。 在Service中直接調用這個mapper即可。 依賴的jar包 主要的mybatis配置 ...
  • ...
  • JPA規範推薦使用Annotation來管理實體類與數據表之間的映射關係,從而避免同時維護兩份文件(Java 實體類 和 XML 映射文件),將映射信息(寫在Annotation中)與實體類集中在一起。 以下我將使用eclipse來構建一個簡單使用註解取代*.hbm.xml的查詢小例子。(p.s 建 ...
  • 首先需要導入包 然後寫方法,由於我使用的框架全部是spring 此處我只寫入實現層和控制層代碼 其中有個selectMatYearPlan(MAT_NO_, MAT_DESC_, MAT_TYPE_, MAT_SPEC_CAT_CODE_, COM_CODE_, DEPT_CODE_, YEAR_, ...
  • 應對場景: 相對於開發在一臺電腦上運行的單個程式,如何讓一個應用中的多個獨立的程式協同工作是一件非常困難的事情。開發這樣的應用,很容易讓很多開發人員陷入如何使多個程式協同工作的邏輯中,最後導致沒有時間更好地思考和實現他們自己的應用程式邏輯;又或者開發人員對系統邏輯關註不夠,只是用很少的時間開發了一 ...
  • 文件操作 1.能調用方法的一定是對象,比如數值、字元串、列表、元組、字典,甚至文件也是對象,Python中一切皆為對象。 2.三種基本的文件操作模式:r(only-read)、w(only-write)、a(append) 對文件進行操作的流程:第一,建立文件對象。第二,調用文件方法進行操作。第三, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...