Spring基础(3)

[Spring Boot] 3. Spring Boot实现自动配置的基础 在第一篇文章介绍Spring Boot启动过程,提到了Spring Boot的核心能力 - 自动配置。这个能力也是Spring Boot非常大的卖点之一。对这个能力,相信很多同学都会比较好奇,Spring Boot是如何实现它的呢?但是在详细探究Spring Boot是如何实现自动配置之前,首先需要明确问题的来源是什么,以及了解目前Spring框架中提供的相关能力。引子问题是什么Spring中纷繁复 阅读详情
Spring进阶
1. 基于AspectJ的注解AOP
使用注解方式实现AOP操作
(1)创建对象
<bean id="book" class="cn.spring.web.action.Book">
<bean id="myBook" class="cn.spring.web.action.MyBook">
(2)开启AOP操作的自动代理
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
<context:component-scan base-package="cn.spring.web"
(3)在增强类上使用注解完成AOP操作
代码:
@Aspect
public class MyBook{
// 在方法上使用注解完成增强配置
@Before(value="execution(* cn.spring.web.action.Book.*(..))")
public void before1(){
System.out.println("before");
}
}
2. Spring的JdbcTemplate操作
Spring对不同对持久化层技术都进行了封装
1. JdbcTemplate对jdbc进行了封装
2. 实现CRUD操作
(1)导入JdbcTemplate使用对Jar包
spring-jdbc-4.2.4-RELAEASE.jar
spring-tx-4.2.4-RELEASE.jar
(2)创建对象,设置数据库信息
// 设置数据库信息
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///spring");
dataSource.setUsername("root");
dataSource.setPassword("root");
(3)创建JdbcTemplate对象,设置数据源
// 创建JdbcTemplate对象,设置数据源
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
(4)调用JdbcTemplate里对方法实现操作
// 调用JdbcTemplate对象里的方法实现操作
String sql = "insert into user values(?,?)";
jdbcTemplate.update(sql, "Admin","123");

String sql ="update user set username=? where username=?";
jdbcTemplate.update(sql, "admin","Admin");

String sql ="delete from user where username=?";
jdbcTemplate.update(sql, "admin");
(5)JdbcTemplate实现查询
使用接口RowMapper,JdbcTemplate针对这个接口没有实现类,得到不同类型的数据需要自己进行封装
(a)查询返回某一个值
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String sql = "select count(*) from user";
Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
(b)查询返回对象
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String sql = "select * from user where username=?";
User user = jdbcTemplate.queryForObject(sql, new MyRowMapper(), "tom");
System.out.println(user);

// 定义RowMapper的实现类
class MyRowMapper implements RowMapper<User>{
@Override
public User mapRow(ResultSet rs, int num) throws SQLException {
// 从结果集中获取数据
String username = rs.getString("username");
String password = rs.getString("password");
// 将数据封装到对象中
User user = new User();
user.setPassword(password);
user.setUsername(username);
return user;
}
}
(c)查询返回list集合
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String sql = "select * from user";
List<User> user = jdbcTemplate.query(sql, new MyRowMapper());
System.out.println(user);


