详解Spring 中 Bean 对象的存储和取出

 更新时间:2022年11月21日 16:57:30   作者:风能保暖内裤  
由于 Spring 拥有对象的管理权,所以我们也需要拥有较为高效的对象存储和取出的手段,下面我们来分别总结一下,对Spring 中 Bean 对象的存储和取出知识感兴趣的朋友跟随小编一起看看吧

由于 Spring 拥有对象的管理权,所以我们也需要拥有较为高效的对象存储和取出的手段,下面我们来分别总结一下:

存对象

配置文件

在存储对象之前,我们需要先配置一下 Spring 的扫描目录,这样 Spring 即可在正确的目录中识别出我们想要给交给 Spring 进行管理的对象

首先在项目中的 resources 目录下添加一个 xml 文件,名字可以自定义

随后在这个 xml 中添加如下代码,这段代码可以直接复制,但是要修改倒数第二行的 base-package 中的路径改成自己的路径

<?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">
    <? 下面这行代码是设置 spring 的扫描目录,base-package 中的路径 可以直接设置成我们代码中的根目录 ?>
    <content:component-scan base-package="dir"></content:component-scan>
</beans>

类注释

在 Spring 中我们可以通过类注释或者方法注释来进行对象的存储,其中类注释是用的比较多的,类注释总共有 5 种:

  • @Conntroller,业务逻辑层
  • @Service,服务器存储
  • @Repository,仓库存储,可以用来操作数据库
  • @Component,项目组件层
  • @Configuration,配置层

这五种类注释的作用都是可以直接将这个类对象储存到 Spring 中,但是却有 5 种类注释,这么做的原因是:能够让我们看到类注释就能得知这个类的大致功用

命名规则

类注释中有两套命名规则

  • 如果当前类名中前两个字母都是大写,那么存入 Spring 中的对象名字默认是类名
  • 否则名字为第一个字母转为小写后的类名

除了上面 5 种类注释之外,还有方法注释

方法注释

方法注释就是将注释@Bean加到方法上方,并且必须搭配类方法使用

作用:将这个方法返回的对象存入到 Spring 中

例如

@Controller
public class Student {
    @Bean
    private Student getStudent() {
        return new Student();
    }
}

通过 @Bean 注释存入 Spring 中的对象名字默认是方法名,我们也可以直接在 @Bean 后面直接加上参数指定这个对象的名字,例如

@Controller
public class Student {
    @Bean(name="sb")  // 设置对象的名字
    private Student getStudent() {
        return new Student();
    }
}

取对象

在 Spring 中,获取 Spring 中的对象也有另一种叫法:对象装配
主要有三种对象装配的方式

属性注入

我们可以直接在成员变量中添加 @Autowired 注释, @Autowired 会优先匹配 Spring 中类名相同的对象,例如下面代码中的 user,Autowired 会优先按照 user 的类型在 spring 中进行匹配

@Controller
public class Student {
    @Autowired
    private User user;

    @Bean(name="sb")
    private Student getStudent() {
        return new Student();
    }
}

这种注入方式很简单也很快,但是缺点不少:

  • 可移植性差,这个用法是建立在 IoC 容器上的,移植到其他框架上可能无法使用
  • 无法注入不可变的对象,也就是 final 修饰的对象
  • 因为 final 修饰的变量只有两个初始化时机,第一个是直接赋值,第二个是在类的构造方法中赋值,显然这种对象注入的方式无法满足其中一个条件
  • 由于使用简单,容易滥用,所以比较容易被违背单一设计原则(即一个类只干一件事)

setter 注入

首先创建一个要注入的对象,然后通过「右键 — generate — setter」生成一个 setter 方法,最后在这个 setter 方法头顶上添加 @Autowired 注释

@Controller
public class Student {

    private User user;

    @Autowired  // 通过 setter 注入
    public void setUser(User user) {
        this.user = user;
    }
}

setter 注入的缺点:

  • 由于是 setter 方法,所以可能多次调用,这就意味着这个对象可以被多次修改
  • 依旧无法注入 final 修饰的对象,原因同上

构造方法注入

顾名思义,这是在构造方法上添加 @Autowired 注释来注入对象,如下

@Controller
public class Student {
    private User user;

    @Autowired
    public Student(User user) {
        this.user = user;
    }
}

构造方法注入的优点:

  • 由于是构造方法,只会执行一次,所以对象不会被重复更改
  • 可以注入 final 修饰的对象(在构造方法中赋值)
  • JDK本身就支持构造方法,所以有更低的门槛,说人话:具有更强的可移植性

到此这篇关于详解Spring 中 Bean 对象的存储和取出的文章就介绍到这了,更多相关Spring Bean 对象的存储内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • bootstrap.yml如何读取nacos配置中心的配置文件

    bootstrap.yml如何读取nacos配置中心的配置文件

    这篇文章主要介绍了bootstrap.yml读取nacos配置中心的配置文件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • SpringBoot整合SpringSecurity和JWT和Redis实现统一鉴权认证

    SpringBoot整合SpringSecurity和JWT和Redis实现统一鉴权认证

    Spring Security是一个可以为Java应用程序提供全面安全服务的框架,同时它也可以轻松扩展以满足自定义需求,本文主要介绍了SpringBoot整合SpringSecurity和JWT和Redis实现统一鉴权认证,感兴趣的可以了解一下
    2023-11-11
  • IDEA中使用Docker Compose容器编排的实现

    IDEA中使用Docker Compose容器编排的实现

    这篇文章主要介绍了IDEA中使用Docker Compose容器编排的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 详解 Java HashMap 实现原理

    详解 Java HashMap 实现原理

    这篇文章主要介绍了详解 Java HashMap 实现原理的相关资料,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下
    2021-03-03
  • java 中 request.getSession(true、false、null)的区别

    java 中 request.getSession(true、false、null)的区别

    这篇文章主要介绍了java 中 request.getSession(true/false/null)的区别的相关资料,需要的朋友可以参考下
    2017-02-02
  • Nacos Client的Bug解决方法记录

    Nacos Client的Bug解决方法记录

    这篇文章主要为大家介绍了Nacos Client的Bug解决方法记录,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • 聊聊SpringBoot使用Nacos进行服务注册发现与配置管理问题

    聊聊SpringBoot使用Nacos进行服务注册发现与配置管理问题

    Nacos支持基于DNS和基于RPC的服务发现(可以作为springcloud的注册中心)、动态配置服务(可以做配置中心)、动态 DNS 服务。本文重点给大家介绍SpringBoot使用Nacos进行服务注册发现与配置管理,感兴趣的朋友一起看看吧
    2022-01-01
  • Java关系操作符简写介绍

    Java关系操作符简写介绍

    下面小编就为大家带来一篇Java关系操作符简写介绍。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • servlet 解决乱码问题

    servlet 解决乱码问题

    这篇文章主要介绍了servlet 解决乱码问题 ,需要的朋友可以参考下
    2015-04-04
  • Java基础入门总结之序列化和反序列化

    Java基础入门总结之序列化和反序列化

    序列化是一种对象持久化的手段,普遍应用在网络传输、RMI等场景中,下面这篇文章主要给大家介绍了关于Java基础入门总结之序列化和反序列化的相关资料,需要的朋友可以参考下
    2022-02-02

最新评论