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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...