SpringBoot实战教程-回顾Spring的Java配置方式

【仅需 订阅专栏合集,作者所有专栏都能看】

导读

  纯Java代码配置方式是Spring4.x推荐的配置方式,可以完全替代xml配置。因此注解式开发不是SpringBoot才有的,而是早已有之,只是SpringBoot带动了全注解式开发浪潮。本节追本溯源,温习一下Spring的Java配置方式。下一节正式进入SpringBoot实战技术讲解。

Spring注解驱动的发展

0.1.1、Spring1.x 时代

  在Spring1.x时代,都是通过xml文件配置bean,随着项目的不断演进,需要将xml配置拆分到不同的配置文件中,需要频繁的在java类和xml配置文件中切换。
虽然Spring1.2.0已经提供了@ManagedResource和@Transactional等注解,但是被注解修饰的Bean的装配仍然采用XML配置方式。

0.1.2、Spring2.x时代

  随着JDK 1.5的出炉,业界刮起了使用注解的浪潮,Spring2.x可以使用注解对Bean进行申明和注入,大大的减少了xml配置文件,同时也大大简化了项目的开发。这个时期引入了一些核心的注解。

  • 依赖注入 @Autowired
  • 依赖查找 @Qualifier
  • 组件声明 @Component、@Service
  • SpringMVC注解 @Controller、@RequestMapping

尽管这个阶段增加了不少注解,但是仍需XML配置驱动,即<context:annotation-config>、<context:component-scan>

0.1.3、Spring3.x到Spring4.x

  从Spring3.x开始提供了Java配置方式,陆续引入了配置类注解@Configuration、替代<context:component-scan>的@ComponentScan、声明组件的@Bean等。
Spring4.x开始又提供了更加完善的注解驱动能力,引入了@Conditional等条件注解,使得自动装配如鱼得水。

0.1.4、Spring5.x时代

  我们就处于这个时代,从Spring4.x开始,java配置的方式就开始流行起来,使用Java配置方式可以更好地从代码层面理解应用的上下文关系。

Spring的Java配置方式

0.2.1、核心注解

Spring的Java配置方式是通过 @Configuration 和 @Bean 这两个注解实现:

  • @Configuration 作用于类上,相当于一个xml配置文件
  • @Bean 作用于方法上,相当于xml配置中的 < bean >

0.2.2、Java配置示例

  该示例演示了通过Java配置的方式构建Spring应用,并且实现了Spring IOC功能。注意,本例只是普通maven工程而非SpringBoot应用。

创建传统Maven工程

pom.xml

<dependencies>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.2.RELEASE</version>
  </dependency>
</dependencies>
编写User对象

org.example.model.User

public class User {
    private String userName;
    private String password;
    private Integer age;
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
}
编写UserDAO模拟与数据库交互

org.example.dao.UserDAO

public class UserDAO {
    public List<User> queryUserList() {
        List<User> result = new ArrayList<User>();
        // 模拟数据库的查询
        for (int i = 0; i < 10; i++) {
            User user = new User();
            user.setUserName("userName_" + i);
            user.setPassword("password_" + i);
            user.setAge(i + 10);
            result.add(user);
        }
        return result;
    }
}
编写UserService实现业务逻辑

org.example.service.UserService

@Service
public class UserService {
    @Autowired
    private UserDAO userDAO;

    public List<User> queryUserList() {
        return userDAO.queryUserList();
    }
}
编写SpringConfig 用于实例化Spring容器

org.example.config.SpringConfig

@Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个xml文件
@ComponentScan(basePackages = "org.example") //配置扫描包
public class SpringConfig {
    @Bean // 通过该注解来表明是一个Bean对象,相当于xml中的<bean>
    public UserDAO getUserDAO() {
        return new UserDAO();
    }
}
启动Spring容器测试

org.example.App

public class App {
    public static void main(String[] args) {
        // 通过Java配置来实例化Spring容器
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
        // 在Spring容器中获取Bean对象
        UserService userService = context.getBean(UserService.class);
        // 调用对象中的方法
        List<User> list = userService.queryUserList();
        for (User user : list) {
            System.out.println(user.getUserName() + ", " + user.getPassword() + ", " + user.getPassword());
        }
        // 销毁该容器
        context.close();
    }
}
运行结果

在这里插入图片描述
从以上的示例中可以看出,使用纯Java代码就完美地替代了xml配置文件,并且结构更加的清晰。我们没有引入任何SpringBoot相关的依赖,这充分说明了注解驱动开发在SpringBoot之前就有了。

本章小结

  本章带领大家回顾了一下spring注解发展史,并结合一个例子展示了Spring的纯Java的配置方式。

《Spring Boot & Kubernetes 云原生微服务实践》回顾 背景 前一段时间把极客时间的《Spring Boot & Kubernetes 云原生微服务实践》这一课程学完了,感觉有不少收获,至少能够确认之前的不少做法是正确的当然也有不少野路子。总想抽点时间做一下回顾,记录一下。 课程介绍 课程内容一共由94讲,内容还是比较丰富的,本文只能起到稍微丰富的导读作用。 讲师介绍 杨波,资深架构师,微服务技术专家。曾在拍拍贷担任基础架构研发总监,主导了拍拍... 阅读详情

