Aspectj框架实战案例详解
作者:cakincqm 发布时间:2022-12-30 02:28:24
本文实例讲述了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程序设计有所帮助。
来源:https://blog.csdn.net/chengqiuming/article/details/101554544
猜你喜欢
- 窗口是GUI编程的基础,小应用程序或图形界面的应用程序的可视组件都放在窗口中,在GUI中,窗口是用户屏幕的一部分,起着在屏幕中一个小屏幕的作
- 本文实例为大家分享了Android微信摇一摇功能的实现方法,供大家参考,具体内容如下import java.util.ArrayList;
- java 中newInstance()方法和new关键字的区别* 它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新
- 1、系统信息:Windows10 64位2、环境搭建参考:https://www.jb51.net/article/185086.htm3、
- 前言我们在写搬砖的过程中,少不了需要将A对象转成B对象,对对象进行对象的转换是一个操作重复且繁琐的工作。于是市面上就有许多的对象转换工具来解
- 一、问题在平时的业务模块开发过程中,难免会需要做一些全局的任务、缓存、线程等等的初始化工作,那么如何解决这个问题呢?方法有多种,但具体又要怎
- C#中,Image为源自 Bitmap 和 Metafile 的类提供功能的抽象基类,也就是说更通用,当我们用Image.FromFile(
- 这篇文章主要介绍了Spring StopWatch使用实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 1. 异常1.1 异常概念异常,就是不正常的意思。在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将受影响.
- 一、Lombok从上一篇博客可看出,DAO接口类的编写变得简单,反过来看模型,编写还需要(私有属性、setter...getter...方法
- 本文实例讲述了Java方法的参数传递机制。分享给大家供大家参考,具体如下:参数传递机制对于程序设计语言来说,一般方法(函数)的参数传递有两种
- 本文以一个简单的实例形式讲述了C#模板方法模式的实现方法,分享给大家供大家参考。具体实现方法如下:这里假设要做一道红烧肉,做法有很多,在不同
- 同时使用and和or的查询UserServiceImpl 类,service实现类import org.springframework.be
- 本文实例讲述了C#中的try catch finally用法。分享给大家供大家参考。具体分析如下:try中的程序块是有可能发生错误的程序块,
- 本次数据请求使用postman, postman下载地址:https://www.getpostman.com/一、页面跳转1. 页面跳转@
- 准备:wildfly/tomcat或者其他服务器你的数据库的Driver,(此处用的mysql-connecter-java-5.1.39-
- 前言:从MVC到WebApi,路由机制一直是伴随着这些技术的一个重要组成部分。它可以很简单:如果你仅仅只需要会用一些简单的路由,如/Home
- 在项目开发中,我们返回的数据或者对象没有的时候一般直接返回的null有数据时的返回值{ "flag": true, &q
- 前言现在不少应用都是采用了混合开发模式,不论是原生加RN,或是原生加Flutter,或是原生加H5。原生实现主业务线,其他部分可以借助跨平台
- 本文实例为大家分享了java实现双色球机选 * 的具体代码,供大家参考,具体内容如下双色球号码1~32不重复选6个(排序好),1~16中