這里簡單介紹一下spring的配置文件applicationContext.xml中的一些配置的作用。
<context:component-scan base-package=""/>
表示啟動spring的組件掃描功能(從spring2.5版本開始)。即掃描base-package包或者子包下面的Java文件,如果掃描到有@controller、@Service、@Repository、@Component等注解的java類,就會將這些bean注冊到工廠中。還可以使用分號來分隔多個掃描包。
如果在配置文件中配置了<context:component-scan />
,就不用在配置<context:annotation-config/>
,因為前者已經包含了后者。<context:annotation-config/>
的作用是向spring容器注入AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、PersistenceAnnotationBeanPostProcessor 及RequiredAnnotationBeanPostProcessor 四個beanPostProcessor。從而使得@Autowired等注解生效。
<mvc:annotation-driven />
<mvc:annotation-driven />是告知Spring,我們啟用注解驅動。然后Spring會自動為我們注冊DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter等幾個Bean到工廠中,此時我們可以使用@RequestMapping、@Valid注解來處理請求,也可以使用@ResponseBody來處理返回結果。
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>/WEB-INF/mail.properties</value> <value>classpath: conf/sqlmap/jdbc.properties</value></list> </property> </bean>
PropertyPlaceholderConfigurer可以將上下文(配置文件)中的屬性值放在另一個單獨的標准java Properties文件中去。在XML文件中用${key}替換指定的properties文件中的值。這樣的話,只需要對properties文件進 行修改,而不用對xml配置文件進行修改。
上面有兩種value的寫法,其中classpath是引用src目錄下的文件寫法。
<bean scope="singleton" id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean>
DriverManager類的主要作用是管理注冊到DriverManager中的JDBC驅動程序,並根據需要使用JDBC驅動程序建立與數據服務器的網絡連接。
DriverManagerDataSource在每個連接請求時都新建一個連接,但是建立與數據庫的連接是一項較耗資源的工作,頻繁的進行數據庫連接建立操作會產生較大的系統開銷,為了解決上述問題,可以采用數據庫連接池技術,例如dbcp、c3p0、druid(spring配置數據庫連接池druid)。
<!-- 配置mybatis的SessionFactory --> <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:conf/mybatis-config.xml" /> <property name="mapperLocations"> <array> <value>classpath:com/wdcloud/fayu/mapper/*Mapper.xml</value> </array> </property> <!-- 配置此項則在mapper中可以直接使用實體類名,而不需要使用全路徑名 --> <property name="typeAliasesPackage" value="com.wdcloud.fayu.entity" /> </bean> <!-- 自動掃描注冊mapper接口類(接口類實現mybatis) --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.wdcloud.fayu.mapper" /> </bean> <!-- sqlSessionTemplate配置(模板類實現mybatis) --> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" scope="prototype"> <constructor-arg index="0" ref="sqlSessionFactory"/> </bean>
上面為mybatis在spring中的配置,其中有兩種實現方式:接口類實現和模板類實現。
SqlSessionFactoryBean是mybatis的核心管理類,通過dataSource指定數據源,configLocation指定mybatis的配置文件,mapperLocations指定mapper的xml文件。
MapperScannerConfigurer的作用是自動掃描注冊mapper接口類到spring工廠中,當你的mapper接口類存在於多個目錄下時,basePackage的值可以配置成多個目錄,中間用英文逗號隔開即可。
SqlSessionTemplate的作用是基於持久化模板類實現Mybatis(具體實現步驟)。
未完待續