【Spring】获取Bean对象需要哪些注解

简介: @Conntroller,@Service,@Repository,@Component,@Configuration,关于Bean对象的五个常用注解

  image.gif 编辑

阿华代码,不是逆风,就是我疯

你们的点赞收藏是我前进最大的动力!!

希望本文内容能够帮助到你!!

目录

一:@Service(服务存储)

1:存储bean的代码

2:读取bean的代码

3:运行结果

二:@Repository(仓库存储)

1:存储bean的代码

2:读取bean的代码

3:运行结果

三:@Component(组件存储)

1:存储bean的代码

2:读取bean的代码

3:运行结果

编辑

四:@Configuration(配置存储)

1:存储bean的代码

2:读取bean的代码

3:运行结果

五:为什么需要这些不同的注解

1:注解的特点

(1)元注解@Component:

(2)源码分析

2:注解分类的优点

3:调用流程


引入:在上一篇文章中,我简单的认识了IoC容器和DI依赖注入,控制反转的基本原理,使用@Controller存储bean对象,以及三种获取bean对象的方式。本篇文章,将继续对bean对象的存储五大注解进行展开

一:@Service(服务存储)

1:存储bean的代码

@Service
public class UserService {
    public void sayHi(String name) {
        System.out.println("Hi," + name);
    }
}

image.gif

2:读取bean的代码

@SpringBootApplication
public class SpringIocDemoApplication {
    public static void main(String[] args) {
//获取Spring上下⽂对象
        ApplicationContext context =
                SpringApplication.run(SpringIocDemoApplication.class, args);
//从Spring中获取UserService对象
        UserService userService = context.getBean(UserService.class);
//使⽤对象
        userService.sayHi();
    }
}

image.gif

3:运行结果

image.gif 编辑

二:@Repository(仓库存储)

1:存储bean的代码

@Repository
public class UserRepository {
    public void sayHi() {
        System.out.println("Hi, UserRepository~");
    }
}

image.gif

2:读取bean的代码

@SpringBootApplication
public class SpringIocDemoApplication {
    public static void main(String[] args) {
//获取Spring上下⽂对象
        ApplicationContext context =
                SpringApplication.run(SpringIocDemoApplication.class, args);
//从Spring上下⽂中获取对象
        UserRepository userRepository = context.getBean(UserRepository.class);
//使⽤对象
        userRepository.sayHi();
    }
}

image.gif

3:运行结果

image.gif 编辑

三:@Component(组件存储)

1:存储bean的代码

@Component
public class UserComponent {
    public void sayHi() {
        System.out.println("Hi, UserComponent~");
    }
}

image.gif

2:读取bean的代码

@SpringBootApplication
public class SpringIocDemoApplication {
    public static void main(String[] args) {
//获取Spring上下⽂对象
        ApplicationContext context =
                SpringApplication.run(SpringIocDemoApplication.class, args);
//从Spring上下⽂中获取对象
        UserComponent userComponent = context.getBean(UserComponent.class);
//使⽤对象
        userComponent.sayHi();
    }
}

image.gif

3:运行结果

image.gif 编辑

四:@Configuration(配置存储)

1:存储bean的代码

@Configuration
public class UserConfiguration {
    public void sayHi() {
        System.out.println("Hi,UserConfiguration~");
    }
}

image.gif

2:读取bean的代码

@SpringBootApplicationpublic class SpringIocDemoApplication {
    public static void main(String[] args) {
//获取Spring上下⽂对象
        ApplicationContext context =
                SpringApplication.run(SpringIocDemoApplication.class, args);
//从Spring上下⽂中获取对象
        UserConfiguration userConfiguration =
                context.getBean(UserConfiguration.class);
//使⽤对象
        userConfiguration.sayHi();
    }
}

image.gif

3:运行结果

image.gif 编辑

五:为什么需要这些不同的注解

从上面的代码不难看出,这些注解的本质都是一样的,把对象交给Spring来管理,只是名称不同,那么它们各自都有什么特点呢?

1:注解的特点

(1)元注解@Component:

@Component是⼀个元注解,也就是说可以注解其他类注解,以下的这几个注解都是它的衍生注解。

@Controller:控制层。接收请求,对请求进行处理,并返回响应

@Service:业务逻辑层,主要处理具体的业务逻辑

@Repository:数据访问层,也叫持久层。主要负责数据的访问操作

