Spring【五大类注解的存储和读取Bean方法注解】(上)

简介: Spring【五大类注解的存储和读取Bean方法注解】

🍎一. 五大类存储 Bean 对象


上一篇博客我们已经可以实现基本的 Spring 读取和存储对象的操作了,但在操作的过程中我们发现读取和存储对象并没有想象中的那么“简单”,所以接下来我们要学习更加简单的操作 Bean 对象的⽅法


在 Spring 中想要更简单的存储和读取对象的核⼼是使⽤注解,也就是我们接下来要学习 Spring 中的相关注解,来存储和读取 Bean 对象


🍒1.1 配置spring-config.xml扫描路径


我们在resources文件下系创建一个带有.xml类型的文件,不是必须要设置成spring-config.xml这个名称的文件,只是方便我们辨识,或者工作中使用


之前我们存储 Bean 时,需要在 spring-config 中添加⼀⾏ bean 注册内容才⾏,这样会很麻烦,有可能我们在编写程序时忘记注册Bean的属性就会报错,不仅降低了工作效率,还增加了编程时产生的错误,⽽现在我们只需要⼀个注解就可以替代之前要写⼀⾏配置的尴尬了,不过在开始存储对象之前,我们先要来点准备:⼯作配置spring-config.xml扫描路径

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:content="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    <content:component-scan base-package="com.beans"></content:component-scan>
</beans>

e6c3f4d619f341439ea5dcb15d710b30.png

262e0aba784b40b5927a37cdd5469e3f.png

🍒1.2 添加五大类注解存储 Bean 对象


想要将对象存储在 Spring 中,有两种注解类型可以实现:

  1. 类注解@Controller、@Service、@Repository、@Component、@Configuration


🍉1.2.1 @Controller(控制器存储)


使⽤ @Controller 存储 bean 的代码如下所示:


@Controller
public class UserController {
    public void sayHi(String name){
        System.out.println("Hi"+ name);
    }
}

读取 bean 的代码:

public class Test {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
         UserController controller = context.getBean("userController",UserController.class);
        UserService service = context.getBean("userService",UserService.class);
        controller.sayHi("张三");
    }
}

1f1b2e8d1dfa43c1a140715efa5c680e.png


🍉1.2.2 @Service(服务存储)


使⽤ @Service 存储 bean 的代码如下所示:

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

读取 bean 的代码:

public class Test {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
         UserController controller = context.getBean("userController",UserController.class);
        UserService service = context.getBean("userService",UserService.class);
        service.sayHi("李四");
    }
}

f8a3103145e94825bd26827a787ba84b.png

🍉1.2.3 @Repository(仓库存储)


以上同理

@Repository
public class UserRepository {
        public void sayHi(String name){
                System.out.println("你好:" + name);
        }
}
public class Test {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
         UserController controller = context.getBean("userController",UserController.class);
         UserService service = context.getBean("userService",UserService.class);
        UserRepository repository = context.getBean("userRepository",UserRepository.class);
//        controller.sayHi("张三");
//        service.sayHi("李四");
        repository.sayHi("王五");
    }
}


🍉1.2.4 @Component(组件存储)


以上同理

@Component
public class UserComponent {
    public void sayHi(String name){
        System.out.println("你好:" + name);
    }
}
public class Test {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
         UserController controller = context.getBean("userController",UserController.class);
         UserService service = context.getBean("userService",UserService.class);
        UserRepository repository = context.getBean("userRepository",UserRepository.class);
        UserComponent component = context.getBean("userComponent",UserComponent.class);
//        controller.sayHi("张三");
//        service.sayHi("李四");
//        repository.sayHi("王五");
        component.sayHi("赵六");
    }
}

🍉1.2.5 @Configuration(配置存储)


以上同理

