JAVA配置文件之applicationContext.xml

来源:互联网 发布:知乎日报 吐槽精选 编辑:程序博客网 时间:2024/05/01 11:10

applicationContext.xml是spring的配置文件

1. component-scan 

Spring 容器初始化的时候,会扫描 com.application.business/ domain/ job下标有 (@Component,@Service,@Controller,@Repository) 注解的类纳入spring容器管理。

<context:component-scan base-package="com.application.business,    com.application.domain,    com.application.job"/>

在类上 ,使用以下注解,实现bean 的声明

@Service 用于标注业务层组件

@Controller 用于标注控制层组件(如srping mvc的controller,struts中的action)

@Repository 用于标注数据访问组件,即DAO组件

@Component 泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

在类的成员变量上,使用以下注解,实现属性的自动装配

@Autowired : 按类 的 类型进行装配

@Resource (推荐) : 

1 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常

2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常 

3.如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常 

4.如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;

5.Resource注解在字段上,这样就不用写setter方法了,并且这个注解是属于J2EE的,减少了与spring的耦合。


2. createDataSource

com.db.DataSourceFactory引入了一个jar包,其中定义了在本地的datasource.xml中查找db的配置信息,通过name=userDB_W进行查找。

<bean id="userDataSource" class="com.db.DataSourceFactory"      factory-method="createDataSource">    <constructor-arg value="userDB_W"/></bean>


3. SqlSessionFactoryBean实现了Spring的FactoryBean接口。这意味着Spring最终返回的不是SqlSessionFactoryBean而是作为factory 的getObject()方法返回的Object。

dataSource为数据源,db

configLocation为MyBatis 的 XML 配置文件路径,这个db里面的所有表。

mapperLocations用于指明一组XML Mapper文件位置。

从mapper和数据源,得到对应的一堆sql session。

<bean id="userSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">    <property name="dataSource" ref="userDataSource"/>    <property name="configLocation" value="classpath:META-INF/myBatis/mybatis-config-usermapper.xml"/></bean>


4. MapperScannerConfigurer 会 查 找 类 路 径 下 的 映 射 器 并 自 动 将 它 们 创 建 成 MapperFactoryBean

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">    <property name="annotationClass" value="org.springframework.stereotype.Repository"/>    <property name="basePackage" value="com.user.persistence.userdb.shard01"/>    <property name="sqlSessionFactoryBeanName" value="userSqlSessionFactory"/></bean>
annotationClass 属性指定了要寻找的注解名称为Repository。basePackage属性指定了要寻找的包地址,在这个包里面寻找注解名称为Repository的mapper接口。sqlSessionFactoryBeanName属性设置正确的bean名称,如果使用一个以上的 DataSource,自动装配可能会失效。这种情况下,使用sqlSessionFactoryBeanName或sqlSessionTemplateBeanName属性来指定。
com.user.persistence.userdb.shard01目录下的UserDb01Mapper接口: 
@Repository
public interface UserDb01Mapper {。。。}
com.user.persistence.userdb.shard01中存在的UserDb01Mapper用sql session建立连接到dataSource,注入到容器中。
5. DataSourceTransactionManager在事务处理期间,一个单独的 SqlSession 对象将会被创建 和使用。当事务完成时,这个 session 会以合适的方式提交或回滚。
<bean id="userTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">    <qualifier value="transactionManager"/>    <property name="dataSource" ref="userDataSource"/></bean>

@Transactional 注解和 AOP(Aspect-Oriented Program,面向切面编程)样式的配置都是支持的。一旦事务创建之后,MyBatis-Spring 将会透明的管理事务。在你的 DAO 类中就不需要额 外的代码了。


0 0
原创粉丝点击