1. 程式人生 > >spring 與 mybatis整合,mybatis註解不起作用

spring 與 mybatis整合,mybatis註解不起作用

一、首先配置好基礎的資料來源及註解管理器

<bean id="transactionManager"

class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>


<tx:annotation-driven transaction-manager="transactionManager" />


<context:component-scan base-package="cn.hexing.quartz.util;cn.hexing.fk.bp.newDbHelper">

</context:component-scan>

<bean id="bp.Test_batch" class="cn.hexing.quartz.util.Test_batch"></bean>

最下面的註解掃描包好像可以不要;不要也可以掃描到有註解的類

二、帶註解的類

package cn.hexing.quartz.util;


import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;


public class Test_batch {


public void test_relay(POJO pojo) {
test_batch(pojo);
}

@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public void test_batch(POJO pojo)) {
//入庫操作
}
}

三、測試方法類

void mian(){

POJO pojo, pojo1, pojo2;

Test_batch test_batch = (Test_batch) AfwUtil.getBean("bp.Test_batch");
test_batch.test_batch(pojo1);
      /此種呼叫方式可以作為一個事務提交 A1

test_batch.test_relay(pojo
2); //此種呼叫方式不可以作為一個事務提交 A2


Test_batch test_batch1 = new Test_batch();

test_batch1.test_batch(pojo1);      /此種呼叫方式

可以作為一個事務提交 A3

}

理解解釋:

1.spring裡面mybatis中的註解管理器只能管到在這個整個spring 容器中註冊了的bean,對於位元組new出來的目標類的註解是不管的,故同樣是呼叫Test_batch類中的test_batch()方法,只有A1處的註解起作用了;而A3處的註解沒有起作用。

2.目標類中,只能是從外部呼叫過來的地方,帶註解的方法才能起作用;內部呼叫到帶註解的方法是不起作用的。所以A1處的註解起作用了;而A2處的註解沒有起作用。