spring已经实现了aop,为什么还要用aspectj

spring已经实现了aop,为什么还要用aspectj?

1、是不是使用spring AOP的功能,都要引入这aspectj,是依赖关系?
2、如果2个是独立互不影响的东西,在平时的开发中,是不是更偏向于用aspectj,而不使用spring自己的AOP?

回答1:

①选择spring的AOP还是AspectJ?

spring确实有自己的AOP。功能已经基本够用了,除非你的要在接口上动态代理或者方法拦截精确到getter和setter。这些都是写奇葩的需求,一般不使用。

②在使用AOP的时候,你是用xml还是注解的方式(@Aspect)?
1)如果使用xml方式,不需要任何额外的jar包。
2)如果使用@Aspect方式,你就可以在类上直接一个@Aspect就搞定,不用费事在xml里配了。但是这需要额外的jar包( aspectjweaver.jar)。因为spring直接使用AspectJ的注解功能,注意只是使用了它 的注解功能而已。并不是核心功能 !!!

注意到文档上还有一句很有意思的话:文档说到 是选择spring AOP还是使用full aspectJ?
什么是full aspectJ?如果你使用"full aspectJ"。就是说你可以实现基于接口的动态代理,等等强大的功能。而不仅仅是aspectj的 注-解-功-能 !!!

如果用full AspectJ。比如说Load-Time Weaving的方式 还 需要额外的jar包 spring-instrument.jar

当然,无论是使用spring aop还是 aspectj都需要aspectjweaver.jar spring-aop.jar这两个jar包。

(因为spring直接使用AspectJ的注解功能,就是说spring自带的AOP使用了aspectjweaver.jar里的某些类。所以要加上这个jar包。 这是spring4.x的时候试出来的(没有使用maven,使用zip里自带的jar)。如果用maven的话会把所有的依赖都拉下来的。)

回答2:

spring AOP就是用aspectj来实现的,是依赖关系!AspectJ是动态代理的一种实现!而spring默认使用的就是AspectJ来实现的动态代理,spring自己的AOP就是使用AspectJ来实现的!当然你也可以使用其他的实现,如cglib!

是不是使用spring的aop的时候,都要引入aspectj,或者是cglib?
是的!你要使用spring的aop,要么引入aspectj,要么cglib!除非你不使用spring的aop!当然,你也可以只用spring的其他特性,例如控制反转!aop不是只有spring有!其他框架也有!你可以上网查查,不过spring的aop已经很好了!
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值