AOP的配置稍顯復(fù)雜,通過
@Transactional
注解,同樣可以實(shí)現(xiàn):
1. 在需要事務(wù)的類或方法上加 @Transactional :
?? 如果是類上加注解,該類的所有public方法都會(huì)應(yīng)用事務(wù)
?? 如果是方法上加注解,該方法會(huì)應(yīng)用事務(wù)。
?? 在接口上加注解有風(fēng)險(xiǎn),如果使用CGLIB(類代理)將不會(huì)啟用事務(wù)。
2. 開啟注解事務(wù)開關(guān): <tx:annotation-driven />
FruitShop實(shí)現(xiàn):
beans-fruitshop-@.xml文件:
測(cè)試類和之前的類似:
附:
Spring底層也是通過AOP來實(shí)現(xiàn)對(duì)@Transactional注解事務(wù)的支持:
1. 在需要事務(wù)的類或方法上加 @Transactional :
?? 如果是類上加注解,該類的所有public方法都會(huì)應(yīng)用事務(wù)
?? 如果是方法上加注解,該方法會(huì)應(yīng)用事務(wù)。
?? 在接口上加注解有風(fēng)險(xiǎn),如果使用CGLIB(類代理)將不會(huì)啟用事務(wù)。
2. 開啟注解事務(wù)開關(guān): <tx:annotation-driven />
FruitShop實(shí)現(xiàn):
public class AnnotationTxFruitShop extends JdbcDaoSupport implements FruitShop { @Transactional // 可以設(shè)置傳播級(jí)別、隔離級(jí)別、超時(shí)、只讀、回滾策略 @Override public boolean purchase(int fruitId, String userName, int count) { // 此處和系列之四的AopTxFruitShop代碼相同 } }
beans-fruitshop-@.xml文件:
<tx:annotation-driven transaction-manager="txManager" /> <bean id="annotationTxFruitShop" class="com.john.tx.service.impl.AnnotationTxFruitShop"> <property name="dataSource" ref="dataSource" /> </bean> <!-- dataSource, txManager和之前的相同 -->
測(cè)試類和之前的類似:
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:/beans-fruitshop-@.xml" }) public class AnnotationTxFruitShopTest { @Resource(name = "annotationTxFruitShop") FruitShop annotationTxFruitShop; @Test public void test() { ... } }
附:
Spring底層也是通過AOP來實(shí)現(xiàn)對(duì)@Transactional注解事務(wù)的支持:

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