3. Spring配置连接池
1. 配置c3p0连接池
(1)导入c3p0的jar包
mchange-commons-java-0.2.3.4.jar
c3p0-0.9.2.1.jar
(2)创建Spring配置文件,配置连接池
<!-- 配置c3p0的连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 注入属性值 -->
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql:///spring"></property>
<property name="user" value="root"></property>
<property name="password" value="root"></property>
</bean>
2. service和dao注入操作
(1)创建service和dao对象,在Service中注入了dao对象
<!-- 配置属性 -->
<bean id="userDao" class="cn.spring.c3p0.UserDao"></bean>
<bean id="userService" class="cn.spring.c3p0.UserService">
<property name="userDao" ref="userDao"></property>
</bean>
(2)创建JdbcTemplate对象,并注入到dao中
<!-- 配置属性 -->
<bean id="userDao" class="cn.spring.c3p0.UserDao">
<!-- 注入JdbcTemplate对象 -->
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
(3)在JdbcTemplate中注入dataSource
<!-- 创建JdbcTemplate对象 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!-- 将dataSource传递到JdbcTemplate中 -->
<property name="dataSource" ref="dataSource"></property>
</bean>
4. Spring事务管理
1. 事务概念
2. Spring进行事务管理API
(1)Spring事务管理的两种方式:
(a)编程式事务管理(不用)
(b)声明式事务管理
基于XML配置文件
基于注解方式
(2)主要的API
(1)接口PlatformTransactionManager事务管理器
Spring为不同的持久层框架提供了不同的实现类
Spring JDBC:DataSourceTransactionManager
Hibernate:HibernateTransactionManager
(3) 首先配置事务管理器
应用:
搭建转账环境
(1)创建数据库表
User Account
(2)创建Service和Dao以及注入关系
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 配置c3p0的连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 注入属性值 -->
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql:///spring"></property>
<property name="user" value="root"></property>
<property name="password" value="root"></property>
</bean>
<!-- 对象创建 -->
<bean id="orderService" class="cn.spring.transaction.service.OrderService">
<!-- 注入orderDao -->
<property name="orderDao" ref="orderDao"></property>
</bean>
<bean id="orderDao" class="cn.spring.transaction.dao.OrderDao">
<!-- 注入JdbcTemplate模版对象 -->
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!-- 将DataSource传递到JdbcTemplate中 -->
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>
3. Spring进行事务配置(声明式)
(1)基于XML配置文件
使用AOP思想进行配置
(a)配置事务管理器
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入dataSource -->
<property name="dataSource" ref="dataSource"></property>
</bean>
(b)配置事务增强
<!-- 配置事务增强 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!-- 做事务操作 -->
<tx:attributes>
<!-- 设置进行事务操作方法的规则 -->
<tx:method name="doAccount" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
(c)配置切面、切入点
<!-- 配置切入点、切面 -->
<aop:config>
<!-- 切入点 -->
<aop:pointcut expression="execution(* cn.spring.transaction.service.OrderService.*(..))" id="pointcut1"/>
<!-- 切面 -->
<aop:advisor advice-ref="reAdvice" pointcut-ref="pointcut1"/>
</aop:config>

(2)基于注解方式
(a)配置事务管理器
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入dataSource -->
<property name="dataSource" ref="dataSource"></property>
</bean>

(b)配置事务注解
<!-- 开启事务注解 -->
<tx:annotation-driven transaction-manager="transactionManager"/>

(c)在要使用事务的方法所在的类上添加注解
@Transactional
public class OrderService {
private OrderDao orderDao;
public void setOrderDao(OrderDao orderDao) {
this.orderDao = orderDao;
}
public void doAccount(){
orderDao.descSalary();
// 出现异常
int i = 1/0;
orderDao.incrSalary();
}
}
全面掌握Spring3框架:从基础到实践指南 Spring框架诞生于2003年,由Rod Johnson发起并设计。它的出现极大地简化了企业级Java应用的开发,并迅速成为业界标准之一。Spring的核心设计理念是“非侵入式”编程,这意味着开发者可以在使用Spring框架的同时,不必依赖于Spring的API。这种灵活性与低耦合的特性使得Spring得以在众多Java框架中脱颖而出。在Spring框架中,Bean的生命周期被严格管理,从Bean的创建到销毁,每一个阶段都是可配置、可扩展的。 阅读详情

相关推荐

Figma到Axure一键转换:Axhub Extension保姆级教程(含常见问题解决)

本文提供Axhub Extension的保姆级教程,详细讲解如何将Figma设计稿一键转换为Axure高保真交互原型。教程涵盖环境准备、核心转换四步走流程,并重点解决JSON导入失败、样式错乱、复杂组件转换等常见问题,旨在打通Figma与Axure之间的数据孤岛,大幅提升设计师和产品经理的原型制作效率。

