💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
从AOP的角度看,事物跟日志一样,都是跟业务逻辑无关的东西,这两个东西通过切入方式,放到系统中,是非常合适的。下面,将Hibernate中的事物配置到Spring中,使我们在编程的时候,无需考虑事物的存在,专心的放到系统的逻辑实现上。 在Spring的配置文件中加入如下配置: ~~~ <!-- 配置sessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <!-- 配置hibernate的配置文件 --> <property name="configLocation"> <value>classpath:hibernate.cfg.xml</value> </property> </bean> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property> </bean> <!-- 配置哪些类的哪些方法使用事务 --> <aop:config> <aop:pointcut id="allManagerMethod" expression="execution(* com.lhc.usermanage.*.*(..))"/> <aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice"/> </aop:config> <!-- 配置事务的传播特性 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED"/> <tx:method name="del*" propagation="REQUIRED"/> <tx:method name="modify*" propagation="REQUIRED"/> <tx:method name="*" propagation="REQUIRED" read-only="true"/> </tx:attributes> </tx:advice> ~~~ 这里,我们让Dao层的类继承HibernateDaoSupport: ![](https://box.kancloud.cn/2016-03-02_56d66380cafce.jpg) 这样就可以简化CRUD操作。 但是同时也要为UserManagerImpl配置sessionFactory属性: ![](https://box.kancloud.cn/2016-03-02_56d66380da819.jpg) ![](https://box.kancloud.cn/2016-03-02_56d663810d2c3.jpg) 除了事物管理器的配置,剩下的配置跟我们使用AOP的动态代理的时候需要的配置内容差不多,主要是定义在哪切开,至于切开之后的内容,当然是加入我们的事物啦。 脑洞大开一下,感觉这时候切入的应该是before跟After的内容。 另外,还有个事物怎么切入的问题,这里就涉及到了事物的传播特性,比如,我以前有个事物,我再操作是直接用这个事物我还是另外开一个,and so on....... 补充一句,这时候带大家写CRUD方法的时候,就要定义好命名规则,才能在Advice里面匹配到方法名称,才能加上事物!!!终于体会到约定大于配置了。(不知道理解的准确不?) Ps,也可以使用注解方式配置事务管理: ![](https://box.kancloud.cn/2016-03-02_56d663810d2c3.jpg) 又少写了好多代码![大笑](https://box.kancloud.cn/2016-01-19_569e21abc5518.gif) 。。。。。。。好懒。。