@Configuration:配置层。处理项目中一些配置信息

(2)源码分析

以上的衍生注解⾥⾯都有⼀个注解@Component ,说明它们本⾝就是属于@Component 的"⼦类".

image.gif 编辑

2:注解分类的优点

@Controller , @Service 和@Repository ⽤于更具体的⽤例,在开发过程中,如果你要在业务逻辑层使⽤ @Component 或@Service,显然@Service是更好的选择

⽐如杯⼦有喝⽔杯,刷⽛杯等,但是我们更倾向于在⽇常喝⽔时使⽤⽔杯,洗漱时使⽤刷⽛杯.

这样分类的好处,不仅提高了代码的可读性,而且在处理复杂项目的时候,可以更好的对项目进行分层。就像你不能一口吃个胖子,得有条理有规划的吃。

3:调用流程

image.gif 编辑


相关文章
|
4月前
|
缓存 监控 Java
SpringBoot @Scheduled 注解详解
使用`@Scheduled`注解实现方法周期性执行,支持固定间隔、延迟或Cron表达式触发,基于Spring Task,适用于日志清理、数据同步等定时任务场景。需启用`@EnableScheduling`,注意线程阻塞与分布式重复问题,推荐结合`@Async`异步处理,提升任务调度效率。
766 128
|
3月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
504 2
|
4月前
|
Java 测试技术 数据库
使用Spring的@Retryable注解进行自动重试
在现代软件开发中,容错性和弹性至关重要。Spring框架提供的`@Retryable`注解为处理瞬时故障提供了一种声明式、可配置的重试机制,使开发者能够以简洁的方式增强应用的自我恢复能力。本文深入解析了`@Retryable`的使用方法及其参数配置,并结合`@Recover`实现失败回退策略,帮助构建更健壮、可靠的应用程序。
591 1
使用Spring的@Retryable注解进行自动重试
|
4月前
|
XML Java 数据格式
常用SpringBoot注解汇总与用法说明
这些注解的使用和组合是Spring Boot快速开发和微服务实现的基础,通过它们,可以有效地指导Spring容器进行类发现、自动装配、配置、代理和管理等核心功能。开发者应当根据项目实际需求,运用这些注解来优化代码结构和服务逻辑。
380 12
|
4月前
|
传感器 Java 数据库
探索Spring Boot的@Conditional注解的上下文配置
Spring Boot 的 `@Conditional` 注解可根据不同条件动态控制 Bean 的加载,提升应用的灵活性与可配置性。本文深入解析其用法与优势,并结合实例展示如何通过自定义条件类实现环境适配的智能配置。
240 0
探索Spring Boot的@Conditional注解的上下文配置
|
4月前
|
智能设计 Java 测试技术
Spring中最大化@Lazy注解,实现资源高效利用
本文深入探讨了 Spring 框架中的 `@Lazy` 注解,介绍了其在资源管理和性能优化中的作用。通过延迟初始化 Bean,`@Lazy` 可显著提升应用启动速度,合理利用系统资源,并增强对 Bean 生命周期的控制。文章还分析了 `@Lazy` 的工作机制、使用场景、最佳实践以及常见陷阱与解决方案,帮助开发者更高效地构建可扩展、高性能的 Spring 应用程序。
198 0
Spring中最大化@Lazy注解,实现资源高效利用
|
4月前
|
Java 测试技术 编译器
@GrpcService使用注解在 Spring Boot 中开始使用 gRPC
本文介绍了如何在Spring Boot应用中集成gRPC框架,使用`@GrpcService`注解实现高效、可扩展的服务间通信。内容涵盖gRPC与Protocol Buffers的原理、环境配置、服务定义与实现、测试方法等,帮助开发者快速构建高性能的微服务系统。
924 0
|
存储 Java 数据库
Spring的使用-Bean对象的储存和获取/Bea对象的作用域与生命周期
Spring的使用-Bean对象的储存和获取/Bea对象的作用域与生命周期
|
设计模式 前端开发 Java
Spring Bean对象生命周期
Spring Bean对象生命周期
549 0
|
存储 Java Spring
【Spring原理探索】深入认识对象生命周期之BeanPostProcessor
【Spring原理探索】深入认识对象生命周期之BeanPostProcessor
401 0
【Spring原理探索】深入认识对象生命周期之BeanPostProcessor