1、去官方网站下载aspectj-1.8.0.jar

2、在jar包目录启动cmd,执行java -jar aspectj-1.8.0.jar,Next

3、检查JAVA_HOME路径是否正确,如果不正确,手动选择正确的JAVA_HOME,Next

4、选择安装路径,这个其实解压过程,后续可以将这个安装路径的文件复制到其他地方安装运行,无需通过运行aspectj-1.8.0.jar安装并往注册表中写入信息。Install,安装完毕

5、配置ASPECTJ_HOME环境变量,并添加到Path。将aspectjrt.jar添加进入classpath。环境配置完成,可以使用aspectj了。

6、简单的aspectj框架AOP应用。新建项目aspectjTest

7、编写相关代码Hello.java、World.java、AuthAspect.java、TransAspect.java、TxAspect.java、AfterAspect.java、AspectJTest.java

Hello.java

package com.lfy.bean;

public class Hello{

    // 定义一个简单方法,模拟应用中的业务逻辑方法
public void foo(){
System.out.println("执行Hello组件的foo()方法");
} //定义一个addUser()方法,模拟应用中添加用户的方法
public void addUser(String name,String pass){
System.out.println("执行Hello组件的addUser添加用户:"+name);
} public int sayHello(){
System.out.println("执行Hello组件的Hello.sysHello()打招呼");
return ;
}
}

World.java

package com.lfy.bean;

public class World{
//定义一个简单方法,模拟应用中的业务逻辑方法
public void bar(){
System.out.println("执行World组件的bar()方法");
}
}

AuthAspect.java

package com.lfy.aspect;

public aspect AuthAspect{
//指定在执行com.lfy.bean包中任意类的任意方法之前执行下面的代码块
//第一个*号表示返回值不限;第二个*号表示类名不限
//第三个*号表示方法名不限;圆括号中..代表任意个数、类型不限的形参
before():execution(* com.lfy.bean.*.*(..)){
System.out.println("模拟进行权限检查...");
}
}

TransAspect.java

package com.lfy.aspect;

public aspect TransAspect{

    void around():execution(void com.lfy.bean.*.*(..)){

        System.out.println("模拟事务的开始");
proceed();//回调函数
System.out.println("模拟事务的结束");
}
}

TxAspect.java

package com.lfy.aspect;

public aspect TxAspect{

    //定义Hello.sayHello()方法时执行下面的代码块
Object around():call(int com.lfy.bean.*.*(..)){ System.out.println("TxAspect模拟事务的开始");
Object rvt=proceed();//回调函数
System.out.println("TxAspect模拟事务的结束,目标方法返回值rvt为:"+rvt);
return rvt;
}
}

AfterAspect.java

package com.lfy.aspect;

public aspect AfterAspect{

//定义一个切入点,其名为logPointcut,其匹配表达式为execution(* com.lfy.bean.*.*(..))
pointcut logPointcut():execution(* com.lfy.bean.*.*(..));
after():logPointcut(){ System.out.println("方法结束时执行");
}
}

AspectJTest.java

package com.lfy.main;

import com.lfy.bean.Hello;
import com.lfy.bean.World; public class AspectJTest{ public static void main(String[] args){
Hello hello=new Hello();
World world=new World();
hello.foo();
System.out.println("");
hello.addUser("孙悟空","7788");
System.out.println("");
hello.sayHello();
System.out.println("");
world.bar();
}
}

8、编译运行,查看结果

进入src目录:执行 ajc -encoding utf-8 -sourceroots com,编译完成,没出现错误,在src目录,执行 java com.lfy.main.AspectJTest 运行主类

9、如果使用ant管理上面的Aspectj项目,需要将安装目录下的aspectjtools.jar添加到系统变量CLASSPATH中,并使用iajc标签进行编译。

