当前位置: 首页 > news >正文

深入解析Spring框架关键特性

目录

1. Bean的生命周期与作用域管理

单例作用域Bean的生命周期

2. 外部属性配置

加载外部配置文件

3. 依赖注入(DI)

构造器注入

4. 注解驱动的开发

组件扫描

5. 整合第三方库

配置数据源

6. 与MyBatis的整合

配置SqlSessionFactory


1. Bean的生命周期与作用域管理

Spring的强大之处在于其对对象(Bean)生命周期的精细管理能力,使得资源使用更为高效。

单例作用域Bean的生命周期

在Spring中,默认的作用域是单例(singleton)。以下代码展示了如何通过注解定义一个单例作用域的Bean,并通过生命周期注解标记初始化和销毁时执行的方法。

@Repository
@Scope("singleton") // 明确标识作用域为单例
public class BookRepository {public BookRepository() {System.out.println("创建BookRepository实例");}@PostConstructpublic void init() {// 初始化方法,数据库连接等操作可以在此执行System.out.println("BookRepository 初始化");}@PreDestroypublic void cleanup() {// 清理方法,断开数据库连接等清理操作在此执行System.out.println("BookRepository 清理");}
}

2. 外部属性配置

Spring允许从外部属性文件动态加载配置,简化了代码与配置的分离,增加了应用的灵活性。

加载外部配置文件

Spring可以通过@PropertySource注解指定配置文件的位置,然后通过@Value注解将配置文件的值注入到Bean的属性中。

@Configuration
@PropertySource("classpath:config.properties") // 指定外部配置文件
public class AppConfig {@Value("${app.name}") // 从配置文件读取app.name属性值private String appName;@Beanpublic AppInfo appInfo() {AppInfo appInfo = new AppInfo();appInfo.setName(appName);return appInfo;}
}

3. 依赖注入(DI)

依赖注入是Spring框架的核心功能,它降低了组件间的耦合度。

构造器注入

通过构造器注入,Spring在创建Bean时自动注入必要的依赖。

@Service
public class UserService {private final UserRepository userRepository;@Autowired // 通过构造器注入UserRepositorypublic UserService(UserRepository userRepository) {this.userRepository = userRepository;}public void addUser(User user) {userRepository.save(user);}
}

4. 注解驱动的开发

注解简化了配置,提高了开发效率和代码的可读性。

组件扫描

Spring通过@ComponentScan注解自动寻找和注册Bean,避免了手动配置。

@Configuration
@ComponentScan(basePackages = "com.example.app") // 自动扫描com.example.app包下的@Component注解类
public class SpringConfig {
}

5. 整合第三方库

Spring的开放性允许它轻松整合第三方库,如数据库连接池、消息队列等。

配置数据源

以下示例展示了如何配置一个连接池数据源:

@Configuration
public class DataSourceConfig {@Beanpublic DataSource dataSource() {HikariDataSource ds = new HikariDataSource();ds.setJdbcUrl("jdbc:mysql://localhost:3306/springdb");ds.setUsername("root");ds.setPassword("password");return ds;}
}

6. 与MyBatis的整合

Spring与MyBatis的整合为数据访问层提供了强大的支持。

配置SqlSessionFactory

@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(dataSource);return sessionFactory.getObject();
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • wifi MSDU MPDU BA
  • linux-L5.linux查看应用占用的资源top
  • PD虚拟机占用多少内存?使用电脑的虚拟内存会损害电脑吗
  • 深入链表的遍历——快慢指针算法(LeetCode——876题)
  • Facebook的虚拟现实功能简介:社交网络的新前沿
  • Qt与VS打包命令
  • 安全基础设施如何形成统一生态标准?OASA 硬件安全合作计划启动 | 2024 龙蜥大会
  • 医学数据分析实训 项目二 数据预处理作业
  • JVM 调优篇7 调优案例1-堆空间的优化解决
  • Selenium打开浏览器后闪退问题解决
  • AndroidManifest.xml文件的重要信息
  • 38900 机动车安全检测
  • 编译原理:第一章 引论
  • [XILINX] 正点原子ZYNQ7015开发板!ZYNQ 7000系列、双核ARM、PCIe2.0、SFPX2,性能强悍,资料丰富!
  • leetcode3.无重复字符的最长子串
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 230. Kth Smallest Element in a BST
  • Asm.js的简单介绍
  • centos安装java运行环境jdk+tomcat
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • es6要点
  • exports和module.exports
  • JavaScript 基本功--面试宝典
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • SegmentFault 2015 Top Rank
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • vue-cli在webpack的配置文件探究
  • 高度不固定时垂直居中
  • 今年的LC3大会没了?
  • 聊聊hikari连接池的leakDetectionThreshold
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 微信小程序填坑清单
  • raise 与 raise ... from 的区别
  • 从如何停掉 Promise 链说起
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​ubuntu下安装kvm虚拟机
  • ‌‌雅诗兰黛、‌‌兰蔻等美妆大品牌的营销策略是什么?
  • # Redis 入门到精通(九)-- 主从复制(1)
  • #laravel部署安装报错loadFactoriesFrom是undefined method #
  • #QT(串口助手-界面)
  • #大学#套接字
  • (4)Elastix图像配准:3D图像
  • (4.10~4.16)
  • (libusb) usb口自动刷新
  • (NSDate) 时间 (time )比较
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (三)模仿学习-Action数据的模仿
  • (三十)Flask之wtforms库【剖析源码上篇】