-
@Aspect注解是不能够通过类路径自动检测发现的 ,所以需要配合使用@Component注释或者在xml配置bean
一个类中的@Aspect注解标识它为一个切面,并且将自己从自动代理中排除
查看全部 -
aspect
@AspectJ切面使用@Aspect注解配置,拥有@Aspect的任何bean将被Spring自动识别并应用
用@Aspect注解的类可以有方法和字段,他们也可能包括切入点(pointcut),通知(Advice)和引入(introduction)声明
@Aspect注解是不能够通过类路径自动检测发现的 ,所以需要配合使用@Component注释或者在xml配置bean
查看全部 -
使用auto-proxy
Spring也允许使用 自动代理 的bean定义,它可以自动代理选定的bean,这是建立在Spring的bean postprocessor功能基础上的(在加载bean的时候就可以修改)
BeanNameAutoProxyCreator
查看全部 -
使用ProxyFactory
使用Spring AOP而不必依赖于Spring IoC
大多数情况下最佳实践是用IoC容器创建AOP代理
虽然可以硬编码方式实现,但是Spring推荐使用配置或注解方式实现
查看全部 -
父子bean的方式
查看全部 -
简化的proxy定义3
查看全部 -
简化的proxy定义2 <bean id="txProxyTemplate" abstract="true" class="org.springframework.transaction.interceptor.TrsansactionProxyFactoryBean"> <property name="transactionManager" ref="transactionManager"/> <property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_REQUIRED</prop> </props> </property> </bean>
查看全部 -
简化的proxy定义
使用父子bean定义,以及内部bean定义,可能会带来更清洁和更简洁的代理定义(抽象属性标记父bean定义为抽象的这样他不能被实例化)
查看全部 -
实现了MethodInterceptor拦截器的才能使用global advisors
查看全部 -
修改后的结果
查看全部 -
使用global advisors
用*做通配,匹配所有拦截器加入通知链
查看全部 -
Proxying classes
CGLIB的代理对用户是透明的,需要注意:
-final方法不能被通知,因为他们不能被覆盖
-不用把CGLIB添加到classpath中, 在spring3.2中,cglib被重新包装并包含在Spring核心的JAR(即基于cglib的AOP就像JDK动态代理一样“开箱即用”)
我们不用手动的去引入cglib这个包了
查看全部 -
Proxying classes
前面的例子中如果没有Person接口,这种情况下Spring会使用CGLIB代理,而不是JDK动态代理
如果想,可以强制在任何情况下使用CGLIB,即使有接口
CGLIB代理的工作原理是在运行时生成目标类的子类,SPring配置这个生成的子类委托方法调用到原来的目标
子类是用来实现Decorator模式,织入通知
查看全部 -
修改后的结果是最常用的方式,好处就是不需要在外部定义bean
如果直接在外部定义bean,有个坏处,就是我们可以通过id 直接get到原始的bean对象(这个Bean对象是没有经过任何的代理处理过的,所以这些advice是不会被执行的)
查看全部 -
选中的部分一定会走JDK代理
<property name="proxyInterfaces">
<value> com.imooc.aop.api.BizLogic</value>
</property>
查看全部
举报