Spring 更简单的读取和存储对象、使用注解存取对象

这篇具有很好参考价值的文章主要介绍了Spring 更简单的读取和存储对象、使用注解存取对象。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.前言

我们知道物件都会随着时代的发展,越变越简单的。Spring 框架也不意外;我们在之前存储Bean对象是在配置文件中添加<bean></bean>来存入Bean对象到Spring当中的,使用那个类对象就要存入那个,一个两个类对象还好,如果需要的对象多了,就会非常麻烦。现在,随着 Spring 发展不用再担心这个了,我们可以通过配置轻松解决这件事。往下看,看看怎么个事吧!

2.存储 Bean对象

2.1 前置任务:配置扫描路径(重中之重)

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.demo"></content:component-scan>
</beans>

注意:想要将对象成功的存储到 Spring 中,我们需要配置⼀下存储对象的扫描包路径(base-package=""这个选项),只有被配置的包下的所有类,添加了注解才能被正确的识别并保存到 Spring 中。

2.2 添加注解存储 Bean 对象

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

  1. 类注解:@Controller、@Service、@Repository、@Component、@Configuration
  2. 方法注解:@Bean

2.2.1 类注解

在类注解中虽然它们的五个名字各不相同,但是他们的作用都是一样的,一会解释为啥这样设计;并且这里面@Component是其他四个类注解的父类。

注:它们五个作用是一样,这里举例就用五个类注解其中一个来举例了,这里使用@Controller。如果想验证它们是否作用一样,可以将例子代码的@Controller换成其他类注解验证。

例子:
将 Bean对象 存储到 Spring 的代码:

@Controller //将对象存储到 Spring 中
public class UserController {
    public void sayHi() {
        System.out.println("唱跳rap");
    }
}

我们可以在启动项中验证一下是否放入成功,如何验证呢?那就是我们在 Spring 中去取存入的对象看能不能取出来就行了。代码如下:

public class App {

    public static void main(String[] args) {
        //1.加载 Spring 上下文
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        //2.取对象
        UserController userController = context.getBean("userController", UserController.class);
        //3.使用 Bean对象
        userController.sayHi();
    }
}

看控制台非常成功的完成了唱跳rap,这样证明我们完成使用@Controller将 Bean对象存储到了Spring当中了:
Spring 更简单的读取和存储对象、使用注解存取对象

✨五大类注解作用一样,为啥不合并?
既然功能一样,为啥需要那么多的类注解呢?
这里举一个特别好理解的例子,我们知道咱国家的车牌号组成是 城市名称缩写+ 字母+编号 ,就像我们开封的就是 豫 B: ×××××× ,我们首都就是 京:×××××× 。我们看车票号就能看出来它是哪里的。五大类注解也是这样,有五大类注解,我们看到那个注解就知道这个注解是使用在那个范围的!

这里说到了五大类注解使用范围不一样,那就看看它们使用范围:
五大类注解用途:

  1. @Controller(控制器):归属于业务逻辑层,用来控制用户的行为,它用来检查用户参数的有效性。
  2. @Service(服务):归属于服务层,调用持久化类实现相应的功能。【不直接和数据库交互的,它类似于控制中心】
  3. @Repository(仓库):归属于持久层,是直接和数据库进行交互的。通常每一个表都会对应一个@Repository
  4. @Configuration(配置):归属于配置层,是用来配置当前项目的一些信息。
  5. @Component(组件):归属于公共工具类,提供某些公共方法。

五大类分工不同,那它们是如何串联起来工作的呢?看下方:
Spring 更简单的读取和存储对象、使用注解存取对象

2.2.2 方法注解 @Bean

类注解是添加到某个类上的,而方法注解是放到某个⽅法上的,只使用 @Bean是不能完成对象的存储的,需要配合五大类注解使用才能存储成功,使用方法如下:

存储对象过程:

@Component
public class UserBeans {
    @Bean
    public User user1() {
        //这里是伪代码
        User user =new User();
        user.setId(1);
        user.setName("张三");
        return user;
    }
}

这里注意,@Bean存储的是方法的返回值,比如上面这个方法,它存入就是方法中newuser这个实例对象。

在使用@Bean时,可以通过设置 name 属性给 Bean 对象进⾏重命名操作,如下代码:

