From 63aaf5b7dfccab5887a6813bd199c5d70abf25e4 Mon Sep 17 00:00:00 2001 From: wenshao Date: Fri, 7 Dec 2012 18:52:16 +0800 Subject: [PATCH 1/2] add ibatis wrapper --- .../SpringIbatisBeanTypeAutoProxyCreator.java | 30 +------------------ .../pool/mybatis/spring-config-mybatis.xml | 12 ++++++++ 2 files changed, 13 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/alibaba/druid/support/ibatis/SpringIbatisBeanTypeAutoProxyCreator.java b/src/main/java/com/alibaba/druid/support/ibatis/SpringIbatisBeanTypeAutoProxyCreator.java index 46144b2d21..c76ce574eb 100644 --- a/src/main/java/com/alibaba/druid/support/ibatis/SpringIbatisBeanTypeAutoProxyCreator.java +++ b/src/main/java/com/alibaba/druid/support/ibatis/SpringIbatisBeanTypeAutoProxyCreator.java @@ -23,13 +23,8 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.aop.TargetSource; import org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator; -import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.FactoryBean; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; -import org.springframework.util.Assert; import org.springframework.util.PatternMatchUtils; import com.ibatis.sqlmap.client.SqlMapClient; @@ -41,30 +36,15 @@ import com.ibatis.sqlmap.engine.impl.ExtendedSqlMapClient; * @author hualiang.lihl 2011-12-31 上午10:48:20 */ @SuppressWarnings("deprecation") -public class SpringIbatisBeanTypeAutoProxyCreator extends AbstractAutoProxyCreator implements InitializingBean, ApplicationContextAware, SpringIbatisBeanTypeAutoProxyCreatorMBean { +public class SpringIbatisBeanTypeAutoProxyCreator extends AbstractAutoProxyCreator implements SpringIbatisBeanTypeAutoProxyCreatorMBean { private final static Log LOG = LogFactory.getLog(SpringIbatisBeanTypeAutoProxyCreator.class); private static final long serialVersionUID = -9094985530794052264L; - private Class targetBeanType = SqlMapClient.class; - - private ApplicationContext context; - private List beanNames = new ArrayList(); private final List proxyBeanNames = new ArrayList(); - /** - * @param targetClass the targetClass to set - */ - public void setTargetBeanType(Class targetClass) { - this.targetBeanType = targetClass; - } - - public void setApplicationContext(ApplicationContext context) throws BeansException { - this.context = context; - } - /** * Identify as bean to proxy if the bean name is in the configured list of names. */ @@ -124,14 +104,6 @@ public class SpringIbatisBeanTypeAutoProxyCreator extends AbstractAutoProxyCreat return PatternMatchUtils.simpleMatch(mappedName, beanName); } - public void afterPropertiesSet() throws Exception { - Assert.notNull(targetBeanType, "targetType cannot be null"); - String[] beanNames = context.getBeanNamesForType(targetBeanType); - for (String name : beanNames) { - this.beanNames.add(name); - } - } - public List getBeanNames() { return beanNames; } diff --git a/src/test/resources/com/alibaba/druid/pool/mybatis/spring-config-mybatis.xml b/src/test/resources/com/alibaba/druid/pool/mybatis/spring-config-mybatis.xml index bc802baddd..5a37a84223 100644 --- a/src/test/resources/com/alibaba/druid/pool/mybatis/spring-config-mybatis.xml +++ b/src/test/resources/com/alibaba/druid/pool/mybatis/spring-config-mybatis.xml @@ -12,6 +12,18 @@ http://www.springframework.org/schema/aop http://www.springframework.org/schema/ + + + + + + + + sqlSessionFactory + + + + From 1fe3b96596ce65344118c21dda2cbb455d0fed50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=A9=E9=AB=98=E9=93=81?= Date: Sun, 9 Dec 2012 13:44:19 +0800 Subject: [PATCH 2/2] add logo --- druid-log.jpg | Bin 0 -> 14948 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 druid-log.jpg diff --git a/druid-log.jpg b/druid-log.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2928e9446bf4811f9fd118c499ece32d70100981 GIT binary patch literal 14948 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