org.mybatis.spring.mapper
Class MapperScannerConfigurer

java.lang.Object
  extended by org.mybatis.spring.mapper.MapperScannerConfigurer
All Implemented Interfaces:
org.springframework.beans.factory.Aware, org.springframework.beans.factory.BeanNameAware, org.springframework.beans.factory.config.BeanFactoryPostProcessor, org.springframework.beans.factory.InitializingBean, org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor, org.springframework.context.ApplicationContextAware

public class MapperScannerConfigurer
extends Object
implements org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor, org.springframework.beans.factory.InitializingBean, org.springframework.context.ApplicationContextAware, org.springframework.beans.factory.BeanNameAware

BeanDefinitionRegistryPostProcessor that searches recursively starting from a base package for interfaces and registers them as MapperFactoryBean. Note that only interfaces with at least one method will be registered; concrete classes will be ignored.

This class was a {code BeanFactoryPostProcessor} until 1.0.1 version. It changed to BeanDefinitionRegistryPostProcessor in 1.0.2. See https://jira.springsource.org/browse/SPR-8269 for the details.

The basePackage property can contain more than one package name, separated by either commas or semicolons.

This class supports filtering the mappers created by either specifying a marker interface or an annotation. The annotationClass property specifies an annotation to search for. The markerInterface property specifies a parent interface to search for. If both properties are specified, mappers are added for interfaces that match either criteria. By default, these two properties are null, so all interfaces in the given basePackage are added as mappers.

This configurer enables autowire for all the beans that it creates so that they are automatically autowired with the proper SqlSessionFactory or SqlSessionTemplate. If there is more than one SqlSessionFactory in the application, however, autowiring cannot be used. In this case you must explicitly specify either an SqlSessionFactory or an SqlSessionTemplate to use via the bean name properties. Bean names are used rather than actual objects because Spring does not initialize property placeholders until after this class is processed.

Passing in an actual object which may require placeholders (i.e. DB user password) will fail. Using bean names defers actual object creation until later in the startup process, after all placeholder substituation is completed. However, note that this configurer does support property placeholders of its own properties. The basePackage and bean name properties all support ${property} style substitution.

Configuration sample:

 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
       <property name="basePackage" value="org.mybatis.spring.sample.mapper" />
       <!-- optional unless there are multiple session factories defined -->
       <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
   </bean>
 
 

Version:
$Id$
Author:
Hunter Presnall, Eduardo Macarron
See Also:
MapperFactoryBean, ClassPathMapperScanner

Constructor Summary
MapperScannerConfigurer()
           
 
Method Summary
 void afterPropertiesSet()
          
 org.springframework.beans.factory.support.BeanNameGenerator getNameGenerator()
          Gets beanNameGenerator to be used while running the scanner.
 void postProcessBeanDefinitionRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry registry)
          
 void postProcessBeanFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)
          
 void setAddToConfig(boolean addToConfig)
          Same as MapperFactoryBean#setAddToConfig(boolean).
 void setAnnotationClass(Class<? extends Annotation> annotationClass)
          This property specifies the annotation that the scanner will search for.
 void setApplicationContext(org.springframework.context.ApplicationContext applicationContext)
          
 void setBasePackage(String basePackage)
          This property lets you set the base package for your mapper interface files.
 void setBeanName(String name)
          
 void setMarkerInterface(Class<?> superClass)
          This property specifies the parent that the scanner will search for.
 void setNameGenerator(org.springframework.beans.factory.support.BeanNameGenerator nameGenerator)
          Sets beanNameGenerator to be used while running the scanner.
 void setProcessPropertyPlaceHolders(boolean processPropertyPlaceHolders)
           
 void setSqlSessionFactory(org.apache.ibatis.session.SqlSessionFactory sqlSessionFactory)
          Deprecated. 
 void setSqlSessionFactoryBeanName(String sqlSessionFactoryName)
          Specifies which SqlSessionFactory to use in the case that there is more than one in the spring context.
 void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate)
          Deprecated. 
 void setSqlSessionTemplateBeanName(String sqlSessionTemplateName)
          Specifies which SqlSessionTemplate to use in the case that there is more than one in the spring context.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

MapperScannerConfigurer

public MapperScannerConfigurer()
Method Detail

setBasePackage

public void setBasePackage(String basePackage)
This property lets you set the base package for your mapper interface files.

