Java-Spring入门指南(一)Spring简介
前言
刚开始学Java开发时,你是不是也遇到过这些头疼的问题?
写项目时要手动创建一大堆对象(比如
UserService
、OrderDao
),每个都要new
,万一漏了或者创建错了,程序就崩了;
模块之间粘得太死,比如改了“用户模块”的代码,“订单模块”突然就报错了,因为它们直接互相调用,牵一发而动全身;
每次做新项目,都要重复写日志、数据库连接、异常处理这些“通用工具”,明明别人已经写过了,却还要自己再造一遍轮子。
而Spring,就是为了解决这些问题而生的。它就像Java开发的“全能助手”,帮我们解决这些繁琐的事情,让我们能专注于写核心业务逻辑。
我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的Java-Spring入门指南知识文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_13040333.html?spm=1001.2014.3001.5482
一、Spring能干什么?
简单说,Spring是Java生态里最常用的对象管家+工具集合。
1. 管理 Java 对象
- 以前我们创建对象要自己写User user = new User(),如果 User 类的构造方法变了(比如加了个参数),所有写new User()的地方都得改。
例如
- 后来需求变化,User 类的构造方法需要增加 age 参数(并且移除了原来的构造方法):
有了 Spring,我们只需要告诉 Spring “我要一个 User 对象”,Spring 就会帮我们创建好,不用自己管 “怎么创建”“什么时候创建”—— 这就是 Spring 最核心的 “控制反转(IOC)” 思想,
2. 提供实用开发工具
- 开发中常用的功能(比如处理数据库、记录日志、控制事务、接收网页请求),Spring 都帮我们封装好了现成的工具,不用自己从零写。
- 比如连接数据库,不用手动写 “加载驱动、创建连接、关闭连接” 这些重复代码,Spring 的相关模块直接搞定。
二、Spring的优缺点
Spring不是完美的,但优点远大于缺点,尤其适合企业级项目(比如公司用的管理系统、电商平台)。
1. 优点
不用写繁琐的代码
比如连接数据库,以前要写“加载驱动→创建连接→处理异常”一大堆代码,现在Spring直接给你一个JdbcTemplate
,几行代码就能搞定查询,省了很多重复工作。举个例子:
手动写数据库查询(繁琐):
// 手动加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 手动创建连接
Connection conn = DriverManager.getConnection("url", "user", "password");
// 手动创建Statement
Statement stmt = conn.createStatement();
// 手动执行查询
ResultSet rs = stmt.executeQuery("select * from user");
用Spring的JdbcTemplate
(简洁):
@Autowired // Spring自动注入JdbcTemplate
private JdbcTemplate jdbcTemplate;
// 直接查数据,不用管连接、驱动
List<User> userList = jdbcTemplate.query("select * from user", new BeanPropertyRowMapper<>(User.class));
模块之间解耦
以前“用户模块”和“订单模块”是直接绑在一起的,比如
OrderService
里直接new UserService()
,一旦UserService
改了,OrderService
也要跟着改。
现在通过Spring,OrderService
不用自己new UserService
,而是让Spring把UserService
“送过来”(依赖注入),就算UserService
改了,OrderService
也不用动——就像两个积木不是用胶水粘死,而是用弹簧连接,动一个不影响另一个。兼容性强
我们开发时可能会用其他工具:比如用MyBatis操作数据库、用Redis存缓存……Spring就是一个万能接口,能和这些工具无缝配合,不用你手动写“对接代码”。- 比如MyBatis和Spring整合后,直接用
@Autowired
就能获取MyBatis的Mapper接口,特别方便。
- 比如MyBatis和Spring整合后,直接用
自带“安全防护”和“日志本”
开发项目时,有些功能是必须的但很麻烦:比如“事务管理”(转账时如果中途出错,要把钱退回去,不能只扣不转)、“日志记录”(谁登录了、谁付了钱,要记下来)。
Spring直接帮你做好了:用@Transactional
注解标注方法,Spring就会自动处理事务;用AOP(后面会讲)配置一下,就能自动记录所有操作日志,不用你在每个方法里写日志代码。
2. 缺点
- 入门容易,深入难
基础用法很简单(比如用@Component
让Spring管理对象),但如果想搞懂“Spring怎么记住所有对象的?”“AOP是怎么自动加日志的?”这些底层原理,就需要花点时间
三、Spring的核心模块
我们先了解Spring的核心模块是什么,后面再逐步掌握
模块名称 | 核心作用 |
---|---|
Core(核心容器) | 管理所有Java对象(IOC控制反转) |
AOP(面向切面编程) | 不改代码,给程序加通用功能(日志、事务) |
DAO(数据访问) | 简化数据库操作,避免重复写连接代码 |
ORM(对象关系映射) | 让Java对象和数据库表“对应”起来 |
Web模块 | 支持Web开发,处理浏览器请求 |
Spring MVC | 把Web开发分成“三部分”,分工明确 |
1. Core(核心容器):Spring的“对象仓库”
这是Spring最基础、最核心的模块,负责“保管”和“分发”Java对象——专业叫法是IOC(控制反转),简单说就是“对象的创建权从你手里交给了Spring”。
以前你要自己创建对象:
// 自己new对象,创建权在你手里
UserService userService = new UserService();
OrderDao orderDao = new OrderDao();
现在Spring帮你创建和保管:
@Component
public class UserService {
// 不用自己new,Spring会自动把OrderDao“送过来”
@Autowired
private OrderDao orderDao;
}
// 2. 从Spring的“仓库”里拿对象
public class Test {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = context.getBean(UserService.class);
}
}
2. AOP(面向切面编程)
AOP的作用是:在不修改原有代码的情况下,给多个方法“批量加功能”——就像你有10本笔记本,想在每本封面贴一个“姓名贴”,不用一本本手动贴,用机器批量贴(AOP)就行。
3. DAO(数据访问):Spring的“数据库小助手”
操作数据库是Java开发的高频需求,但手动写代码很麻烦:要加载驱动、创建连接、处理异常、关闭连接……稍有不慎就会出错(比如忘记关连接,导致数据库卡死)。
Spring的DAO模块(比如JdbcTemplate
)把这些“繁琐工作”全封装了,你只需要告诉它“查什么数据”,不用管“怎么连数据库”。
4. ORM(对象关系映射)
你有没有发现:Java里的User
类(有id、name、age属性)和数据库里的user
表(有id、name、age字段)长得几乎一样?但操作它们却要两套逻辑:操作User
对象用Java代码,操作user
表用SQL——很麻烦。
Spring的ORM模块就是帮你“打通”这两套逻辑:让User
对象和user
表“一一对应”,你操作User
对象,就相当于操作user
表数据。
5. Web模块
如果要开发网页后端(比如用户登录、商品展示),就需要处理浏览器发来的HTTP请求(比如用户输入账号密码后,点击登录,浏览器会发一个请求给后端)。
Spring的Web模块就是帮你“接好线”:整合Java的Web技术(比如Servlet),让你不用手动写“接收请求→解析参数→返回响应”的代码,直接用Spring的注解就能处理请求。
6. Spring MVC
当Web项目变复杂时(比如有登录、注册、购物、支付多个功能),如果所有代码都写在一个Controller
里,会很乱,不好维护。
Spring MVC就是帮你“分工”的:把Web开发分成Model(模型)、View(视图)、Controller(控制器) 三部分,各司其职
Controller(控制器)
负责接收浏览器的请求(比如用户点了“登录”),然后告诉后厨(Model)要做什么,最后把做好的“菜”(数据)交给前厅(View)。
比如上面的LoginController
就是控制器,接收登录请求,调用业务逻辑,返回页面。Model(模型)
负责处理核心业务逻辑(比如查数据库、判断账号密码、计算订单金额),然后把结果(数据)交给服务员(Controller)。
比如UserService
、UserMapper
就是模型,负责查用户数据、判断登录是否成功。View(视图)
负责把Model处理好的数据展示给用户(比如网页、APP界面)。
比如登录成功后的success.html
页面,就是视图,展示“登录成功,欢迎您!”的文字。