0%

SPRING19—-自动代理生成器

上述中的aop编程15-18可能产生的问题:
1.若存在多个目标对象,就需要使用多次proxyFactoryBean创建多个代理对象,这会使配置文件变得臃肿,不便于管理。
2.用户真正想调用的是目标对象,而真正可以调用的却是代理对象,这不符合正常逻辑。
所以现在使用自动代理生成器。
自动代理生成器分成两种:
1.默认Advisor自动代理生成器

1
2
<bean id=“ISomeService” class=“com.bean.service5.someServiceImpl”></bean>
<bean id=“ISomeService2” class=“com.bean.service5.someServiceImpl”></bean>

改为:

1
2
3
4
5
6
7
8
<!– 生成代理对象 –>
<bean id=“serviceProxy” class=“org.springframework.aop.framework.ProxyFactoryBean”>
<!– 指定目标对象 –>
<property name=“target” ref=“ISomeService”></property>
<!– 指定切面–>
<property name=“interceptorNames” value=“myAdvisor”></property>
</bean>
<bean>

改为:

1
<bean class=“org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator”></bean>

DefaultAdvisorAutoProxyCreator引发的三个问题:
1.不能选择目标对象
2.不能选择切面类型,切面只能是advisor
3.不能选择advisor,所有advisor均将作为切面织入到目标方法
2.Bean名称自动代理生成器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<bean id=“myAdvisor” class=“org.springframework.aop.support.RegexpMethodPointcutAdvisor”>
<property name=“advice” ref=“myadvice”></property>
<!– 这里的正则表达式匹配的对象是全限定方法名 –>
<property name=“pattern” value=“.*doFirst”></property>
</bean>
<bean id=“myAdvisor2” class=“org.springframework.aop.support.RegexpMethodPointcutAdvisor”>
<property name=“advice” ref=“myadvice”></property>
<!– 这里的正则表达式匹配的对象是全限定方法名 –>
<property name=“pattern” value=“.*dosend”></property>
</bean>
<bean class=“org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator”>
<property name=“target” ref=“ISomeService”></property>
<!– 指定切面–>
<property name=“interceptorNames” value=“myAdvisor”></property>
</bean>