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

2022-11-22 21:42:50
目录
存对象配置文件类注释命名规则方法注释取对象属性注入setter 注入构造方法注入

由于 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>

类注释

在>

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

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

    命名规则

    类注释中有两套命名规则

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

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

      方法注释

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

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

      例如

      @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();
          }
      }

      取对象

      在>主要有三种对象装配的方式

      属性注入

      我们可以直接在成员变量中添加>

      @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 修饰的对象,原因同上

          构造方法注入

          顾名思义,这是在构造方法上添加>

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

          构造方法注入的优点:

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

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