AspectJ AOP例子
最近在学习Spring AOP,其中涉及到AspectJ的AOP框架。主要参考:http://howtodoinjava.com/spring/spring-aop/spring-aop-aspectj-example-tutorial-using-annotation-config/
在编写例子之前,先熟悉几个spring AOP中专业术语:
1. advice,通知,就是在方法之前或者之后你需要做的事情,比如日志记录,事务之类的等等。
2. pointCut,切入点,主要一系列表达式
3. join points,连接点,是为了切入点而定义出来的,pointCut对应的一系列方法
4. aspect, 切面, advice+pointCut,可以确定什么时候(before, after, around)做事情,在哪个点(pointCut)做
在spring中主要使用代理来包裹切面,把他们织入spring管理的bean中。其中有两个方法:
1. 和目标类实现相同的接口
2. 继承目标类
这两种方式都可以通过jvm的检查,在执行具体的功能时还是由目标类完成,伪装类可以在此之前做一些其他的事情。
接下来是一个AspectJ的小例子。
首先,创建一个切面,使用@Aspect注解
@Aspect
public class EmployeeCRUDAspect { @Before("execution(public * howtodoinjava.com.manager.EmployeeManager.*(..))")
public void logBeforeV1(JoinPoint joinPoint)
{
System.out.println("EmployeeCRUDAspect.logBeforeV1() : " + joinPoint.getSignature().getName());
}
然后,对aop进行配置,applicationContext.xml文件的内容是:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <!-- aop命名空间 -->
<aop:aspectj-autoproxy /> <context:component-scan base-package="howtodoinjava.com" /> <bean id="loggingAspect" class="howtodoinjava.com.aspect.EmployeeCRUDAspect" /> </beans>
其他辅助类有EmployeeDTO.java和EmployeeManager.java
---EmployeeDTO.java
package howtodoinjava.com.manager;
import java.util.ArrayList;
import java.util.List;
import howtodoinjava.com.dto.EmployeeDTO;
import org.springframework.stereotype.Component;
@Component
public class EmployeeManager
{
public EmployeeDTO getEmployeeById(Integer employeeId) {
System.out.println("Method getEmployeeById() called");
return new EmployeeDTO();
}
public List<EmployeeDTO> getAllEmployee() {
System.out.println("Method getAllEmployee() called");
return new ArrayList<EmployeeDTO>();
}
public void createEmployee(EmployeeDTO employee) {
System.out.println("Method createEmployee() called");
}
public void deleteEmployee(Integer employeeId) {
System.out.println("Method deleteEmployee() called");
}
public void updateEmployee(EmployeeDTO employee) {
System.out.println("Method updateEmployee() called");
}
}
----EmloyeeManager.java
package howtodoinjava.com.manager; import java.util.ArrayList;
import java.util.List; import howtodoinjava.com.dto.EmployeeDTO; import org.springframework.stereotype.Component; @Component
public class EmployeeManager
{
public EmployeeDTO getEmployeeById(Integer employeeId) {
System.out.println("Method getEmployeeById() called");
return new EmployeeDTO();
} public List<EmployeeDTO> getAllEmployee() {
System.out.println("Method getAllEmployee() called");
return new ArrayList<EmployeeDTO>();
} public void createEmployee(EmployeeDTO employee) {
System.out.println("Method createEmployee() called");
} public void deleteEmployee(Integer employeeId) {
System.out.println("Method deleteEmployee() called");
} public void updateEmployee(EmployeeDTO employee) {
System.out.println("Method updateEmployee() called");
}
}
构建完成之后,创建测试类TestAOP.java
public class TestAOP
{
@SuppressWarnings("resource")
public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("howtodoinjava/com/aspect/applicationContext.xml");
EmployeeManager manager = context.getBean(EmployeeManager.class); manager.getEmployeeById(1);
manager.createEmployee(new EmployeeDTO());
}
}
执行结果如下:
EmployeeCRUDAspect.logBeforeV1() : getEmployeeById
Method getEmployeeById() called
EmployeeCRUDAspect.logBeforeV1() : createEmployee
Method createEmployee() called
AspectJ AOP例子的更多相关文章
- Spring AspectJ AOP 完整示例
http://outofmemory.cn/java/spring/AOP/aop-aspectj-example-before-after-AfterReturning-afterThrowing- ...
- AspectJ AOP学习基础
一.切入点表达式 1.execution:匹配方法的执行 格式:execution(修饰符 返回值类型 包.类.方法(参数) throw 异常) 1.1修饰符,表示方法的修饰符,一般省略. 1.2返回 ...
- 一个简单的Spring AOP例子
转载自: http://www.blogjava.net/javadragon/archive/2006/12/03/85115.html 经过这段日子的学习和使用Spring,慢慢地体会到Sprin ...
- Spring IOC 和Aspectj AOP
1.Aspectj AOP 是一套独立的AOP 解决方案,不仅限于java应用,不依赖其他方案,属于编译时增强,有自己单独的编译器.Spring AOP 是基于Spring 容器的的AOP解决方式,属 ...
- spring aop例子
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAATcAAAFWCAIAAACD6E2aAAAgAElEQVR4nO2df1gTV77/55/93z/2ee
- AspectJ AOP介绍
idea下aspectj程序运行示例 有些同学可能想自己编写aspect程序进行测试练习,博主在这简单介绍运行环境的搭建,首先博主使用的idea的IDE,因此只对idea进行介绍.首先通过maven仓 ...
- aop 例子(annotation方式实现)
面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术.AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之 ...
- Spring AOP and AspectJ AOP 有什么区别?
Spring AOP 基于动态代理方式实现:AspectJ 基于静态代理方式实现.Spring AOP 仅支持方法级别的 PointCut:提供了完全的 AOP 支持,它还支持属性级别的 PointC ...
- 一个简单的Spring的AOP例子
目标对象的接口:IStudent.java 1 /** 2 * 3 */ 4 package com.dragon.study; 5 6 /** 7 * @author ...
随机推荐
- 前端开发面试题收集 JS
前端开发面试题收集-JS篇 收集经典的前端开发面试题 setTimeout的时间定义为0有什么用? javascript引擎是单线程处理任务的,它把任务放在队列中,不会同步执行,必须在完成一个任务后才 ...
- os模块实现遍历文件
使用OS模块中的walk实现文件遍历. walk(top, topdown=True, onerror=None, followlinks=False) 从官方提供的doc中看到有四个参数 1> ...
- MYSQL 关闭二进制日志
方法 set sql_log_bin = 0; ---------------------------------------------------------------------------- ...
- ApiDemos示例学习(1)——ApiDemos示例的导入
---恢复内容开始--- 今天准备开始写这个ApiDemos示例的学习日记了,放在网上以监督自己! 首先是导入该示例.如果我们在配置Android开发环境是,利用Android SDK 安装包中的SD ...
- .net c# 正则表达式 平衡组/递归匹配
原文 http://www.cnblogs.com/qiantuwuliang/archive/2011/06/11/2078482.html 平衡组/递归匹配 这里介绍的平衡组语法是由.Net Fr ...
- docker 私有仓库上传镜像,其他docker服务器从私有镜像下载
<pre name="code" class="cpp">docker:/data# docker ps CONTAINER ID IMAGE CO ...
- at java.util.concurrent.ConcurrentHashMap.hash(ConcurrentHashMap.java:333)
at java.util.concurrent.ConcurrentHashMap.hash(ConcurrentHashMap.java:333) 原因: null request
- LInux 下安装jdk
安装jdk版本为1.6.0_12 一.下载jdk 下载地址:http://download.java.net/jdk6/ 选择Linux Platform jdk-6u12-linux-i586.bi ...
- static wechat red package tool
---------------------------------------------------------------------------------------------------- ...
- db2 for linux
https://www6.software.ibm.com/sdfdl/v2/regs2/db2pmopn/db2_v101/expc/Xa.2/Xb.aA_60_-idYiSFeSuWlF5-w4v ...