applicationContext.xml配置简介「建议收藏」

applicationContext.xml配置简介「建议收藏」spring的配置文件applicationContext.xml中的一些配置的作用。1.配置组件扫描器,使用注解方式开发<context:component-scanbase-package=”com.item.ikell”/>表示启动spring的组件扫描功能(从spring2.5版本开始)。即Spring容器初始化时,扫描base-package包或者子包下面的…

大家好,又见面了,我是你们的朋友全栈君。

spring的配置文件applicationContext.xml中的一些配置的作用。

1. 配置组件扫描器,使用注解方式开发

<context:component-scan base-package="com.item.ikell"/>

表示启动spring的组件扫描功能(从spring2.5版本开始)。即Spring容器初始化时,扫描base-package包或者子包下面的Java文件,如果扫描到有@controller、@Service、@Repository、@Component等注解的java类,就会将这些bean注册到工厂中 (纳入Spring容器管理)。还可以使用分号来分隔多个扫描包。 
      在类上,使用以下注解,实现bean的声明:
      @Component:泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
      @Controller 用于标注控制层组件(如springMvc的controller,struts中的action)
      @Service 用于标注业务层组件
      @Repository用于标注数据访问组件,即DAO组件    
          在类的成员变量上,使用以下注解,实现属性的自动装配
      @Autowired :按类的类型进行装配
      @Resource:
       1.如果同时指定了name和type,那么从Spring上下文中找到唯一匹配的bean进行装配
       2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常 
       3.如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常 
       4.如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如
           果匹配则自动装配;
如果在配置文件中配置了<context:component-scan />,就不用在配置<context:annotation-config/>,因为前者已经包含了后者。<context:annotation-config/>的作用是向spring容器注入AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、PersistenceAnnotationBeanPostProcessor 及RequiredAnnotationBeanPostProcessor 四个beanPostProcessor。从而使得@Autowired等注解生效。例如:<context:annotation-config />

<mvc:annotation-driven />

<mvc:annotation-driven />是告知Spring,我们启用注解驱动。然后Spring会自动为我们注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter等几个Bean到工厂中,此时我们可以使用@RequestMapping、@Valid注解来处理请求,也可以使用@ResponseBody来处理返回结果。

2. 加载外部的properties配置文件(引入jdbc的配置文件)

 <context:property-placeholder location="classpath:jdbc.properties"/>

3. 配置数据库连接池 

