使用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模式,织入通知
6-3 自动代理选定的bean
6-3 ProxyFactoryBean
ProxyFactoryBean及相关内容(下)
Proxying classes
1、前面的例子中如果没有Person(BizLogic)接口,这种情况下Spring会使用CGLIB代理,而不是JDK动态代理。
2、可以强制使用CGLIB,即使有接口的情况下。
3、CGLIB代理的工作原理是在运行时生成目标类的子类,Spring配置这个生成的子类委托方法调用到原来的目标
4、子类是用来实现Decorator模式,织入通知
5、CGLIB的代理对用户是透明的,需要注意:
【1】final方法不能被通知,因为它们不能被覆盖。
【2】不用把CGLIB添加到classpath中,在Spring3.2中,CGLIB被重新包装并包含在Spring核心JAR(即基于CGLIB的AOP就像JDK动态代理一样“开箱即用”,也就是说不用手动引入CGLIB这个包)
使用global advisors:使*做通配符,匹配所有拦截器加入通知链

实现了MethodInterceptor这个类似的方式,才可以使用通配符的方式。

简化的proxy定义
1、Spring中支持父子bean定义的方式,以及内部bean定义,可以带来更简洁的代理定义(抽象属性标记父bean定义为抽象的这样它不能被实例化)
Spring官方文档给出的例子(TransactionProxyFactoryBean是基于事物的代理Bean)通过getBean获得的是TransactionProxyFactoryBean的实例

使用ProxyFactory的好处:
1、使用SpringAOP而不必依赖于SpringIOC

2、大多数情况下最佳实践是用IoC容器创建AOP代理。
3、虽然可以硬编码方式实现,但是Spring推荐使用配置或注解方式实现。
使用auto-proxy
1、Spring也允许使用“自动代理”的bean定义,它可以自动代理选定的bean,这是建立在Spring的“bean post processor”功能基础上的(在加载bean的时候就可以修改)
2、主要通过BeanNameAutoProxyCreator实现(自动代理所有以jdk开始的Bean,也包括onlyJdk这种Bean)
3、DefaultAdvisorAutoProxyCreator,当前IoC容器中自动应用,来达到创建动态代理的效果,不用显示声明引用advisor的bean定义

ProxyFactoryBean及相关内容(下)
Proxying classes
1、前面的例子中如果没有Person(BizLogic)接口,这种情况下Spring会使用CGLIB代理,而不是JDK动态代理。
2、可以强制使用CGLIB,即使有接口的情况下。
3、CGLIB代理的工作原理是在运行时生成目标类的子类,Spring配置这个生成的子类委托方法调用到原来的目标
4、子类是用来实现Decorator模式,织入通知
5、CGLIB的代理对用户是透明的,需要注意:
【1】final方法不能被通知,因为它们不能被覆盖。
【2】不用把CGLIB添加到classpath中,在Spring3.2中,CGLIB被重新包装并包含在Spring核心JAR(即基于CGLIB的AOP就像JDK动态代理一样“开箱即用”,也就是说不用手动引入CGLIB这个包)
使用global advisors:使*做通配符,匹配所有拦截器加入通知链

使用auto-proxy(2)
使用auto—proxy
使用ProxyFactory
使用 auto-proxy 实现自动代理
使用ProxyFactory创建代理
简化的proxy定义
Proxying classes
使用“auto-proxy”
使用“auto-proxy”
使用ProxyFactory
简化的proxy定义
简化的proxy定义
使用global advisors
DefaultAdvisorAutoProxyCreator 创建自动代理
通配代理,自动代理