night的博客 1577

Spring Boot 3 整合Redis(1) 基础功能

如何在 Spring Boot 3 和 Java 17 中整合 Redis,并利用其实现高效的缓存功能,从而显著提升应用的响应速度和性能。特别是在高并发的场景下,使用 Redis 作为缓存是一种极其有效的优化策略。

Harry的博客 1180

深入CRSF协议数据包:手撕STM32代码,教你像调试串口一样分析ELRS遥控数据流

本文深入解析CRSF协议数据包,通过手撕STM32代码,教你如何像调试串口一样分析ELRS遥控数据流。从硬件准备到数据包捕获状态机设计,再到高级数据分析技巧和实战应用,全面覆盖CRSF协议的解析与优化,帮助开发者构建稳定可靠的通信系统。

weixin_29194693的博客 337

Spring Boot | 学习Spring Boot 3要有哪些Java基础?

学习Spring Boot 3需要扎实的Java基础,主要包括四个层面: 基础核心:面向对象编程、集合框架、异常处理、IO/NIO、反射和注解(Spring底层实现关键) 进阶核心:函数式编程、并发编程、类加载机制和JDBC基础(提升开发效率和性能) Java 17+新特性:Record类、密封类、文本块、Switch表达式等(Spring Boot 3标配) 工程化工具:Maven/Gradle、JUnit 5、日志框架和Java EE规范(项目开发必备) 重点在于掌握反射机制(理解Spring注解和Be

张较瘦 1404

【详细】芯片设计全流程(包括每个流程需要用到的工具以及需要参与的工作人员)

一颗芯片的诞生经历了设计、制造和测试(分别对应集成电路产业链的设计业、制造业和封测业),而每一步都包含了复杂的步骤和流程。 图0-1 集成电路产业链 现在,我们重点介绍芯片设计的全流程以及每个流程需要用到的设计工具和需要参与的工作人员。 一、IC设计分类 首先对IC设计的分类做个介绍,如图1-1所示。 图1-1 IC设计分类 如图1-1所示,IC设计可以粗分为数字IC设计和射频/模拟IC设计,数字IC设计又可分为ASIC设计和FPGA/CPLD设计,此外还有一部分IC设计.

qq_36045093的博客 8万+

告别Docker Desktop!Colima在Mac上的5分钟极速安装与配置指南(M1芯片实测)

本文详细介绍了如何在Mac(尤其是M1芯片)上快速安装和配置Colima,作为Docker Desktop的免费替代品。通过优化配置和实战指南,帮助开发者提升容器运行效率,减少资源占用,实现丝滑的开发体验。

weixin_28839601的博客 446

Spring Boot3零基础教程,整合 SSM,笔记52

Spring Boot3零基础教程,整合 SSM,笔记52

道友 291

西门子S7-1200PLC控制步进电机的组态编程和具体步骤

西门子S7-1200PLC控制步进电机的组态编程和具体步骤 硬件准备: 1) 一个S7-1214C DC/DC/DC,订货号:6ES7 214-1AG40-0XB0 2) 一个86系的步进电机+相应的驱动器 3) 一个20A的西门子24V电源(步进驱动器及plc电源) 4) Portal V15版本 组态及编程: 1) 创建一个验证项目,添加cpu( S7-1214C),双击“工艺对象”,选择“运动控制”的TO_PositioningAxis V6.0版本,如下图所示: 2) “确定”后,系统自动生成名

Robot_PLC_HMI_Automation 1万+

Spring Boot 3零基础教程,Spring Intializer,笔记05

Spring Boot 3零基础教程,Spring Intializer,笔记05

道友 303

软件设计师---程序设计语言

软件设计师---程序设计语言

我从不打没有准备的仗! 2万+

模型实战(32)之 yolo26 实现对全身关键点数据集 的训练与关键点检测

模型实战(32)之 yolo26 实现对全身关键点数据集 的训练与关键点检测

yohnyang的博客 90

