首页 > 其他分享 >Spring框架配置扩展

Spring框架配置扩展

时间:2024-07-24 18:53:32浏览次数:9  
标签:装配 框架 作用域 Spring 配置 扩展 Bean 数据源

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应用程序至关重要

标签:装配,框架,作用域,Spring,配置,扩展,Bean,数据源
From: https://blog.csdn.net/Pre_W/article/details/140670740

相关文章

  • SpringSecurity:hasAuthority与自定义权限校验
    springsecurity中有两种权限控制方法1.基于注解@PreAuthorize("hasAuthority('syst:add')")他的作用是在controller方法上进行权限校验,如果该用户具有对应的权限则放行,否则抛出AccessDeniedHandler,403(权限不足)2.基于配置//基于配置的权限控制http......
  • PHP现代化构建工具: 无需修改任何代码和扩展将你的ThinkPHP项目性能提高20倍
    我要分享一个令人激动的黑科技:PRipple使用这个项目能够在无需修改任何代码且无需第三方扩展的前提下,将你的Laravel项目性能提高20倍。他仅仅依赖于PHP原生的pcntl/posix/fiber/sockets项目灵感这个项目灵感来源于PHP8.1引入的fiber特性,以及Swoole和Workerman的......
  • 【Gin】架构的精妙编织:Gin框架中组合模式的革新实践与技术深度解析(下)
    【Gin】架构的精妙编织:Gin框架中组合模式的革新实践与技术深度解析(下)大家好我是寸铁......
  • 单队玩法扩展多队
    【阵法扩展】1.创建新阵法|复用旧阵法:根据功能情况,决定是采用何种方式。具体配置位置:formation_data的[多队阵法]2.创建新阵法:       策划配置项:构建新的多队id,构建此多队id下的各个阵法,如下例子服务端处理项:阵法初始化,不同于单......
  • 线段树扩展学习
    前言来补一下暑期集训的坑。正文标记可持久化这个很好理解,在进行区间修改的时候,不下传懒标记,查询的时候直接对每一层再进行处理即可。这个主要用于线段树分治,所以理解就行,代码不给了。动态开点之前一直不太会,现在来补一下。这种线段树主要用于优化空间复杂度。就是对于下......
  • Springboot的n多注解(自用)
    pojocontrollerservice(无)service.implmapper  ——————pojo@Dataget/set等@NoArgsConstructor无参构造@AllArgsConstructor有参构造 ——————controller@Slf4j......
  • ava 集合框架全解析:Collection vs Collections,Comparable vs Comparator,HashSet 工作
    Java中的集合框架是开发过程中不可或缺的一部分,但初学者常常会混淆其中的术语,特别是Collection和Collections。这篇博客将详细介绍它们之间的区别,并进一步探讨Comparable和Comparator、HashSet的工作原理,以及HashMap和Hashtable的区别。Collection和Collecti......
  • Known框架实战演练——进销存业务单据
    本文介绍如何实现进销存管理系统的业务单据模块,业务单据模块包括采购进货单、采购退货单、销售出货单、销售退货单4个菜单页面。由于进销单据字段大同小异,因此设计共用一个页面组件类。项目代码:JxcLite开源地址:https://gitee.com/known/JxcLite1.配置模块运行项目,在【系统......
  • Python爬虫开发中的常用库与框架安装指南
    在Python爬虫开发中,选择合适的库和框架可以大大提高开发效率和爬虫的性能。本文将介绍一些常用的解析库、请求库、储存库、Web库、App爬取库以及爬虫框架,并展示如何使用pip命令进行安装。一、解析库1.BeautifulSoupBeautifulSoup是一个用于从HTML或XML文件中提取数据的Pyth......
  • 计算机项目/基于Spring Boot+Vue的生活用品购物平台设计与实现/毕设/网站健身
    基于SpringBoot+Vue的生活用品购物平台设计与实现摘要:生活用品购物平台系统采用SpringBoot作为后端框架,提供高效的数据处理和业务逻辑实现;前端使用Vue.js,通过其响应式数据绑定和组件化开发,使得用户界面更具交互性和可扩展性,选择MySQL数据库存储数据。系统分为用户模块和管......