Spring框架配置扩展

Spring框架的配置扩展是提高应用程序灵活性和可维护性的关键部分。通过不同的配置方法,我们可以更好地管理数据源、拆分配置文件、自动装配Bean以及控制Bean的作用域


1. 配置数据源

数据源配置是Spring应用程序中的关键部分,它直接影响到数据库操作的性能和管理

(1) 使用 properties 文件配置数据源

通过properties文件配置数据源是最常见和简单的方式。这种方式可以集中管理数据库连接属性,易于维护和修改

  • 步骤
    1. 创建一个application.propertiesdatabase.properties文件,用于存储数据库连接信息
    2. 在文件中定义数据源相关的属性:
      url=jdbc:mysql://localhost:3306/数据库
      username=root
      password=123456
      driver=com.mysql.cj.jdbc.Driver
      
    3. 在Spring配置中,通过引入properties文件,并通过${}取值定义DataSource bean:
      <!--    引入ProPerties文件-->
          <bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
              <property name="location">
                  <value>classpath:database.properties</value>
              </property>
          </bean>   
      
      
       <--Spring配置数据源-->
          <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
              <property name="driverClassName" value="${driver}"/>
              <property name="url" value="${url}"/>
              <property name="username"  value="${username}"/>
              <property name="password"   value="${password}"/>
          </bean>

(2) 使用 JNDI 配置数据源

Java Naming and Directory Interface (JNDI) 提供了一种标准的方式来配置和访问数据源。通常用于应用服务器中(如Tomcat、JBoss)来管理数据源连接

  • 步骤
    1. 在应用服务器中配置JNDI数据源。例如,在Tomcat中,你可以在context.xml中添加如下配置:
      <Resource name="jdbc/mydb"
                auth="Container"
                type="javax.sql.DataSource"
                maxTotal="20"
                maxIdle="10"
                maxWaitMillis="10000"
                driverClassName="com.mysql.cj.jdbc.Driver"
                url="jdbc:mysql://localhost:3306/mydb"
                username="root"
                password="secret"/>
      
    2. 在Spring配置中,通过上下文路径定义一个DataSource bean,并通过JNDI查找数据源:
      <!--    JNDI-->
          <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
              <property name="jndiName">
                  <value>java:comp/env/jdbc/cvs_db</value>
              </property>
          </bean>


2. 拆分Spring配置文件

在大型应用程序中,配置文件可能会变得非常庞大和复杂。通过拆分配置文件,可以提高可读性和维护性

  • 步骤
    1. 将不同的配置(如数据源配置、事务管理、Web配置等)拆分到不同的XML文件或Java配置类中
    2. 使用<import>标签在XML中导入其他配置文件:
          <import resource="classpath:applicationContext-dao.xml"/>
          <import resource="classpath:applicationContext-service.xml"/>
    3. 对于Java配置类,可以在主配置类中通过@Import注解导入其他配置类:
      @Configuration
      @Import({DataSourceConfig.class, ServiceConfig.class})
      public class AppConfig {
      }
      

3. Bean的自动装配

自动装配是Spring的一个重要特性,用于简化Bean的依赖注入

随着业务发展,项目不断膨胀,工作量大大提升,此时就可以使用自动装配的方式来解决问题了,直接在Spring配置文件中配置:

<bean id="sysUserMapper" class="com.ktjy.mapper.impl.SysUserMapperImpl" autowire="byType" scope="singleton"/>
    <bean id="sysUserService" class="com.ktjy.service.impl.SysUserServiceImpl" autowire="byName" scope="prototype"/>

autowire 属性

autowire 属性指定了Spring如何自动装配Bean的依赖关系。它有几个取值选项,每个选项都定义了不同的装配策略:

  1. no(默认值)

    • 描述:不进行自动装配,所有的依赖关系必须通过显式的<property><constructor-arg>标签来设置
    • 用例:用于需要完全控制依赖注入的情况
  2. byType

    • 描述:根据Bean的类型进行自动装配。Spring会查找容器中匹配的Bean类型,并将其注入到目标Bean中
    • 用例:当希望按照类型进行注入,并且有且只有一个符合类型的Bean时使用
  3. byName

    • 描述:根据Bean的名称进行自动装配。Spring会查找容器中与<property>指定的名称匹配的Bean,并将其注入到目标Bean中
    • 用例:当Bean的名称确定且唯一时使用,适用于需要按照名称注入的情况
  4. constructor

    • 描述:根据构造函数参数类型进行自动装配。Spring会根据构造函数参数的类型查找匹配的Bean进行注入
    • 用例:用于构造函数注入,适合需要通过构造函数注入依赖的情况
  5. autodetect

    • 描述:Spring会首先尝试通过构造函数进行自动装配,如果没有找到合适的构造函数,则尝试使用按类型装配
    • 用例:不常用,适合需要自动选择最佳装配方式的情况

 


4. Bean的作用域

Bean的作用域定义了Bean的生命周期和可见性

(1) 使用注解指定Bean的作用域

Spring支持多种Bean作用域,包括:

  • 单例(Singleton):默认作用域,一个Spring容器中只存在一个Bean实例

    @Component
    @Scope("singleton")
    public class MyService {
    }
    
  • 原型(Prototype):每次请求都会创建一个新的Bean实例

    @Component
    @Scope("prototype")
    public class MyService {
    }
    
  • 请求(Request):每个HTTP请求都会创建一个新的Bean实例(用于Web应用)

    @Component
    @Scope("request")
    public class MyService {
    }
    
  • 会话(Session):每个HTTP会话都会创建一个新的Bean实例(用于Web应用)

    @Component
    @Scope("session")
    public class MyService {
    }
    
  • 应用(Application):在ServletContext范围内只有一个Bean实例(通常在Web应用中用于跨多个请求共享状态)

    @Component
    @Scope("application")
    public class MyService {
    }
    

合理配置Bean的作用域,可以优化资源使用和性能,确保应用程序的正确性和效率


Spring框架的配置扩展功能提供了灵活而强大的手段来管理应用程序的各个方面。通过正确配置数据源、拆分配置文件、使用自动装配和控制Bean的作用域,我们可以实现更高效、可维护的应用程序架构,理解和掌握这些配置技巧,对于构建健壮的Spring应用程序至关重要

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值