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)


相关推荐

  • python读取图片信息_糖炒栗子大的好还是小的好

    python读取图片信息_糖炒栗子大的好还是小的好这是一篇最基础的爬虫实例,大佬就不要看了,比较适合零基础或者有少量基础同学阅读

  • Linux Platform devices 平台设备驱动

    Linux Platform devices 平台设备驱动platform平台设备驱动是基于设备总线驱动模型的,它只不过是将device进一步封装成为platform_device,将device_driver进一步封装成为platform_device_driver,前面已经分析过设备总线驱动模型,关于device与device_driver的注册过程以及它们在sysfs文件系统中的层次关系就不在分析,本文重点分析platform平台

  • STM32–RFID无线射频技术(RC522刷卡模块)

    STM32–RFID无线射频技术(RC522刷卡模块)STM32+RC522刷卡模块,亲测可用!!!

  • pycharmpip升级失败_如何更新pip版本

    pycharmpip升级失败_如何更新pip版本更新pip版本出错查看pip的版本时提示需要更新执行更新出错打开文件管理找到当前虚拟环境下的lib下的site-packages文件删除pip-18.0.dist-info文件然后回到命令行执行python-mpipinstall–index-urlhttps://pypi.douban.com/simple–upgradepip即可完成pip的更新…

    2022年10月29日
  • 小米手机解锁BL以及获取Root权限(开发版)

    小米手机解锁BL以及获取Root权限(开发版)已经很久没有刷机了,现在有需要,就再刷一下。想起来自己以前刷机很流畅,现在还得查来查去的。所以就写了以下教程,主要是记录一下自己踩过的一些坑。我刷的手机是小米8,所以以下教程都是小米8为例,其他手机可能还有细微不同之处…….一、解锁BL:这是官方教程,很详细!我就是在教程中,把自己踩过的一些坑给罗列一下,增加一下自己的印象。解锁Bootloader的步骤:解锁前,请将版…

  • java控制台输入数组_Java控制台输入数组并逆序输出的方法实例

    java控制台输入数组_Java控制台输入数组并逆序输出的方法实例输入一个数组,然后颠倒次序进行输出,这种算法在程序开发中经常用到,下面我们通过一个小实例来看看怎么实现在控制台输入一个数组,并让其逆序输出的。源码:importjava.util.Scanner;publicclassTest01{publicstaticvoidmain(String[]args){System.out.println(“请输入五个数”);int[]l=newi…

发表回复

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

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