第五站:Java金——Spring框架的璀璨殿堂(一)

第五站:Java金——Spring框架的璀璨殿堂

踏入Java金的领域,我们来到了Spring框架的璀璨殿堂,这里是现代Java企业级应用开发的瑰宝。Spring通过其核心特性——依赖注入(IoC)和面向切面编程(AOP),以及Spring Boot的便捷启动与配置,为开发者提供了一条通往高效、简洁开发之路的金光大道。

IoC(Inverse of Control,控制反转)

IoC是Spring框架的核心,它将控制权从应用代码转移到框架,由框架负责管理对象的生命周期和依赖关系。

示例代码:

// 服务接口
public interface MessageService {void sendMessage(String msg);
}// 服务实现类
@Service
public class EmailService implements MessageService {@Overridepublic void sendMessage(String msg) {System.out.println("Sending email: " + msg);}
}// 控制器类
@RestController
public class MessageController {@Autowiredprivate MessageService messageService;@GetMapping("/send")public String sendMessage() {messageService.sendMessage("Hello Spring IoC!");return "Message Sent!";}
}
  • @Service注解标记EmailService为一个Spring托管的Bean。
  • @Autowired注解让Spring自动为MessageController注入MessageService的实例,实现了依赖的自动管理。
AOP(Aspect-Oriented Programming,面向切面编程)

AOP允许我们定义横切关注点,如日志记录、权限校验等,这些关注点可以独立于业务逻辑模块,通过切面统一处理。

示例代码:

@Aspect
@Component
public class LoggingAspect {@Before("execution(* com.example.service.*.*(..))")public void logBefore(JoinPoint joinPoint) {System.out.println("Executing: " + joinPoint.getSignature().getName());}
}
  • @Aspect标记LoggingAspect为一个切面。
  • @Before注解定义了一个前置通知,会在com.example.service包下的所有方法执行前打印一条日志。
Spring Boot:快速开发的加速器

Spring Boot让Spring应用的搭建、配置、部署变得前所未有的简单快捷。

示例代码:

@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
  • @SpringBootApplication是一个复合注解,包含了@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan,简化了配置工作。
  • 仅需一行SpringApplication.run()即可启动一个包含自动配置、嵌入式服务器等特性的Spring应用。

在Java的世界中,Spring框架无疑是一个强大的工具箱,它提供了多种功能,帮助开发者构建高效、可维护的企业级应用程序。下面我将通过一个简单的示例来展示Spring框架中的IoC和AOP特性,以及如何使用Spring Boot来快速启动一个应用程序。

示例:一个简单的博客系统

1. 项目结构
  • src/main/java/com/example/blog
    • BlogApplication.java - Spring Boot应用的入口
    • PostService.java - 业务逻辑服务
    • PostRepository.java - 数据访问层
  • src/main/resources
    • application.properties - 配置文件
2. Maven依赖

pom.xml文件中添加Spring Boot的起步依赖和相关配置:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency>
</dependencies>
3. Spring Boot 应用入口

BlogApplication.java:

package com.example.blog;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class BlogApplication {public static void main(String[] args) {SpringApplication.run(BlogApplication.class, args);}
}
4. 数据模型

定义一个简单的Post实体:

package com.example.blog;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;@Entity
public class Post {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String title;private String content;// Getters and setters
}
5. 数据访问层

PostRepository.java:

package com.example.blog.repository;import com.example.blog.Post;
import org.springframework.data.jpa.repository.JpaRepository;public interface PostRepository extends JpaRepository<Post, Long> {
}
6. 业务逻辑服务

PostService.java:

package com.example.blog.service;import com.example.blog.Post;
import com.example.blog.repository.PostRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class PostService {@Autowiredprivate PostRepository postRepository;public List<Post> findAllPosts() {return postRepository.findAll();}public Post savePost(Post post) {return postRepository.save(post);}
}
7. IoC 和 AOP 示例

PostService中使用IoC自动注入PostRepository。使用AOP来记录日志:

package com.example.blog.service;import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;@Aspect
@Component
public class LoggingAspect {private static final Logger logger = LoggerFactory.getLogger(LoggingAspect.class);@Before("execution(* com.example.blog.service.PostService.*(..))")public void logBeforeServiceMethod() {logger.info("Executing a method in PostService");}
}
8. 配置文件

application.properties:

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
9. 启动和测试

运行BlogApplication,然后通过浏览器或Postman访问localhost:8080/posts来查看所有帖子,或者发送POST请求来添加新帖子。