You can set more than one package by using a semicolon or comma as a separator.

Mappers will be searched for recursively starting in the specified package(s).

Parameters:
basePackage - base package name

setAddToConfig

public void setAddToConfig(boolean addToConfig)
Same as MapperFactoryBean#setAddToConfig(boolean).

Parameters:
addToConfig -
See Also:
MapperFactoryBean.setAddToConfig(boolean)

setAnnotationClass

public void setAnnotationClass(Class<? extends Annotation> annotationClass)
This property specifies the annotation that the scanner will search for.

The scanner will register all interfaces in the base package that also have the specified annotation.

Note this can be combined with markerInterface.

Parameters:
annotationClass - annotation class

setMarkerInterface

public void setMarkerInterface(Class<?> superClass)
This property specifies the parent that the scanner will search for.

The scanner will register all interfaces in the base package that also have the specified interface class as a parent.

Note this can be combined with annotationClass.

Parameters:
superClass - parent class

setSqlSessionTemplate

@Deprecated
public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate)
Deprecated. 

Specifies which SqlSessionTemplate to use in the case that there is more than one in the spring context. Usually this is only needed when you have more than one datasource.

Use setSqlSessionTemplateBeanName(String) instead

Parameters:
sqlSessionTemplate -

setSqlSessionTemplateBeanName

public void setSqlSessionTemplateBeanName(String sqlSessionTemplateName)
Specifies which SqlSessionTemplate to use in the case that there is more than one in the spring context. Usually this is only needed when you have more than one datasource.

Note bean names are used, not bean references. This is because the scanner loads early during the start process and it is too early to build mybatis object instances.

Parameters:
sqlSessionTemplateName - Bean name of the SqlSessionTemplate
Since:
1.1.0

setSqlSessionFactory

@Deprecated
public void setSqlSessionFactory(org.apache.ibatis.session.SqlSessionFactory sqlSessionFactory)
Deprecated. 

Specifies which SqlSessionFactory to use in the case that there is more than one in the spring context. Usually this is only needed when you have more than one datasource.

Use setSqlSessionFactoryBeanName(String) instead.

Parameters:
sqlSessionFactory -

setSqlSessionFactoryBeanName

public void setSqlSessionFactoryBeanName(String sqlSessionFactoryName)
Specifies which SqlSessionFactory to use in the case that there is more than one in the spring context. Usually this is only needed when you have more than one datasource.

Note bean names are used, not bean references. This is because the scanner loads early during the start process and it is too early to build mybatis object instances.

Parameters:
sqlSessionFactoryName - Bean name of the SqlSessionFactory
Since:
1.1.0

setProcessPropertyPlaceHolders

public void setProcessPropertyPlaceHolders(boolean processPropertyPlaceHolders)
Parameters:
processPropertyPlaceHolders -
Since:
1.1.1

setApplicationContext

public void setApplicationContext(org.springframework.context.ApplicationContext applicationContext)

Specified by:
setApplicationContext in interface org.springframework.context.ApplicationContextAware

setBeanName

public void setBeanName(String name)

Specified by:
setBeanName in interface org.springframework.beans.factory.BeanNameAware

getNameGenerator

public org.springframework.beans.factory.support.BeanNameGenerator getNameGenerator()
Gets beanNameGenerator to be used while running the scanner.

Returns:
the beanNameGenerator BeanNameGenerator that has been configured
Since:
1.2.0

setNameGenerator

public void setNameGenerator(org.springframework.beans.factory.support.BeanNameGenerator nameGenerator)
Sets beanNameGenerator to be used while running the scanner.

Parameters:
nameGenerator - the beanNameGenerator to set
Since:
1.2.0

afterPropertiesSet

public void afterPropertiesSet()
                        throws Exception

Specified by:
afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean
Throws:
Exception

postProcessBeanFactory

public void postProcessBeanFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)

Specified by:
postProcessBeanFactory in interface org.springframework.beans.factory.config.BeanFactoryPostProcessor

postProcessBeanDefinitionRegistry

public void postProcessBeanDefinitionRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry registry)
                                       throws org.springframework.beans.BeansException

Specified by:
postProcessBeanDefinitionRegistry in interface org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor
Throws:
org.springframework.beans.BeansException
Since:
1.0.2


Copyright © 2010-2013 MyBatis.org. All Rights Reserved.