AspectJ使用示例

AspectJ是一个面向切面的AOP框架,AOP的织入方式分为编译期织入、装载期织入、运行期织入。编译期织入是指在类编译期间利用特殊编译将切面织入到类中,这样生成到字节码中已经包含了切面;装载期织入是指在字节码加载到虚拟机时将切面织入到类中。

下面给出一个AspectJ使用示例,spark的rdd类中由很多写hdfs文件的方法,为了保证spark的执行效率,需要对这些方法进行屏蔽。

 

首先需要创建一个AspectJ切面文件SparkAspectJ.aj(Idea community不支持此功能,需要使用Ultimate版):

 

package cn.tongdun.aspect;

public aspect SparkAspect {

    public pointcut saveMethod() : execution(public void org.apache.spark.rdd.*.save*(*));

    before() : saveMethod() {
        throw new RunTimeException(thisJoinPoint.getSignature().toString());
    }
}


定义的切入点为public org.apache.spark.rdd.*.save*(*) 含义为org.apache.spark.rdd包中任意类中以save开发的方法并且参数任意

 

接着需要在resource目录下的META-INF目录中创建一个aop.xml文件

 

 

<aspectj>
    <aspects>
        <aspect name="cn.tongdun.aspect.SparkAspect"/>
    </aspects>
</aspectj>


在Idea中安装AspectJ Support插件,并且在Preferences中的Compiler->Java Compiler选择中选择ajc,其中的Path to ajc compiler选项选择apectjtools.jar。最后在启动参数VM oprion中添加-javaagent:aspectjweaver.jar。

 

写一个测试用例,spark.sql("select * from user").rdd.saveAsTextFile("test"),运行程序,可以发现抛出异常,表明定义的增加已被织入,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值