这个例子展示了如何使用Spring Boot快速搭建一个简单的RESTful服务,同时利用IoC和AOP简化代码和增强功能。通过这种方式,开发者可以专注于业务逻辑,而不必过多地关注底层的实现细节。

结语:

Spring框架的引入,无疑是Java开发领域的一场革命,它不仅简化了复杂的企业级应用开发,而且通过Spring Boot等子项目,降低了微服务架构的入门门槛,极大地提升了开发效率。从依赖注入到面向切面编程,再到Spring Boot的便捷启动,这一系列机制和工具的融合,使得Java应用构建变得既强大又优雅,引领我们走向了更高层次的开发实践。在Java这片多彩的世界中,Spring框架无疑是最璀璨夺目的金色篇章,它持续激发着开发者们的创造力,推动技术不断向前发展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/26460.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

测试多模态模型MiniCPM

目录 模型参考信息&#xff1a; 文件目录&#xff1a; 使用图片&#xff1a; 执行结果&#xff1a; 让模型用中文输出&#xff1a; 评价 模型参考信息&#xff1a; https://huggingface.co/openbmb/MiniCPM-Llama3-V-2_5 文件目录&#xff1a; 使用图片&#xff1a; h…

安卓编程入门学习:探索移动开发的奇妙世界

安卓编程入门学习&#xff1a;探索移动开发的奇妙世界 在数字时代的浪潮中&#xff0c;安卓编程已成为越来越多人探索的领域。无论是出于个人兴趣&#xff0c;还是职业发展的需要&#xff0c;学习安卓编程都是一项极具价值的技能。然而&#xff0c;对于初学者来说&#xff0c;…

HCIA14 DHCP 实验

动态主机配置协议 DHCP&#xff08;Dynamic Host Configuration Protocol&#xff09;由 RFC 2131 定义&#xff0c;采用客户端/服务器通信模式&#xff0c;由客户端&#xff08;DHCP Client&#xff09;向服务器&#xff08;DHCP Server&#xff09;提出配置申请&#xff0c;服…

HTML--给网站添加已运行时间的统计

原文网址&#xff1a;HTML--给网站添加已运行时间的统计_IT利刃出鞘的博客-CSDN博客 简介 本文介绍怎么给自己网站添加已经运行了多长时间。 代码 <html lang"cn"><head><meta http-equiv"Content-Type" content"text/html;charse…

KafkaQ - 好用的 Kafka Linux 命令行可视化工具

鉴于并没有在网上找到比较好的linux平台的kafka可视化工具&#xff0c;今天为大家介绍一下自己开发的在 Linux 平台上使用的可视化工具KafkaQ 虽然简陋&#xff0c;主要可以实现下面的这些功能&#xff1a; 1&#xff09;查看当前topic的分片数量和副本数量 2&#xff09;查…

力扣2187.完成旅途的最少时间