相关推荐

VS2022如何兼容老项目?.NET Framework 4.0/4.5安装避坑指南

本文提供了在Visual Studio 2022中兼容和维护.NET Framework 4.0/4.5等老旧项目的完整解决方案。针对VS2022无法直接识别旧框架的核心问题,文章详细剖析了原因,并重点推荐通过官方NuGet包安全获取引用程序集的方法,给出了从下载、解压到部署至标准目录的详细步骤。同时,文章还深入探讨了项目文件格式过旧、NuGet包还原失败等进阶问题的排查与解决策略,旨在帮助开发者高效、稳定地在现代开发环境中维护历史代码库。

weixin_27734811的博客 514

VASP+机器学习快速收敛AIMD

本文介绍了如何利用VASP结合机器学习技术快速收敛AIMD(从头算分子动力学)模拟。首先,通过训练机器学习力场,生成关键文件如ML_ABN(包含结构数据集)、ML_FFN(存储回归结果)和ML_LOGFILE(记录训练日志)。接着,配置INCAR文件以设置计算参数,包括并行化、分子动力学和机器学习相关参数。KPOINTS文件用于定义K点网格。计算完成后,备份CONTCAR文件作为后续模拟的初始结构。最后,利用训练好的力场文件进行纯机器学习力场分子动力学模拟,并提交任务执行。

qq_44812865的博客 1405

发那科机器人编程软件fanuc roboguide授权补丁_工业机器人离线编程与应用:ROBOGUIDE V8.3版本的工程文件创建...

欢迎关注我们ROBOGUIDE是发那科机器人公司提供的一个离线编程工具,可模拟现实中的机器人和周边设备的布局,通过虚拟TP示教来模拟机器人的运动轨迹,同时可以验证方案的可行性和准确的周期时间。ROBOGUIDE是一款核心应用软件,具体的还包括搬运、弧焊、喷涂等其他模块。以最新的8.3版本为例进行讲解,对于未注册的版本将有30天的免费使用期限。开始菜单击开始菜单中的HandingPRO启动程序,第一...

weixin_39791446的博客 2925

DBeaver 实战:手动配置 PostgreSQL JDBC 驱动的高级技巧

本文详细介绍了在DBeaver中手动配置PostgreSQL JDBC驱动的高级技巧。针对企业内网、多版本数据库兼容等场景,从获取官方驱动文件、创建自定义驱动配置,到使用Maven坐标管理、连接参数调优及解决常见连接问题,提供了完整的实战指南,帮助开发者实现对数据库连接环境的精准掌控。

apple5的专栏 837

机器人动力学仿真软件:V-REP (CoppeliaSim)_(15).仿真项目案例分析

通过以上几个具体的仿真项目案例,我们展示了如何在V-REP (CoppeliaSim)中进行二次开发,实现复杂的机器人动力学仿真任务。这些案例涵盖了六轴机械臂的运动学仿真、移动机器人的路径规划和避障、以及无人机的飞行控制和环境感知。每个项目都通过编写Lua脚本实现了对机器人模型的控制和任务执行,并通过仿真结果分析验证了算法的有效性和系统性能。希望这些案例能够为读者在实际项目中使用V-REP (CoppeliaSim)提供有益的参考和启发。

kkchenjj的博客 1295

【Python_PySide6学习笔记(二十四)】菜单栏QMenuBar类的基本用法

此篇文章中介绍 PySide6 中 QMenuBar 类的基本用法,包括"创建菜单栏"、"创建一级菜单"、"创建二级菜单"等,会持续更新,有需要的读者可以点赞收藏,也欢迎在评论区进行讨论。

禾戊之昂的博客 1625

YOLOv12改进策略【Neck】| 使用CARAFE轻量级通用上采样算子

CARAFE内容感知的特征重新组合。

Limiiiing的博客 664

基于Python的军事装备数据爬取与分析:从网页抓取到数据可视化实战

本文将详细介绍如何使用Python最新技术栈构建一个完整的军事装备数据爬虫系统。我们将从爬虫基础讲起,逐步深入到异步爬取、反反爬策略、数据存储与分析等高级主题,最终实现一个能够自动抓取、清洗、存储和分析军事装备数据的完整解决方案。文章包含大量实战代码示例,涉及requests-html、aiohttp、Playwright等现代爬虫库,以及MongoDB存储、Pandas分析和Pyecharts可视化等技术。关键词:Python爬虫、军事数据、异步爬取、反反爬、数据可视化。

2201_76125261的博客 1189

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: SpringBoot实战教程-开篇词(总目录)
下一篇: SpringBoot实战教程-springboot概论
程猿薇茑
程猿薇茑 优质创作者: Java技术领域 优质创作者: Java技术领域 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄16年 6050粉丝 213原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程猿薇茑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值