@Component
public class UserBeans {
    @Bean(name = {"u1","u2"})
    public User user1() {
        //这里是伪代码
        User user =new User();
        user.setId(1);
        user.setName("张三");
        return user;
    }
}

可以看出这个name属性是个数组,因此我们可以给这个方法其很多个别名;这里起是别名,因此使用原来的名字user1也是可以取到这个对象的,也就是说,现在这个对象有三个名字分别是u1u2user1

3.获取 Bean对象

获取 bean 对象也叫做对象装配(对象注入),是把对象取出来放到某个类中,就是我们原原来写的成员变量,我们可以给他赋值,现在只是将赋值的这个过程给到 Spring 了。

对象装配(对象注入)的实现方法有三种:

  1. 属性注入
  2. 构造方法注入
  3. Setter注入

下面我们通过三种不同的实现方法,将Service类注入到Controller类中。

这里需要有前置工作,就是将Service类先存入到 Spring 当中,代码如下:

@Service
public class UserService {
    public User getUser(int id) {
    // 伪代码,不连接数据库
        User user = new User();
        user.setId(id);
        user.setName("Java-" + id);
        return user;
    }
}

3.1 属性注入

注入代码如下:

public class UserController {
    //属性注入
    @Autowired
    private UserService userService;
    public User getUser(int id) {
        return userService.getUser(id);
    }
}

3.2 构造方法注入

注入代码如下:

@Controller
public class UserController {   
    private UserService userService;
    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }
    public User getUser(int id) {
        return userService.getUser(id);
    } 
 }

注意:如果只有⼀个构造⽅法,那么 @Autowired 注解可以省略;但是如果类中有多个构造⽅法,那么需要添加上 @Autowired 来明确指定到底使⽤哪个构造⽅法,否则程序会报错.

3.3 Setter 注⼊

Setter 注⼊和属性的 Setter ⽅法实现类似,只不过在设置 set ⽅法的时候需要加上 @Autowired 注解

@Controller
public class UserController {
    private UserService userService;
    @Autowired
    public void setUserService(UserService userService) {
        this.userService = userService;
    }
    public User getUser(int id) {
        return userService.getUser(id);
    }
}

3.4 三种注释的优缺点

  • 属性注⼊的优点是简洁,使⽤⽅便;缺点是只能⽤于 IoC 容器,如果是非 IoC 容器不可⽤,并且只有在使⽤的时候才会出现空指针异常
  • 构造⽅法注⼊是 Spring 推荐的注入方式,缺点是如果有多个注⼊会显得⽐较臃肿,但出现这种情况你应该考虑⼀下当前类是否符合程序的单⼀职责的设计模式了,它的优点是通⽤性,在使⽤之前⼀定能把保证注⼊的类不为空。
  • Setter ⽅式是 Spring 前期版本推荐的注入方式,但通⽤性不如构造方法,所有 Spring 现版本已经推荐使⽤构造⽅法注⼊的⽅式来进⾏类注⼊了

3.5 另⼀种注⼊关键字:@Resource

在进⾏类注⼊时,除了可以使⽤ @Autowired 关键字之外,我们还可以使⽤ @Resource 进⾏注⼊。

🎉 @Autowired 和 @Resource 的区别文章来源地址https://www.toymoban.com/news/detail-514169.html

  1. 出身不同:@Autowired 来⾃于 Spring,而 @Resource 来⾃于 JDK 的注解;
  2. 使⽤时设置的参数不同:相⽐于 @Autowired 来说,@Resource ⽀持更多的参数设置,例如:name 设置,根据名称获取 Bean。
  3. @Autowired 可⽤于 Setter 注⼊、构造函数注⼊和属性注⼊,而@Resource 只能⽤于 Setter 注⼊和属性注⼊,不能⽤于构造函数注⼊