基于Spring Boot3 Spring Cloud2023 Spring Cloud Alibaba2023对外提供一个分布式微服务最新基础示例模板

基于Spring Boot3 Spring Cloud2023 Spring Cloud Alibaba2023对外提供一个分布式微服务最新基础示例模板

qq_46274911的博客 1491

RH850从0搭建Autosar开发环境【2X】- Davinci Configurator之EcuC模块配置详解(上)

RH850从0搭建Autosar开发环境【2X】- Davinci Configurator之EcuC模块配置详解(上)

weixin_42412049的博客 1530

Spring Boot3零基础教程,Spring Boot 3 新特性,笔记94

Spring Boot3零基础教程,Spring Boot 3 新特性,笔记94

道友 323

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【Spring基础3】- Spring的入门程序

Spring的入门程序——本章通过第一个 Spring 程序,实现了基于 XML 配置的方式实现 Spring 对 Bean 对象进行管理的操作。

weixin_44382896的博客 1735

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Spring Boot3零基础教程,docker 批量安装软件,笔记68

Spring Boot3零基础教程,docker 批量安装软件,笔记68

道友 309

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Spring基础3

一、AOP   1)AOP简介:     Aspect Oriented Programming,面向切面编程     通过预编译方式和动态代理实现程序功能的一种技术,AOP是OOP的延续,是函数式编程的一种衍生范例。利用AOP可以对业务逻辑各个部分进行隔离,从而使得业务逻辑之间的耦合度降低,提高程序的可重用性,同时提高开发效率。     AOP采用横向抽取机制取代了传统纵向继承...

diaozeqi6995的博客 95

1.3 Spring基础: Spring基础配置

1.3 Spring基础: Spring基础配置 1.Spring框架的四大原则 1.使用pojo进行轻量级和最小侵入式开发 2.通过依赖注入和基于接口编程实现松耦合 3.通过AOP和默认习惯进行声明式编程 4.s使用AOP和 模板(template)减少模式化代码 1.3.1 依赖注入 1.IOC(Inversion of Controller 控制反转)和DI(dependency in...

one_chao的博客 159

Spring boot 3基础

我的第一篇博客,以此记录(2025.10.29)以下内容是我在看完黑马程序员的spring boot课程后,总结的内容,代码是我一个一个手敲的。

universe_ITDream的博客 437

Spring Boot3零基础教程,SpringSecurity 测试,笔记81

Spring Boot3零基础教程,SpringSecurity 测试,笔记81

道友 289

Spring Boot 3零基础教程,WEB 开发 默认欢迎页 笔记28

Spring Boot 3零基础教程,WEB 开发 默认欢迎页 笔记28

道友 631

基于 Spring Boot 3 和 Spring Cloud 2023 的微服务基础框架 hdfk7-boot

摘要: hdfk7-boot 是基于 Spring Boot 3 的微服务基础框架,旨在解决微服务项目中基础设施重复整合的问题。项目提供统一依赖管理(Spring Boot 3.3.13、Spring Cloud 2023.0.6 等)、公共协议模型(统一返回、异常处理)、通用 Starter(集成 Nacos、OpenFeign、MyBatis-Plus 等)及示例工程(网关与普通服务)。核心模块包括父 POM 版本控制、common-sdk 基础协议、starter-common 通用组件(如防重提交、

惜缘破军 372

Spring Boot3零基础教程,响应式编程的模型,笔记109

Spring Boot3零基础教程,响应式编程的模型,笔记109

道友 294

Spring Boot 3零基础教程,Spring Boot 日志分组,笔记20

Spring Boot 3零基础教程,Spring Boot 日志分组,笔记20

道友 314

Spring Boot3零基础教程,StreamAPI 更多用法,笔记100

Spring Boot3零基础教程,StreamAPI 更多用法,笔记100

道友 1787
上一篇: Spring基础(2)
下一篇: MyBatis基础(1)
imarklei
博客等级 码龄11年 79粉丝 39原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值