首页 > 编程语言 >第五站:Java金——Spring框架的璀璨殿堂(一)

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

时间:2024-06-19 19:29:22浏览次数:13  
标签:Java Spring 第五站 example import org com public

第五站: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 {
    @Override
    public void sendMessage(String msg) {
        System.out.println("Sending email: " + msg);
    }
}

// 控制器类
@RestController
public class MessageController {
    @Autowired
    private 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 {
    @Autowired
    private 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框架无疑是最璀璨夺目的金色篇章,它持续激发着开发者们的创造力,推动技术不断向前发展。

标签:Java,Spring,第五站,example,import,org,com,public
From: https://blog.csdn.net/hummhumm/article/details/139649571

相关文章

  • 第八站:Java银——微服务架构的未来之光
    在云原生时代,Java凭借其强大的生态系统和成熟的微服务架构支持,成为了构建现代分布式系统不可或缺的一部分。以下是如何将Java、Docker、Kubernetes、以及SpringCloud结合起来,构建高效、可扩展的微服务应用的概述,结合简化的代码示例来说明这一过程。Docker容器化Docker提......
  • java datetime数据类型去掉时分秒
    在Java中,如果我们想要表示一个日期而不包括时间(时分秒),我们通常会使用java.time包中的LocalDate类。LocalDate是一个不可变的日期对象,它只包含年、月、日三个字段。1.datetime数据类型去掉时分秒案例一以下是如何使用LocalDate类以及如何从一个包含时间的日期时间对象(比如Loc......
  • Spring是如何通过三级缓存解决循环依赖的
    Spring是如何利用三级缓存解决循环依赖的转载自:https://www.cnblogs.com/xw-01/p/17561035.html1.定义问题1.1什么是循环依赖其实好理解,就是两个Bean互相依赖,类似下面这样:@ServicepublicclassAService{ @Autowired BServicebService;}@ServicepublicclassBSer......
  • Javascript入门博客【入门复习(学习)使用】
    JavaScript是一门高级,解释形语言,大量用于关于web网站的开发,可以和网页联动做出更多有趣的动画效果。其运行方式大都是嵌入在网页中运行。其实在定义方面如果过你是初学者来学习和这方面相关的知识,知道上面这些就已经足够了。我们可以在浏览器中直接进行对代码的控制,进入浏览器......
  • 【Java核心技术10】Java数组详解
    引言在Java编程中,数组是一种非常重要的数据结构,它允许我们存储同一类型的多个元素,并通过索引快速访问这些元素。本文将详细讲解Java数组的基本概念、创建、初始化、访问和修改,以及多维数组和数组的常见操作。无论你是Java的初学者,还是希望巩固基础的资深开发者,本文都将为......
  • 史上最全JAVA八股文——redis篇,欢迎收藏
    ......
  • Java O2O家政服务平台 云岚到家 项目实战视频教程 下载
    Java代码审计工程师视频教程下载│ 课时1代码审计导学.mp4│ 课时2 环境与工具安装使用讲解.mp4│ 课时3 JAVASE-1.mp4│ 课时4 JAVASE-2.mp4│ 课时5 JAVASE-3.mp4│ 课时6 JAVASE-4.mp4│ 课时7 JAVASE-5.mp4│ 课时8 JAV......
  • Java版-剑指offer数据结构与算法 视频教程 下载
    Java版-剑指offer数据结构与算法视频教程下载01-数据结构与算法入门基础clip.mp402-clip1.mp403-clip2.mp404-基础数据结构:数组&链表(一).mp405基础数据结构:数组&链表(二).mp406-基础数据结构:栈.mp407-基础数据结构:队列.mp408-算法思想:数论&枚举&递归&分治&回溯.mp409......
  • MinIO分布式存储从0到Vue+SpringBoot整合开发 视频教程 下载
    inIO分布式存储从0到Vue+SpringBoot整合开发视频教程下载 001MinIO课程介绍.avi002WhatisMinIO?.avi003MinIO人工智能的数据存储服务.avi004什么是对象存储.avi005MinIO版权许可.avi006MinIO下载.avi007MinIO安装.avi008MinIO启动.avi009MinIOWeb管理......
  • springboot小型超市商品展销系统-计算机毕业设计源码01635
    摘 要科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运用中,应用软件的工作规则和开发步骤,采用Springboot框架建......