读书人

spring的配置文件等advice+advisor+be

发布时间: 2012-10-25 10:58:57 作者: rapoo

spring的配置文件等advice+advisor+beannameproxy...总结

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
?<!-- dataSource -->
?<bean id="dataSource" ref="template"></property>
?</bean>
?<!-- biz -->
?
?
?
?
?<!-- 事物 -->
?<bean id="transactionManager" ref="sessionFactory"></property>
?</bean>
?<!-- 拦截器 -->??
?<bean id="interceptor" ref="transactionManager"></property>
??<property name="transactionAttributes">
???<props>
????<prop key="*">PROPAGATION_REQUIRED,-Exception</prop>
???</props>
??</property>
?</bean>
?<!-- 自动代理 -->? <!-- 缺陷:不能细化到某些对某些-->
?<bean id="autoproxy" /"byType"
?? 如果userDAO设置了autowire="byName" ,假设ServiceImpl有一个属性名为userDAO,Spring就会在配置文件里查找有没有名字为userDAO的bean, 自动为ServiceImpl注入。
???? 如果bean有两个属性,一个想默认注入,一个想自定义,只要设定了autowire,然后显式的声明那个想自定义的,就可以达到要求。这就应了需求,在需要特别配置的时候就提供配置,否则给我一个默认注入。
??? 还可以在根部的<beans>节点写一句default-autovwrie="byName",可以让文件里的所有bean 都默认autowrie。不过有人认为开发期可以这样,但Production Server上不应该使用Autowire。但有人认为那些自定义一次的地方比如TranscationManager应该详细定义,而Dao,Service这种大量重复定义的bean就可以这样做。--------注:bean的id 或者 name都行!
???
?? 4.对比了5中事务处理方法还是觉得BeanNameAutoProxyCreator最为方便且好理解。不能对某一个类的某些方法做代理。
?? 5.用MethodInterceptor自己写了一个advice切入到其他类中,模仿事务处理。
????? <?xml version="1.0" encoding="UTF-8"?>
????? <!DOCTYPE beans PUBLIC??? "-//SPRING//DTD BEAN//EN"??? "http://www.springframework.org/dtd/spring-beans.dtd">
????? <beans default-autowire="byName">
?????<!-- test class ->
?????<bean id="mytarget" name="log" >
??????//在一个方法中调用mytarget的一个有事务的方法。
?????</bean>
?????<!-- 通知 ->
?????<bean id="myAdvice" />
??????</property>
??????<property name="patterns">
???????<list>
????????<value>.*yestransaction</value>
???????</list>
??????</property>
?????</bean>
?????<!-- 代理 ->??? //代理都是其中target拥有所有interceptorNames的的advice。在调用时getBean(“代理id”);
?????<!--bean id="r" name="proxy"
??????ref="mytarget"></property>
??????<property name="interceptorNames">
???????<list>
????????<value>runAdvisor</value>
???????</list>
??????</property>
?????</bean->
????? <!--自动代理->??
????? //多对多,要是想对某些方法得要写advisor。调用用自己的id。
?????<bean id="autoproxy" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
??????<property name="beanNames">
???????<list>
????????<value>mytarget</value>
????????<value>golog</value>解决**** 在golog中定义方法.*yestransaction
???????</list>
??????</property>
??????<property name="interceptorNames">
???????<list>
????????<value>runAdvisor</value>
???????</list>
??????</property>
?????</bean>
???? </beans>
????
???? <!-- 设想:有一个target是targets(只要方法命名注意),解决对某些方法 ->解决****


-->

?

读书人网 >软件架构设计

热点推荐