spring-第十五篇之AOP面向切面编程之AspectJ框架简单应用的更多相关文章

  1. spring-第十六篇之AOP面向切面编程之Spring AOP

    1.上一篇介绍了AspectJ在AOP的简单应用,让我们了解到它的作用就是:开发者无需修改源代码,但又可以为这些组件的方法添加新的功能. AOP的实现可分为两类(根据AOP修改源码的时机划分): 1& ...

  2. 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存

    代码已上传Github+Gitee,文末有地址 上回<从壹开始前后端分离[ .NET Core2.0 Api + Vue 2.0 + AOP + 分布式]框架之九 || 依赖注入IoC学习 + ...

  3. Z从壹开始前后端分离【 .NET Core2.0/3.0 +Vue2.0 】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存

    本文梯子 本文3.0版本文章 代码已上传Github+Gitee,文末有地址 大神反馈: 零.今天完成的深红色部分 一.AOP 之 实现日志记录(服务层) 1.定义服务接口与实现类 2.在API层中添 ...

  4. C#使用KingAOP实现AOP面向切面编程一

    AOP面向切面编程(Aspect Oriented Programming),是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. 实现AOP主要由两种方式,一种是编译时静态植入,优点是 ...

  5. Spring详解篇之 AOP面向切面编程

    一.概述 Aop(aspect oriented programming面向切面编程),是spring框架的另一个特征.AOP包括切面.连接点.通知(advice).切入点(pointCut) . 1 ...

  6. 重新学习之spring第二个程序,配置AOP面向切面编程

    第一步:在配置好的ioc容器的基础上,导入面向切面编程所需要的jar包 (本案例用的是spring3.2.4,由于spring3.2.4的官网jar包中不再有依赖包,所以依赖包都是从网上找的) 第二步 ...

  7. 面向切面编程之cglib代理方式

    思想: 和上一篇面向切面编程之手动JDK代理方式上的需求和开发模式一样.不同的是目标类没有接口,只有实现类,采用的是spring中提供的Enhancer类继承目标类实现的代理方式. 需要导入的jar包 ...

  8. Spring Boot2(六):使用Spring Boot整合AOP面向切面编程

    一.前言 众所周知,spring最核心的两个功能是aop和ioc,即面向切面和控制反转.本文会讲一讲SpringBoot如何使用AOP实现面向切面的过程原理. 二.何为aop ​ aop全称Aspec ...

  9. 跟我学SpringCloud | 第十五篇:微服务利剑之APM平台(一)Skywalking

    目录 SpringCloud系列教程 | 第十五篇:微服务利剑之APM平台(一)Skywalking 1. Skywalking概述 2. Skywalking主要功能 3. Skywalking主要 ...

随机推荐

  1. 以太坊智能合约开发工具 Truffle 入门1

    Truffle是以太坊(Ethereum)智能合约开发的瑞士军刀,小巧好用,上手简单. 本篇文章主要展示如何用Truffle 开发第一个Ethereum智能合约. 1.准备工作:(本人针对window ...

  2. 4.Pod控制器

    Controller-manager: Kube-controller-manager Cloud-controller-manager:在K8S上启用CloudProvider的时候才需要,用来配合 ...

  3. varnish流程图

    varnish流程图

  4. [CF1004E] Sonya and Ice-cream

    问题描述 Sonya likes ice cream very much. She eats it even during programming competitions. That is why ...

  5. 事物Spring boot @Transactional

    事物:dr @Override @UDS(value="fq") @Transactional public BaseResultMessage testTransactional ...

  6. javascript之大文件分段上传、断点续传(一)

    需求: 支持大文件批量上传(20G)和下载,同时需要保证上传期间用户电脑不出现卡死等体验: 内网百兆网络上传速度为12MB/S 服务器内存占用低 支持文件夹上传,文件夹中的文件数量达到1万个以上,且包 ...

  7. BZOJ 1776: [Usaco2010 Hol]cowpol 奶牛政坛 LCA + 树的直径

    Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) ...

  8. 文本跟随鼠标并且显示x轴和y轴位置

    一.文本跟随鼠标并且显示x轴和y轴位置 代码如下: window.onload=function(){ var mydiv = document.createElement("div&quo ...

  9. jsoncpp 源码编译与简单使用

    ******************************************************标准C++实现jsoncpp 源码使用编译(VC2012 MFC)(Qt5.2 Widget ...

  10. Behaviour Tree Service 中的几个函数

    Service中可以override的函数有8个,因为每个函数都有个AI版本的,所以实际上是4组函数,AI版本的和非AI版本基本一样, 他们分别是: Receive Search Start (AI) ...