Aspectj框架实战案例详解

 更新时间:2020年01月03日 08:54:47   作者:cakincqm  
这篇文章主要介绍了Aspectj框架实战,结合具体案例形式详细分析了Aspectj框架具体配置、使用、编译等相关操作技巧,需要的朋友可以参考下

本文实例讲述了Aspectj框架。分享给大家供大家参考,具体如下:

一 环境变量配置

CLASSPATH配置为:

.;d:\aspectj1.8\lib\aspectjrt.jar;D:\Program\Java\jdk1.8.0_162\lib\dt.jar;D:\Program\Java\jdk1.8.0_162\lib\tools.jar;

path要配置为:

d:\aspectj1.8\bin

二 代码

1 JavaBean

Hello.java

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

World.java

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

2 AOP

AuthAspect.java

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

LogAspect.java

package org.crazyit.app.aspect;
public aspect LogAspect
{
  // 定义一个PointCut,其名为logPointcut,
  // 该Pointcut代表了后面给出的切入点表达式,这样可复用该切入点表达式
  pointcut logPointcut()
    :execution(* org.crazyit.app.service.*.*(..));
  after():logPointcut()
  {
    System.out.println("模拟记录日志...");
  }
}

TxAspect.java

package org.crazyit.app.aspect;
public aspect TxAspect
{
  // 指定执行Hello.sayHello()方法时执行下面代码块
  Object around():call(* org.crazyit.app.service.*.*(..))
  {
    System.out.println("模拟开启事务...");
    // 回调原来的目标方法
    Object rvt = proceed();
    System.out.println("模拟结束事务...");
    return rvt;
  }
}

3 测试类

package lee;
import org.crazyit.app.service.Hello;
import org.crazyit.app.service.World;
public class AspectJTest
{
  public static void main(String[] args)
  {
    Hello hello = new Hello();
    hello.foo();
    hello.addUser("孙悟空" , "7788");
    World world = new World();
    world.bar();
  }
}

三 编译

G:\test\AspectJQs>ajc -d . *.java

四 编译后的结构

G:\test\AspectJQs>tree /f
卷 VirtualOS 的文件夹 PATH 列表
卷序列号为 8600-758F
G:.
│  AspectJTest.java
│  AuthAspect.java
│  Hello.java
│  LogAspect.java
│  TxAspect.java
│  World.java

├─lee
│      AspectJTest.class

└─org
    └─crazyit
        └─app
            ├─aspect
            │      AuthAspect.class
            │      LogAspect.class
            │      TxAspect.class
            │
            └─service
                    Hello.class
                    World.class

五 运行

G:\test\AspectJQs>java lee.AspectJTest
模拟开启事务...
模拟进行权限检查...
执行Hello组件的foo()方法
模拟记录日志...
模拟结束事务...
模拟开启事务...
模拟进行权限检查...
执行Hello组件的addUser添加用户:孙悟空
模拟记录日志...
模拟结束事务...
模拟开启事务...
模拟进行权限检查...
执行World组件的bar()方法
模拟记录日志...
模拟结束事务...

希望本文所述对大家基于Aspectj框架的java程序设计有所帮助。

相关文章

  • springboot集成Deepseek4j的项目实践

    springboot集成Deepseek4j的项目实践

    本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-03-03
  • Slf4j+logback实现JSON格式日志输出方式

    Slf4j+logback实现JSON格式日志输出方式

    这篇文章主要介绍了Slf4j+logback实现JSON格式日志输出方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 基于Java实现计数排序,桶排序和基数排序

    基于Java实现计数排序,桶排序和基数排序

    这篇文章主要为大家详细介绍了计数排序,桶排序和基数排序的多种语言的实现(JavaScript、Python、Go语言、Java),感兴趣的小伙伴可以了解一下
    2022-12-12
  • java基于ConcurrentHashMap设计细粒度实现代码

    java基于ConcurrentHashMap设计细粒度实现代码

    这篇文章主要介绍了java基于ConcurrentHashMap设计细粒度实现代码,通过ConcurrentHashMap实现细粒度,具有一定参考价值,需要的朋友可以了解。
    2017-10-10
  • java判断请求是来自PC端还是手机端小技巧

    java判断请求是来自PC端还是手机端小技巧

    这篇文章主要为大家介绍了java判断请求是来自PC端还是手机端小技巧,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • tio-boot整合hotswap-classloader实现热加载方法实例

    tio-boot整合hotswap-classloader实现热加载方法实例

    这篇文章主要为大家介绍了tio-boot整合hotswap-classloader实现热加载方法实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • jstorm源码解析之bolt异常处理方法

    jstorm源码解析之bolt异常处理方法

    下面小编就为大家带来一篇jstorm源码解析之bolt异常处理方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • 详解JVM虚拟机的类加载机制

    详解JVM虚拟机的类加载机制

    这篇文章主要介绍了详解JVM虚拟机的类加载机制,虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是虚拟机的类加载机制,需要的朋友可以参考下
    2023-08-08
  • 使用Java调用Yolo模型的基本步骤

    使用Java调用Yolo模型的基本步骤

    Yolo(You Only Look Once)是一种基于深度学习的目标检测算法,它可以在一张图像中同时检测出多个目标,并给出它们的位置和类别,这篇文章主要介绍了使用Java调用Yolo模型的基本步骤,需要的朋友可以参考下
    2024-03-03
  • jenkins按模块进行构建遇到的问题及解决方案

    jenkins按模块进行构建遇到的问题及解决方案

    这篇文章主要介绍了jenkins按模块进行构建的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05

最新评论