@Configuration
public class UserConfiguration {
    public void sayHi(String name){
        System.out.println("你好:" + name);
    }
}
 public class Test {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
         UserController controller = context.getBean("userController",UserController.class);
         UserService service = context.getBean("userService",UserService.class);
        UserRepository repository = context.getBean("userRepository",UserRepository.class);
        UserComponent component = context.getBean("userComponent",UserComponent.class);
        UserConfiguration configuration = context.getBean("userConfiguration",UserConfiguration.class);
//        controller.sayHi("张三");
//        service.sayHi("李四");
//        repository.sayHi("王五");
//        component.sayHi("赵六");
        configuration.sayHi("七七");
    }
}


🍒1.3 五大注解类小结


🍉1.3.1 为什么使用五大类注解


image.png


我们拿去银行办业务举例:


@Controller层就是保安,先要进行检查验证,然后到达Service服务厅询问业务,不同的业务来到Repository,不同的窗口,然后进行相应的工作人员办理业务!


🍉1.3.2 五大类注解之间的关系


我们可以在注解类的源码内看到@Controller、@Service、@Repository、@Configuration都是继承@Component


也就是说@Component是@Controller、@Service、@Repository、@Configuration这四个类的父类

5820208d765840ae8dc9ddcc61a9cb9a.png

相关文章
|
29天前
|
缓存 Java 数据库连接
Spring Boot奇迹时刻:@PostConstruct注解如何成为应用初始化的关键先生?
【8月更文挑战第29天】作为一名Java开发工程师,我一直对Spring Boot的便捷性和灵活性着迷。本文将深入探讨@PostConstruct注解在Spring Boot中的应用场景,展示其在资源加载、数据初始化及第三方库初始化等方面的作用。
49 0
|
13天前
|
缓存 安全 Java
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
从底层源码入手,通过代码示例,追踪AnnotationConfigApplicationContext加载配置类、启动Spring容器的整个流程,并对IOC、BeanDefinition、PostProcesser等相关概念进行解释
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
|
12天前
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
88 18
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
|
14天前
|
Java 数据库连接 数据格式
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
IOC/DI配置管理DruidDataSource和properties、核心容器的创建、获取bean的方式、spring注解开发、注解开发管理第三方bean、Spring整合Mybatis和Junit
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
|
29天前
|
监控 安全 Java
【开发者必备】Spring Boot中自定义注解与处理器的神奇魔力:一键解锁代码新高度!
【8月更文挑战第29天】本文介绍如何在Spring Boot中利用自定义注解与处理器增强应用功能。通过定义如`@CustomProcessor`注解并结合`BeanPostProcessor`实现特定逻辑处理,如业务逻辑封装、配置管理及元数据分析等,从而提升代码整洁度与可维护性。文章详细展示了从注解定义、处理器编写到实际应用的具体步骤,并提供了实战案例,帮助开发者更好地理解和运用这一强大特性,以实现代码的高效组织与优化。
48 0
|
1月前
|
缓存 Java Maven
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
|
2月前
|
Java 测试技术 数据库
Spring Boot中的项目属性配置
本节课主要讲解了 Spring Boot 中如何在业务代码中读取相关配置,包括单一配置和多个配置项,在微服务中,这种情况非常常见,往往会有很多其他微服务需要调用,所以封装一个配置类来接收这些配置是个很好的处理方式。除此之外,例如数据库相关的连接参数等等,也可以放到一个配置类中,其他遇到类似的场景,都可以这么处理。最后介绍了开发环境和生产环境配置的快速切换方式,省去了项目部署时,诸多配置信息的修改。
|
2月前
|
Java 应用服务中间件 开发者
Java面试题:解释Spring Boot的优势及其自动配置原理
Java面试题:解释Spring Boot的优势及其自动配置原理
99 0
|
8天前
|
Java 应用服务中间件 开发者
深入探索并实践Spring Boot框架
深入探索并实践Spring Boot框架
23 2
|
23小时前
|
Java 网络架构
springboot配合thymeleaf,调用接口不跳转页面只显示文本
springboot配合thymeleaf,调用接口不跳转页面只显示文本
11 0