aspectj

Using AspectJ annotations in maven project: weaving is not working

六眼飞鱼酱① 提交于 2020-03-05 06:31:05
问题 I am trying to use AspectJ in a simple project without using Spring, and while I have seen similar questions and my code seems to be correct, I don't understand why it's not working. I'm using Eclipse Oxygen 4.7.3 (not using AJDT tools), JDK 7, maven 3.5.2, and my code is as follows: pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

Spring源码学习笔记(7)

孤者浪人 提交于 2020-03-02 06:25:55
Spring源码学习笔记(七)    前言--     最近花了些时间看了《Spring源码深度解析》这本书,算是入门了Spring的源码吧。打算写下系列文章,回忆一下书的内容,总结代码的运行流程。推荐那些和我一样没接触过SSH框架源码又想学习的,阅读郝佳编著的《Spring源码深度解析》这本书,会是个很好的入门       写前说句话, 开篇不尴尬 ---- 接下的这一篇当中, 我们将来回顾 Spring 中 AOP 功能的实现流程。 早上精力充沛, 开始新一天的学习 \(^o^)/~        接触过 Spring 框架的同学都知道, Spring 中使用的两个功能无非就是依赖注入的 DI 以及面向切面编程的 AOP, 其中 AOP 又包括了动态 AOP 和静态 AOP 两个方向。 首先,我们来看看 Spring 是如何实现我们最常接触到的动态 AOP 的。 动态AOP     启用 Spring 的 AOP 功能, 需要我们在 Spring 的配置文件中添加 <aop:aspectj-autoproxy/> 。我们将从这个配置为入口看看 AOP 的实现过程。      在 AopNamespaceHandler 中, 有一下初始化代码: 1 public class AopNamespaceHandler extends NamespaceHandlerSupport {

spring的JavaConfig方式及xml配置文件混用的例子

白昼怎懂夜的黑 提交于 2020-02-29 08:44:23
文件结构 一、interface、bean等代码 package com.yiibai.core; public interface IHelloWorld { public void printHello(); void printHelloWorld(String msg); } package com.yiibai.core; public class HelloWorldImpl implements IHelloWorld { private String name; @Override public void printHello() { // TODO 自动生成的方法存根 System.out.println("Spring 3 : Hello ! " + name); } public void setName(String name) { this.name = name; } @Override public void printHelloWorld(String msg) { // TODO 自动生成的方法存根 System.out.println("Hello : " + msg); } } package com.yiibai.core; public class CustomerBo { public void printMsg(String msg)

AOP:基于AspectJ编码简单示例

孤人 提交于 2020-02-29 07:55:40
一、基本概念   AspectJ 是一种面向切面程序设计的基于 Java 的实现。它向 Java 中加入了连接点(Join Point)这个新概念,其实它也只是现存的一个 Java概念的名称而已。它向 Java 语言中加入少许新结构:切点(pointcut)、通知(Advice)、类型间声明(Inter-type declaration)和方面(Aspect)。切点和通知动态地影响程序流程,类型间声明则是静态的影响程序的类等级结构,而切面则是对所有这些新结构的封装。 基于切面、连接点、切点、通知的概念如下: Aspect : Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的 Advice。 Joint point :表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它 joint point。 Pointcut :表示一组 joint point,这些 joint point 或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方。 Advice :Advice 定义了在 pointcut 里面定义的程序点具体要做的操作,它通过 before、after 和 around 来区别是在每个 joint

http://spring.oschina.mopaas.com/html_en/

这一生的挚爱 提交于 2020-02-28 22:26:56
Spring Framework Reference Documentation Next Spring Framework Reference Documentation Authors Rod Johnson , Juergen Hoeller , Keith Donald , Colin Sampaleanu , Rob Harrop , Thomas Risberg , Alef Arendsen , Darren Davison , Dmitriy Kopylenko , Mark Pollack ,Thierry Templier , Erwin Vervaet , Portia Tung , Ben Hale , Adrian Colyer , John Lewis , Costin Leau , Mark Fisher , Sam Brannen , Ramnivas Laddad , Arjen Poutsma ,Chris Beams , Tareq Abedrabbo , Andy Clement , Dave Syer , Oliver Gierke , Rossen Stoyanchev , Phillip Webb , Rob Winch , Brian Clozel , Stephane Nicoll , SebastienDeleuze 4.1.3

AspectJ 切点指示器-03-execution

寵の児 提交于 2020-02-28 03:23:38
execution() 匹配满足某一匹配条件的目标方法的连接点 基础语法如下: execution(<修饰符模式>?<返回类型模式><方法名模式>(<参数模式>)<异常模式>?) <修饰符模式>? :如 public,可选 <返回类型模式> :如 String,可以是 * 表示任意的返回值都可以匹配 <方法名模式> :如 com.test.aspectj.expression.Factory.* 表示Factory中的所有的方法 (<参数模式>) :如 (..) 表示任意类型参数且参数个数不限 <异常模式>? :可选 execution(* com.test.aspectj.expression.Factory.*(..)) 解释如下: 第一个 * :表示任意的方法返回值类型 com.test.aspectj.expression.Factory.* :表示Factory中的所有的方法 (..) :表示任意类型参数且参数个数不限 其他用法举例 表达式 功能描述 execution(public * *(..)) 匹配所有目标类的所有public方法 execution(* pre*(...)) 匹配所有目标类所有以pre为前缀的方法 execution(* com.test.Factory.*(..)) 匹配Factory中的所有方法 类模式表达式中的 .* 匹配包中的所有类

AspectJ 切点指示器-02-@annotation

情到浓时终转凉″ 提交于 2020-02-28 02:09:18
@annotation() 限制匹配带有指定注解的连接点 各个类最终结构图如下: 1、Factory package com.test.aspectj.expression; /** * 工厂接口 */ public interface Factory { // 制作产品 void make(); // 运输 void delivery(String address); } 2、PhoneFactory package com.test.aspectj.expression; import com.test.aspectj.expression.annotation.Log; import org.springframework.stereotype.Component; /** * 手机工厂 */ @Component public class PhoneFactory implements Factory { // 制作产品的方法,注意有@Log注解 @Override @Log public void make() { System.out.println("来自目标类PhoneFactory的消息:生产手机"); } // 运输手机的方法 @Override public void delivery(String address) { System.out.println(

AspectJ 切点指示器-01-args()和@args()

落花浮王杯 提交于 2020-02-27 22:22:38
args() 通过判断目标类方法运行运行时 入参对象的类型 定义指定连接点 @args() 通过判断目标方法运行时 入参对象的类是否标注特定注解 来指定连接点 各个类最终结构图如下: 1、Factory package com.test.aspectj.expression; /** * 工厂接口 */ public interface Factory { // 制作产品 void make(); // 运输 void delivery(String address); } 2、PhoneFactory package com.test.aspectj.expression; import com.test.aspectj.expression.annotation.Log; import org.springframework.stereotype.Component; /** * 手机工厂 */ @Component public class PhoneFactory implements Factory { // 制作产品的方法 @Override @Log public void make() { System.out.println("来自目标类PhoneFactory的消息:生产手机"); } // 运输手机的方法 @Override public void

AspectJ 切点指示器-00-开篇

戏子无情 提交于 2020-02-27 20:14:46
Spring中常见的AspectJ切点指示器 AspectJ指示器 功能描述 args() 通过判断目标类方法运行运行时入参对象的类型定义指定连接点 @args() 通过判断目标方法运行时入参对象的类是否标注特定注解来指定连接点 execution() 匹配满足某一匹配条件的目标方法的连接点 this() 代理类按照类型匹配于指定类,则被代理的目标类所有连接点匹配切点 target() 限制连接点匹配目标对象为指定类型的类 @target() 限制连接点匹配目标对象为被特定注解标注的类 within() 匹配特定域下的所有连接点 @within 限制匹配特定注解标注的类的连接点 @annotation() 限制匹配带有指定注解的连接点 来源: oschina 链接: https://my.oschina.net/u/3777515/blog/3161906

实例探究Aspectj,解析SentinelResourceAspect

随声附和 提交于 2020-02-27 11:07:49
为了学习SentinelResourceAspect,这篇文章里我用Aspectj实现一个AOP实例,一起来看下。 Sentinel 提供了 @SentinelResource 注解用于定义资源,支持 AspectJ 的扩展用于自动定义资源、处理 BlockException 等。 SentinelResourceAspect是Sentinel中的核心切面,Sentinel对限流,拦截等的支持都依赖 SentinelResourceAspect,本文回顾AOP相关知识,实现一个AspectJ实例,然后带你从源码角度,探究SentinelResourceAspect的实现。 1、回顾 Spring AOP 知识 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 常见使用场景 性能监控 在方法调用前后记录调用时间,方法执行太长或超时报警。 缓存代理 缓存某方法的返回值,下次执行该方法时,直接从缓存里获取。 软件破解 使用AOP修改软件的验证类的判断逻辑。 记录日志 在方法执行前后记录系统日志。 工作流系统