到了这里,关于Spring 更简单的读取和存储对象、使用注解存取对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Spring】使用注解读取和存储Bean对象

     哈喽,哈喽,大家好~ 我是你们的老朋友: 保护小周ღ    谈起Java 圈子里的框架,最年长最耀眼的莫过于 Spring 框架啦,本期给大家带来的是:  将对象存储到 Spring 中、Bean 对象的命名规则、从Spring 中获取bean 对象、注入的、@Autowired 与 @Resource 的区别、解决@Bean 方

    2024年02月13日
    浏览(37)
  • 【Spring】(三)Spring 使用注解存储和读取 Bean对象

    前面的文章详细的介绍了 Spring 对象的创建,以及对 Bean 对象的存取操作,但是通过配置文件注册 Bean 对象以及使用 ApplicationContext 或 BeanFactory 的方式获取 Bean 对象的操作就显得格外的复杂。因此,本文主要就是详细介绍了一种更加简单的方式来实现对 Bean 对象更加简单的储

    2024年02月14日
    浏览(27)
  • Spring 更简单的读取和存储对象

    在 Spring 中要想更简单的存储和读取对象 , 核心是 使用注解 , 所以我们需要通过 Spring 中相关注解 , 来存储和读取 Bean 对象. 之前我们存储 Bean 时 , 需要在 spring-config.xml 中添加一行注释才行: 而现在我们只需一个注解就可以替代之前要写一行配置 , 不过在存储对象之前 , 我们先

    2024年02月02日
    浏览(31)
  • 5-Spring更简单的读取和存储对象

    目录 1.存储Bean对象 1.1.前置工作:在配置文件中设置bean扫描的根路径(重要) 1.2.添加注解存储Bean对象到Spring中 1.2.1.类注解(添加到某个类上,将当前的类存储到Spring中):@Controller,@Service,@Repository,@Component,@Configuration 关于类注解的bean的命名规则: PS:为什么要这么多类

    2023年04月25日
    浏览(35)
  • Spring更简单的存储和读取Bean对象

    目录 1.第一个Spring项目 2.存储Bean对象 2.1 准备工作 2.2 五大类注解 2.3 方法注解@Bean 2.4 Bean对象的默认命名规则 3. 读取Bean对象 3.1 属性注入 3.2 setter注入 3.3 构造方法注入 3.4 注入异常问题 3.5 注入方式优缺点 3.6 @Autowired和@Resource的区别 在学习更简单的方式来读取和存储Bean对象

    2024年02月03日
    浏览(38)
  • Spring系列3 -- 更简单的读取和存储对象

             上一篇章总结了,Spring的创建与使用,通过创建Maven项目配置Spring的环境依赖,创建Spring框架的项目,然后通过在Resource目录下创建Spring-config.xml配置文件,添加bean/bean标签将我们需要的bean对象注入到容器中,然后通过ApplicationContext获取Spring上下文,使用getBean()方法获取be

    2024年02月13日
    浏览(28)
  • 【JavaEE进阶】Spring 更简单的读取和存储对象

    配置扫描路径是使用注解之前的前置工作,是非常重要的,是必须的操作项.只有被配置的包下的所有类,添加了注解才能被正确的识别并保存到 Spring 中. 首先创建一个Spring项目.创建好后,第一步就是配置扫描路径:在 resources 目录中创建一个 spring-config.xml 文件.然后在 spring-config.

    2024年02月12日
    浏览(30)
  • 【Spring框架全系列】Spring更简单的读取和存储对象

    📬📬哈喽,大家好,我是小浪。上篇博客我们介绍了如何创建一个spring项目,并且如何的存、取对象,介绍了相关方法,那么本篇博客将接着上篇博客的内容介绍如何更加简单的读取和存储对象。 🌃在 Spring 中想要更简单的存储和读取对象的核⼼是使⽤注解,也就是我们接

    2024年02月05日
    浏览(29)
  • JavaEE 突击 5 - Spring 更简单的读取和存储对象(2)

    大家新年快乐 , 祝大家新的一年如图 这个专栏给大家介绍一下 Java 家族的核心产品 - SSM 框架 JavaEE 进阶专栏 Java 语言能走到现在 , 仍然屹立不衰的原因 , 有一部分就是因为 SSM 框架的存在 接下来 , 博主会带大家了解一下 Spring、Spring Boot、Spring MVC、MyBatis 相关知识点 并且带领

    2024年02月19日
    浏览(41)
  • Spring使用注解存储Bean对象

    在前一篇博客中( Spring项目创建与Bean的存储与读取(DL))介绍的是通过配置文件注册对象从而存储到 Spring 中,这种方式其实还是挺繁琐的。 实际上,在使用学习使用 Spring过程中,当我们要实现一个功能的时候,先应该考虑的是有没有相应的注解是实现对应功能的,Spring 中

    2024年02月16日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包