力扣2187.完成旅途的最少时间 朴素做法 二分答案 class Solution {long long check(vector<int> time,long long k){long long res0;for(auto t:time)res (long long)k/t;return res;}public:long long minimumTime(vector<int>& time, int totalTrips) {…

【GlobalMapper】去除数据黑边

tif数据加载出来有这种黑色的边框&#xff0c;使用 Global Mapper切片之后&#xff0c;会有那种黑色的色块加载出来 影像黑边出现的原因&#xff1a; 通常&#xff0c;由于影像格式、像素深度、无效值、背景值等原因&#xff0c;会产生黑边或者白边&#xff0c;给影像的拼接或…

【图书推荐】《Vue.js 3.x+Element Plus前端开发实战》

本书重点 Element Plus是一套采用Vue.js 3.x实现的UI组件库&#xff0c;它为开发者、设计师和产品经理提供了配套设计资源&#xff0c;可以帮助网站快速成型。 本书详解Vue.js 3.x和Element Plus开发方法&#xff0c;配套源码、PPT课件。 内容简介 本书分为两篇&#xff0c…

d3dcompiler_43.dll是什么文件?怎么高效率的解决d3dcompiler_43.dll丢失问题

d3dcompiler_43.dll是什么文件&#xff1f;当你知道d3dcompiler_43.dll这个文件名字的时候&#xff0c;相信你是遇到了d3dcompiler_43.dll丢失的问题了&#xff01;所以才会这样问&#xff0c;其实这就是一个普通的dll文件&#xff0c;对于电脑系统有着至关重要的作用&#xff…

干货分享:宏集物联网HMI通过S7 MPI协议采集西门子400PLC数据

前言 为了实现和西门子PLC的数据交互&#xff0c;宏集物联网HMI集成了S7 PPI、S7 MPI、S7 Optimized、S7 ETH等多个驱动来适配西门子200、300、400、1200、1500、LOGO等系列PLC。 本文主要介绍宏集HMI通过S7 MPI协议采集西门子400PLC数据的操作步骤&#xff0c;其他协议的操作…

【面经总结】Java基础 - IO

序列化 什么是序列化和反序列化&#xff1f; 序列化&#xff1a;将对象转换为二进制数据 反序列化&#xff1a;将二进制数据转换为对象 目的&#xff1a;方便网络传输、持久化保存 Java 是怎么实现序列化的&#xff1f; Java 通过对象输入输出流来实现序列化和反序列化&a…

Vue全局组件

全局组件 首先说明一下&#xff0c;本人是前端小学生级别的菜鸡&#xff0c;吐槽的话请口下留情&#xff0c;在评论区指出错误或者补充不足&#xff0c;我会很喜欢&#xff0c;互喷不会进步&#xff0c;相互指点才会。。。。谢谢大家啦 目录 全局组件 目录内置模板引入模板优…

tp6+swoole+mysql+nginx+redis高并发优化

1.服务器 IDC机房提供的物理机&#xff1a;单机 40核&#xff0c;64G内存&#xff0c;带宽100M&#xff0c; 2.redis 7.2配置 timeout600 #空闲连接超时时间,0表示不断开 maxclients100000 #最大连接数 3.Mysql 5.7配置&#xff0c;按宝塔16-32G优化方案并调整&#xff1a;…

通用大模型VS垂直大模型,相辅相成!

1.通用大模型&#xff1a; 如OpenAI的GPT系列、Google的PaLM等&#xff0c;因其广泛的训练数据来源和强大的泛化能力&#xff0c;展现出在多种任务和场景中的应用潜力。它们能够处理从文本生成、代码编写到语言翻译等多种复杂任务&#xff0c;适应性强&#xff0c;减少了针对单…

第二届京津冀现代商贸物流金融创新发展百人大会将于6月16日在廊坊举行

编辑&#xff5c;Ray 物流是实体经济的“筋络”&#xff0c;联接生产和消费、内贸和外贸&#xff0c;必须有效降低全社会物流成本&#xff0c;增强产业核心竞争力&#xff0c;提高经济运行效率。《京津冀协同发展规划纲要》赋予河北“三区一基地”的功能定位&#xff0c;建设全…

第十七章 策略模式

目录 1 策略模式概述 2 策略模式原理 3 策略模式实现 4 策略模式应用实例 5 策略模式总结 1 策略模式概述 策略模式(strategy pattern)的原始定义是&#xff1a;定义一系列算法&#xff0c;将每一个算法封装起来&#xff0c;并使它们可以相互替换。策略模式让算法可以独立…

如何通过Python爬虫提升电商数据分析效率

如何通过Python爬虫提升电商数据分析效率 电商环境中&#xff0c;数据是决策的核心。无论是市场分析、竞争对手研究&#xff0c;还是商品定价和库存管理&#xff0c;获取并分析大量的实时数据都是至关重要的任务。Python 作为一种强大的编程语言&#xff0c;其简单易用的特性使…

java实现文件的压缩及解压

一、起因 开发中需要实现文件的压缩及解压功能&#xff0c;以满足某些特定场景的下的需要&#xff0c;在此说下具体实现。 二、实现 1.定义一个工具类ZipUtils,实现文件的压缩及解压&#xff0c;代码如下&#xff1a; import java.io.*; import java.nio.charset.Charset; impo…

######## redis各章节终篇索引(更新中) ############

其他 父子关系&#xff08;ctx、协程&#xff09;#### golang存在的父子关系 ####_子goroutine panic会导致父goroutine挂掉吗-CSDN博客 参数传递&#xff08;slice、map&#xff09;#### go中参数传递&#xff08;涉及&#xff1a;切片slice、map、channel等&#xff09; ###…

TCPListen客户端和TCPListen服务器

创建项目 TCPListen服务器 public Form1() {InitializeComponent();//TcpListener 搭建tcp服务器的类&#xff0c;基于socket套接字通信的//1创建服务器对象TcpListener server new TcpListener(IPAddress.Parse("192.168.107.83"), 3000);//2 开启服务器 设置最大…