Spring 配置文件:

  • 对放置位置无要求,因此需要指定配置文件的路径,一般放置在 src/main/resources 路径下,通过 classpath:springContext.xml 进行导入
  • 对命名无特定要求,一般按照约定俗成的方式进行命名
    • spring-context.xml
    • beans.xml
    • applicationContext.xml

可以通过 idea 开发工具自动生成:在 src/main/resources 文件夹上右键,【new】->【XML Configuration File】->【Spring Config】

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. https://www.springframework.org/schema/beans/spring-beans.xsd">
  6. </beans>

Spring 配置文件常见的配置项

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
  7. <!-- Spring的配置文件,配置主要业务逻辑 -->
  8. <!-- 数据源,事务控制,mybatis整合 -->
  9. <!-- 组件扫描 -->
  10. <context:component-scan base-package="com.example">
  11. <!-- 除外Controller的类 -->
  12. <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
  13. </context:component-scan>
  14. <!-- 引入数据库连接的配置文件 -->
  15. <context:property-placeholder location="classpath:db.properties"/>
  16. <!-- 配置Druid数据源 -->
  17. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
  18. <property name="driverClassName" value="${jdbc.driverClassName}"/>
  19. <property name="url" value="${jdbc.url}"/>
  20. <property name="username" value="${jdbc.username}"/>
  21. <property name="password" value="${jdbc.password}"/>
  22. </bean>
  23. <!-- 配置MyBatis整合 -->
  24. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  25. <!-- 指定mybatis的全局配置文件的位置 -->
  26. <property name="configLocation" value="classpath:mybatis-config.xml"/>
  27. <!-- 指定数据源 -->
  28. <property name="dataSource" ref="dataSource"/>
  29. <!-- mapper文件位置 -->
  30. <property name="mapperLocations" value="classpath:mapper/*.xml"/>
  31. </bean>
  32. <!-- 配置扫描器,将mybatis接口的实现加入到ioc容器中 -->
  33. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  34. <!-- 扫描所有dao接口的实现,加入到ioc容器中 -->
  35. <property name="basePackage" value="com.example.dao"/>
  36. </bean>
  37. <!-- 配置一个可以批量执行的SqlSession -->
  38. <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
  39. <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
  40. <constructor-arg name="executorType" value="BATCH"/>
  41. </bean>
  42. <!-- 配置事务管理 -->
  43. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  44. <!-- 数据源 -->
  45. <property name="dataSource" ref="dataSource" />
  46. </bean>
  47. <!-- 开启基于注解的事务,使用xml配置形式的事务(必要主要的都是使用配置式) -->
  48. <aop:config>
  49. <!-- 切入点表达式 -->
  50. <aop:pointcut id="txPoint" expression="execution(* com.example.service..*(..))"/>
  51. <!-- 配置事务增强 -->
  52. <aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint"/>
  53. </aop:config>
  54. <!-- 配置事务增强,事务如何切入 -->
  55. <!-- 即存在多个事务管理器时,需要使用transaction-manager指定 -->
  56. <tx:advice id="txAdvice">
  57. <tx:attributes>
  58. <!-- 所有方法都是事务方法 -->
  59. <tx:method name="*"/>
  60. <!-- 以get开始的所有方法 -->
  61. <tx:method name="get*" read-only="true"/>
  62. </tx:attributes>
  63. </tx:advice>
  64. </beans>

Spring 核心工厂

ApplicationContext,接口,用于屏蔽实现的差异,属于重量级资源,创建该对象时会消耗大量资源,因此,一个应用只会创建一个工厂对象,且线程安全的(多线程并发访问),主要的实现有如下几种:
Main和junit测试:

  • xml配置:ClassPathXmlApplicationContext
  • javaConfig配置:AnnotationConfigApplicationContext

Web:

  • xml配置:XmlWebApplicationContext
  • javaConfig配置:AnnotationConfigWebApplicationContext

配置细节:

  1. 只配置bean标签中的class属性:
    • <bean class="top.songfang.User"/>,则Spring会自动分配 id 值为top.songfang.User#0
    • 应用场景:该类为单例,且不被其他 bean 引用
  2. bean 的 name 属性与 id 属性的异同点:name,用来配置 bean 的别名
  • 相同点:都可以用来获取 bean
  • 不同点:
    • 同一 bean 中 name 属性可以定义多个,即name="name1,name2,...",id 只能定义一个
    • xml的 id 属性值,命名要求:必须以字母开头,且只能包含字母、下划线、数字、连字符(现在已经没有这种限制);name属性的值无特殊要求
  1. 其他细节:Spring反射创建对象时,一定会调用对象的无参构造方法,不管是否是public,因此,在使用Spring管理bean时,一定要提供无参构造方法