flushStatements() {
}
/**
- * Proxy needed to route MyBatis method calls to the proper SqlSession got
- * from Spring's Transaction Manager
- * It also unwraps exceptions thrown by {@code Method#invoke(Object, Object...)} to
- * pass a {@code PersistenceException} to the {@code PersistenceExceptionTranslator}.
- */
+ * Allow gently dispose bean:
+ *
+ * {@code
+ *
+ *
+ *
+ *
+ * }
+ *
+ *
+ * The implementation of {@link DisposableBean} forces spring context to use {@link DisposableBean#destroy()} method instead of {@link SqlSessionTemplate#close()} to shutdown gently.
+ *
+ * @see SqlSessionTemplate#close()
+ * @see org.springframework.beans.factory.support.DisposableBeanAdapter#inferDestroyMethodIfNecessary
+ * @see org.springframework.beans.factory.support.DisposableBeanAdapter#CLOSE_METHOD_NAME
+ */
+ @Override
+ public void destroy() throws Exception {
+ }
+
+ /**
+ * Proxy needed to route MyBatis method calls to the proper SqlSession got
+ * from Spring's Transaction Manager
+ * It also unwraps exceptions thrown by {@code Method#invoke(Object, Object...)} to
+ * pass a {@code PersistenceException} to the {@code PersistenceExceptionTranslator}.
+ */
private class SqlSessionInterceptor implements InvocationHandler {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
diff --git a/src/main/java/org/mybatis/spring/mapper/ClassPathMapperScanner.java b/src/main/java/org/mybatis/spring/mapper/ClassPathMapperScanner.java
index 26401a0b45..0342b2a47e 100644
--- a/src/main/java/org/mybatis/spring/mapper/ClassPathMapperScanner.java
+++ b/src/main/java/org/mybatis/spring/mapper/ClassPathMapperScanner.java
@@ -184,7 +184,7 @@ private void processBeanDefinitions(Set beanDefinitions) {
// the mapper interface is the original class of the bean
// but, the actual class of the bean is MapperFactoryBean
- definition.getPropertyValues().add("mapperInterface", definition.getBeanClassName());
+ definition.getConstructorArgumentValues().addGenericArgumentValue(definition.getBeanClassName()); // issue #59
definition.setBeanClass(this.mapperFactoryBean.getClass());
definition.getPropertyValues().add("addToConfig", this.addToConfig);
diff --git a/src/main/java/org/mybatis/spring/mapper/MapperFactoryBean.java b/src/main/java/org/mybatis/spring/mapper/MapperFactoryBean.java
index 333b4d4eb8..c3b8da8551 100644
--- a/src/main/java/org/mybatis/spring/mapper/MapperFactoryBean.java
+++ b/src/main/java/org/mybatis/spring/mapper/MapperFactoryBean.java
@@ -58,14 +58,13 @@ public class MapperFactoryBean extends SqlSessionDaoSupport implements Factor
private boolean addToConfig = true;
-
+ public MapperFactoryBean() {
+ }
+
public MapperFactoryBean(Class mapperInterface) {
this.mapperInterface = mapperInterface;
}
- public MapperFactoryBean() {
- }
-
/**
* {@inheritDoc}
*/
diff --git a/src/test/java/org/mybatis/spring/ExecutorInterceptor.java b/src/test/java/org/mybatis/spring/ExecutorInterceptor.java
index 3565e074ff..1b607255b4 100644
--- a/src/test/java/org/mybatis/spring/ExecutorInterceptor.java
+++ b/src/test/java/org/mybatis/spring/ExecutorInterceptor.java
@@ -46,6 +46,7 @@ final class ExecutorInterceptor implements Interceptor {
private boolean closed;
+ @Override
public Object intercept(Invocation invocation) throws Throwable {
if ("commit".equals(invocation.getMethod().getName())) {
++this.commitCount;
@@ -58,10 +59,12 @@ public Object intercept(Invocation invocation) throws Throwable {
return invocation.proceed();
}
+ @Override
public Object plugin(Object target) {
return Plugin.wrap(target, this);
}
+ @Override
public void setProperties(Properties properties) {
// do nothing
}
diff --git a/src/test/java/org/mybatis/spring/SqlSessionFactoryBeanTest.java b/src/test/java/org/mybatis/spring/SqlSessionFactoryBeanTest.java
index 5accf31ad3..e88368e162 100644
--- a/src/test/java/org/mybatis/spring/SqlSessionFactoryBeanTest.java
+++ b/src/test/java/org/mybatis/spring/SqlSessionFactoryBeanTest.java
@@ -20,6 +20,7 @@
import java.math.BigDecimal;
import java.math.BigInteger;
+import org.apache.ibatis.io.JBoss6VFS;
import org.apache.ibatis.reflection.factory.DefaultObjectFactory;
import org.apache.ibatis.reflection.factory.ObjectFactory;
import org.apache.ibatis.reflection.wrapper.DefaultObjectWrapperFactory;
@@ -136,6 +137,7 @@ public void testSetConfigLocation() throws Exception {
assertSame(factory.getConfiguration().getEnvironment().getDataSource(), dataSource);
assertSame(factory.getConfiguration().getEnvironment().getTransactionFactory().getClass(),
org.mybatis.spring.transaction.SpringManagedTransactionFactory.class);
+ assertSame(factory.getConfiguration().getVfsImpl(), JBoss6VFS.class);
// properties explicitly set differently than the defaults in the config xml
assertFalse(factory.getConfiguration().isCacheEnabled());
diff --git a/src/test/java/org/mybatis/spring/annotation/MapperScanTest.java b/src/test/java/org/mybatis/spring/annotation/MapperScanTest.java
index a7991f740a..ee923e6bba 100644
--- a/src/test/java/org/mybatis/spring/annotation/MapperScanTest.java
+++ b/src/test/java/org/mybatis/spring/annotation/MapperScanTest.java
@@ -290,6 +290,7 @@ public static class AppConfigWithCustomMapperFactoryBean {
public static class BeanNameGenerator implements org.springframework.beans.factory.support.BeanNameGenerator {
+ @Override
public String generateBeanName(BeanDefinition beanDefinition, BeanDefinitionRegistry definitionRegistry) {
return beanDefinition.getBeanClassName();
}
diff --git a/src/test/java/org/mybatis/spring/asyncsynchronization/AsyncAfterCompletionHelper.java b/src/test/java/org/mybatis/spring/asyncsynchronization/AsyncAfterCompletionHelper.java
index 672196a8b0..52d74a58a8 100644
--- a/src/test/java/org/mybatis/spring/asyncsynchronization/AsyncAfterCompletionHelper.java
+++ b/src/test/java/org/mybatis/spring/asyncsynchronization/AsyncAfterCompletionHelper.java
@@ -48,6 +48,7 @@ static class AsynchAfterCompletionInvocationHandler implements
this.target = target;
}
+ @Override
public Object invoke(final Object proxy, final Method method,
final Object[] args) throws Throwable {
if ("afterCompletion".equals(method.getName())) {
diff --git a/src/test/java/org/mybatis/spring/config/NamespaceTest.java b/src/test/java/org/mybatis/spring/config/NamespaceTest.java
index 3dd52ae180..c09745b168 100644
--- a/src/test/java/org/mybatis/spring/config/NamespaceTest.java
+++ b/src/test/java/org/mybatis/spring/config/NamespaceTest.java
@@ -211,6 +211,7 @@ private void assertBeanNotLoaded(String name) {
public static class BeanNameGenerator implements org.springframework.beans.factory.support.BeanNameGenerator {
+ @Override
public String generateBeanName(BeanDefinition beanDefinition, BeanDefinitionRegistry definitionRegistry) {
return beanDefinition.getBeanClassName();
}
diff --git a/src/test/java/org/mybatis/spring/mapper/MapperImplementation.java b/src/test/java/org/mybatis/spring/mapper/MapperImplementation.java
index db5a8e9a88..f25bb1cc22 100644
--- a/src/test/java/org/mybatis/spring/mapper/MapperImplementation.java
+++ b/src/test/java/org/mybatis/spring/mapper/MapperImplementation.java
@@ -20,6 +20,7 @@
*/
// implementation of MapperInterface to test conflicting types
final class MapperImplementation implements MapperInterface {
+ @Override
public void method() {
}
}
diff --git a/src/test/java/org/mybatis/spring/mapper/MapperScannerConfigurerTest.java b/src/test/java/org/mybatis/spring/mapper/MapperScannerConfigurerTest.java
index 141fe77423..72172aee52 100644
--- a/src/test/java/org/mybatis/spring/mapper/MapperScannerConfigurerTest.java
+++ b/src/test/java/org/mybatis/spring/mapper/MapperScannerConfigurerTest.java
@@ -272,6 +272,7 @@ private void assertBeanNotLoaded(String name) {
public static class BeanNameGenerator implements org.springframework.beans.factory.support.BeanNameGenerator {
+ @Override
public String generateBeanName(BeanDefinition beanDefinition, BeanDefinitionRegistry definitionRegistry) {
return beanDefinition.getBeanClassName();
}
diff --git a/src/test/java/org/mybatis/spring/mybatis-config.xml b/src/test/java/org/mybatis/spring/mybatis-config.xml
index e76a422548..c466ac8c05 100644
--- a/src/test/java/org/mybatis/spring/mybatis-config.xml
+++ b/src/test/java/org/mybatis/spring/mybatis-config.xml
@@ -28,6 +28,7 @@
+
diff --git a/src/test/java/org/mybatis/spring/sample/dao/UserDaoImpl.java b/src/test/java/org/mybatis/spring/sample/dao/UserDaoImpl.java
index 8ac2b86bdb..706ac85145 100644
--- a/src/test/java/org/mybatis/spring/sample/dao/UserDaoImpl.java
+++ b/src/test/java/org/mybatis/spring/sample/dao/UserDaoImpl.java
@@ -28,6 +28,7 @@
*/
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
+ @Override
public User getUser(String userId) {
return (User) getSqlSession().selectOne("org.mybatis.spring.sample.dao.UserDao.getUser", userId);
}
diff --git a/src/test/java/org/mybatis/spring/sample/domain/User.java b/src/test/java/org/mybatis/spring/sample/domain/User.java
index 37b11f78b1..56379a7c15 100644
--- a/src/test/java/org/mybatis/spring/sample/domain/User.java
+++ b/src/test/java/org/mybatis/spring/sample/domain/User.java
@@ -42,6 +42,7 @@ public void setName(String name) {
this.name = name;
}
+ @Override
public String toString() {
StringBuilder buf = new StringBuilder(30);
buf.append("{");
diff --git a/src/test/java/org/mybatis/spring/submitted/xa/UserServiceImpl.java b/src/test/java/org/mybatis/spring/submitted/xa/UserServiceImpl.java
index 79892d9cb7..10a4d9665f 100644
--- a/src/test/java/org/mybatis/spring/submitted/xa/UserServiceImpl.java
+++ b/src/test/java/org/mybatis/spring/submitted/xa/UserServiceImpl.java
@@ -27,12 +27,14 @@ public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapperSlave;
+ @Override
@Transactional
public void saveWithNoFailure(User user) {
userMapperMaster.save(user);
userMapperSlave.save(user);
}
+ @Override
@Transactional
public void saveWithFailure(User user) {
userMapperMaster.save(user);
@@ -40,6 +42,7 @@ public void saveWithFailure(User user) {
throw new RuntimeException("failed!");
}
+ @Override
public boolean checkUserExists(int id) {
if (userMapperMaster.select(id) != null) return true;
if (userMapperSlave.select(id) != null) return true;
diff --git a/src/test/java/org/mybatis/spring/type/DummyMapperFactoryBean.java b/src/test/java/org/mybatis/spring/type/DummyMapperFactoryBean.java
index 0a364c3e91..f61e5e6b1a 100644
--- a/src/test/java/org/mybatis/spring/type/DummyMapperFactoryBean.java
+++ b/src/test/java/org/mybatis/spring/type/DummyMapperFactoryBean.java
@@ -26,6 +26,14 @@
public class DummyMapperFactoryBean extends MapperFactoryBean {
+ public DummyMapperFactoryBean() {
+ super();
+ }
+
+ public DummyMapperFactoryBean(Class mapperInterface) {
+ super(mapperInterface);
+ }
+
private static final Logger LOGGER = Logger.getLogger(DummyMapperFactoryBean.class);
private static final AtomicInteger mapperInstanceCount = new AtomicInteger(0);
diff --git a/src/test/java/org/mybatis/spring/type/DummyTypeHandler.java b/src/test/java/org/mybatis/spring/type/DummyTypeHandler.java
index 56e7a36d20..219606a8b9 100644
--- a/src/test/java/org/mybatis/spring/type/DummyTypeHandler.java
+++ b/src/test/java/org/mybatis/spring/type/DummyTypeHandler.java
@@ -31,17 +31,21 @@
@MappedTypes(BigInteger.class)
public class DummyTypeHandler implements TypeHandler