<!-- 配置数据库连接池 连接池,一般比较普遍使用的连接池有c3p0和JDBC这两种连接池  -->
<!-- <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> c3p0连接池 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"><!-- JDBC连接池 -->
		<!-- 指定基本信息 :jdbc的驱动名、url、数据库名字、密码-->
		<property name="driverClass" value="${driverClass}"></property>
		<property name="jdbcUrl" value="${jdbcUrl}"></property>
		<property name="user" value="${username}"></property>
		<property name="password" value="${password}"></property>
		
    	<!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
        <!-- 指定连接池中保留的最大连接数. Default:15-->  
        <property name="maxPoolSize" value="${jdbc.maxPoolSize}"/>  
        <!-- 指定连接池中保留的最小连接数-->  
        <property name="minPoolSize" value="${jdbc.minPoolSize}"/> 
        <!-- 指定连接池的初始化连接数  取值应在minPoolSize 与 maxPoolSize 之间.Default:3-->  
        <property name="initialPoolSize" value="${jdbc.initialPoolSize}"/>
		
        <!-- 当连接池中的连接耗尽的时候c3p0一次同时获取的连接数. Default:3-->  
        <property name="acquireIncrement" value="${jdbc.acquireIncrement}"/>  
        <!-- JDBC的标准,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements属于单个
            connection而不是整个连接池所以设置这个参数需要考虑到多方面的因数.如果maxStatements与
            maxStatementsPerConnection均为0,则缓存被关闭。Default:0-->  
        <property name="maxStatements" value="${jdbc.maxStatements}"/>         
        <!-- 最大空闲时间,${jdbc.maxIdleTime}(60)秒内未使用则连接被丢弃。若为0则永不丢弃。 Default:0-->  
        <property name="maxIdleTime" value="${jdbc.maxIdleTime}"/> 
        <!-- 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0 --> 
        <property name="idleConnectionTestPeriod" value="${jdbc.idleConnectionTestPeriod}"/> 
		<!-- maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。
             Default: 0 -->
		<property name="maxStatementsPerConnection" value="5"></property>  
  
        <!-- 数据库连接池过期时间应小于等于mysql的过期时间和mycat的过期时间 -->
        <property name="idleMaxAge" value="20" />
        <!-- 每个分区最大的连接数 -->
        <property name="maxConnectionsPerPartition" value="100" />
        <!-- 每个分区最小的连接数 -->
        <property name="minConnectionsPerPartition" value="20" />
        <!-- 分区数 ,默认值2,最小1,推荐3-4,视应用而定 -->
        <property name="partitionCount" value="1" />
        <!-- 每次去拿数据库连接的时候一次性要拿几个,默认值:2 -->
        <property name="acquireIncrement" value="2" />
        <!-- 缓存prepared statements的大小,默认值:0 -->
        <property name="statementsCacheSize" value="0" />
        <property name="connectionTimeoutInMs" value="100" />
        <!-- 每个分区释放链接助理进程的数量,默认值:3,除非你的一个数据库连接的时间内做了很多工作,
            不然过多的助理进程会影响你的性能 -->
        <property name="releaseHelperThreads" value="3" />
    </bean>
    

4.   配置mapper接口 MapperScannerConfigurer:配置dao接口的bean,在mybatis-spring.jar包中

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.cn21.calendar.dao" /><!-- 路径 -->
    </bean>

5. 配置session工厂 把数据源注入给Session工厂 
      SqlSessionFactory是创建访问数据库服务所必须的持久层
      configLocation Mybatis主配置文件路径,支持classpath语法
      mapperLocations 指定mybatis的mapper配置文件,支持classpath语法
      dataSource 数据源
      typeAliasesPackage 指定model层类名的别名扫描包,这与mapper配置中的paramterType和resultType搭配使用

 <!-- 配置session工厂   SqlSessionFactoryBean:配置映射文件的bean,在mybatis-spring.jar中 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 依赖注入数据源,正是上文定义的dataSource -->
        <property name="dataSource" ref="dataSource" />
        <!-- 文件映射器,指定类文件 -->
        <property name="configLocation" value="classpath:/config/sqlmybatis.xml" />
        <!-- 自动扫描mapping.xml文件    指定mybatis的mapper配置文件   -->  
         <property name="mapperLocations" value="classpath:/mapper/**Mapper.xml"></property>
    </bean>

6.  事务管理器

   <!-- 事务管理器 【事务配置 】 -->
   <!-- 要想使用事物控制,必须先配置一个事物管理器  DataSourceTransactionManager:spring事物管理器,基于JDBC,
        在org.springframwork.jdbc.版本.jar包中 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

7.  配置AOP 

<!-- 配置AOP通知 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
         <!-- 配置事务属性 -->
         <tx:attributes>
             <!-- 添加事务管理的方法 -->
             <tx:method name="save*" propagation="REQUIRED"/><!-- required 要求 -->
             <tx:method name="delete*" propagation="REQUIRED"/>
             <tx:method name="update*" propagation="REQUIRED"/>
             <tx:method name="select*" read-only="true"/>
         </tx:attributes>
     </tx:advice>
     
     <!-- 配置AOP,为添加事务管理的操作配置AOP -->
    <aop:config>
        <!-- 引入的Spring定义的事务通知,需要使用aop:advisor -->
        <!-- 下面难 -->
        <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.edu.test.service.*.*(..))" />
    </aop:config>

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/158347.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号