/* * Copyright 1999-2017 Alibaba Group Holding Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.alibaba.druid.support.ibatis; import java.util.ArrayList; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.aop.TargetSource; import org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator; import com.ibatis.sqlmap.client.SqlMapClient; import com.ibatis.sqlmap.engine.impl.ExtendedSqlMapClient; @SuppressWarnings({ "serial", "deprecation" }) public class SpringIbatisBeanNameAutoProxyCreator extends BeanNameAutoProxyCreator implements SpringIbatisBeanNameAutoProxyCreatorMBean { private final static Log LOG = LogFactory.getLog(SpringIbatisBeanNameAutoProxyCreator.class); private List<String> proxyBeanNames = new ArrayList<String>(); public List<String> getProxyBeanNames() { return proxyBeanNames; } public void setProxyBeanNames(List<String> proxyBeanNames) { this.proxyBeanNames = proxyBeanNames; } @SuppressWarnings("rawtypes") protected Object createProxy(Class beanClass, String beanName, Object[] specificInterceptors, TargetSource targetSource) { try { Object target = targetSource.getTarget(); if (target instanceof SqlMapClientWrapper) { proxyBeanNames.add(beanName); return target; } if (target instanceof SqlMapClient) { proxyBeanNames.add(beanName); return new SqlMapClientWrapper((ExtendedSqlMapClient) target); } return super.createProxy(beanClass, beanName, specificInterceptors, targetSource); } catch (Throwable ex) { LOG.error(ex.getMessage(), ex); return super.createProxy(beanClass, beanName, specificInterceptors, targetSource); } } }