Spring 使用注解储存对象

简介: 通过在 spring-config 中添加bean的注册内容,我们已经可以实现基本的Spring读取和存储对象的操作了,但在操作中我们发现读取和存储并没有那么简单,接下来我们来学习更加简单的操作Bean对象的方法。

前言

通过在 spring-config 中添加bean的注册内容,我们已经可以实现基本的Spring读取和存储对象的操作了,但在操作中我们发现读取和存储并没有那么简单,接下来我们来学习更加简单的操作Bean对象的方法。

在Spring中想要更简单的存储和读取对象的核心是使用注解,接下来我们来了解一下Spring中的相关注解,来存储对象。

存储 Bean 对象

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

  1. 类注解:@Controller、@Service、@Repository、@Component、@Configuration。(五大注解)
  2. 方法注解:@Bean

五大注解

在 Spring 框架中,有一些核心的注解被认为是 "Spring 的五大注解",它们分别是:

  1. @Component@Component 是一个通用的注解,用于标记一个类为 Spring 托管的组件。它可以被用于任何层(如数据访问、业务逻辑、控制器等),并告诉 Spring 在应用程序的上下文中自动创建并管理这些组件。
  2. @Repository@Repository 是用于标识数据访问层(DAO)组件的注解。它扩展了 @Component,并且通常被用于与数据库进行交互的组件。它提供了一些数据库访问的特殊功能,如异常转换。
  3. @Service@Service 是用于标识服务层组件的注解。它也扩展了 @Component,并且通常用于包含业务逻辑的组件。在应用程序中,服务层通常协调数据访问和业务逻辑之间的交互。
  4. @Controller@Controller 是用于标识控制器层组件的注解。它表示这个类是一个 Spring MVC 控制器,用于处理 HTTP 请求并返回响应。通常,它处理用户界面的交互,负责将用户请求映射到相应的处理方法。
  5. @RestController@RestController 是 Spring 4.0 版本引入的注解,用于标识 RESTful 风格的控制器。与 @Controller 不同的是,@RestController 不仅处理请求映射,还会自动将方法返回值转换为 JSON 或 XML 格式的响应。

这些注解是 Spring 框架中非常重要的一部分,它们使得应用程序的组件管理、数据访问、业务逻辑和控制器层的开发更加简单和高效。

五大注解示例

当使用 Spring 框架时,可以通过以下示例展示每个注解的用法:

  1. @Component 示例:
import org.springframework.stereotype.Component;

@Component
public class MyComponent {
    // 类的定义
}
  1. @Repository 示例:
import org.springframework.stereotype.Repository;

@Repository
public class UserRepository {
    // 数据访问相关代码
}
  1. @Service 示例:
import org.springframework.stereotype.Service;

@Service
public class UserService {
    // 业务逻辑相关代码
}
  1. @Controller 示例:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HomeController {

    @GetMapping("/home")
    public String homePage() {
        return "index";
    }
}
  1. @RestController 示例:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ApiController {

    @GetMapping("/api/greet")
    public String greet() {
        return "Hello, world!";
    }
}

在这些示例中,每个注解都被用于不同的类类型,以表明它们的角色和用途。它们在 Spring 框架中自动被扫描和管理,从而简化了组件的创建和管理过程。

配置包扫描路径

在上面我们介绍了类注解,但是想要将对象成功的存储到 Spring 中,我们还需要配置一下存储对象的扫描包路径,只有配置的包下的所有类,添加了注解才能被正确的识别并保存到 Spring 中。即使添加了注解,如果不是在配置的扫描包下的类对象,也是不能被存储到 Spring 中的。

在 spring-config.xml 中添加如下配置:(有关配置文件的内容请参考[spring创建与使用])
除了增加xmlns:context外,还需要在xsi:schemaLocation增加spring-context.xsd描述,然后添加注册扫描的包

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

    <context:component-scan base-package="com.fyd"/>

</beans>
可以把这个配置作为模板,下次直接复制粘贴过去就好了

读取bean的示例

  • UserController类
package com.fyd;

import org.springframework.stereotype.Controller;

@Controller
public class UserController {
    public void sayHello(String name) {
        System.out.println("Hello " + name);
    }
}
  • 启动类
import com.fyd.UserController;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {
    public static void main(String[] args) {
        // 1. 得到 Spring 的上下文对象
        ApplicationContext context =
                new ClassPathXmlApplicationContext("spring-config.xml");
        // 2. 从上下文对象中得到需要的 bean
        UserController userController = (UserController) context.getBean("userController");
        // 3. 使用对象
        userController.sayHello("fyd");
    }
}

image.png

方法注解 @Bean

类注解是添加到某个类上的,⽽⽅法注解是放到某个⽅法上的。方法注解@Bean要配合类注解才能将对象正常的存储到Spring容器中,如以下代码的实现:
存对象:

package com.fyd;

import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

@Component
public class Users {
    @Bean
    public User user1() {
        User user = new User();
        user.setName("fyd");
        user.setAge(18);
        return user;
    }
}

使用对象:

import com.fyd.Users;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {
    public static void main(String[] args) {
        ApplicationContext context =
                new ClassPathXmlApplicationContext("spring-config.xml");

        Users users = (Users) context.getBean("users");

        System.out.println(users.user1().getName());
    }
}

执行效果:
image.png

Bean 命名规则

通常我们 bean 使⽤的都是标准的⼤驼峰命名,⽽读取的时候⾸字⺟⼩写就可以获取到 bean 了,如下图所示:
image.png

当我们⾸字⺟和第⼆个字⺟都是⼤写时,就不能正常读取到 bean 了,如下图所示:
image.png

我们找到Bean命名规则的源码
image.png

翻译过来就是

实用程序方法,用于将字符串转换为正常的 Java 变量名大小写。这通常意味着将第一个字符从大写字母转换为小写字母,但在有多个字符且第一个和第二个字符都是大写字母的(不常见的)特殊情况下,我们不对其进行转换。
因此,"FooBah "变成了 "fooBah","X "变成了 "x",但 "URL "仍然是 "URL"。

我们把读取的第一个字母变成大写,就可以了
image.png

重命名 Bean

我们可以通过设置name属性给Bean对象进行重命名操作:
image.png

这里的name属性实际上是一个数组,一个bean可以有多个名字。

@Component
public class Users {
    @Bean(name = {"user1","fyd"})
    public User user1() {
        User user = new User();
        user.setName("fyd");
        user.setAge(18);
        return user;
    }
}

name={}可以省略:

@Component
public class Users {
    @Bean({"user1","fyd"})
    public User user1() {
        User user = new User();
        user.setName("fyd");
        user.setAge(18);
        return user;
    }
}
相关文章
|
14天前
|
Java Spring
【Spring】方法注解@Bean,配置类扫描路径
@Bean方法注解,如何在同一个类下面定义多个Bean对象,配置扫描路径
140 73
|
9天前
|
Java Spring 容器
【SpringFramework】Spring IoC-基于注解的实现
本文主要记录基于Spring注解实现IoC容器和DI相关知识。
43 21
|
14天前
|
存储 Java Spring
【Spring】获取Bean对象需要哪些注解
@Conntroller,@Service,@Repository,@Component,@Configuration,关于Bean对象的五个常用注解
|
14天前
|
存储 Java 应用服务中间件
【Spring】IoC和DI,控制反转,Bean对象的获取方式
IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式
|
14天前
|
Java Spring
【Spring配置】idea编码格式导致注解汉字无法保存
问题一:对于同一个项目,我们在使用idea的过程中,使用汉字注解完后,再打开该项目,汉字变成乱码问题二:本来a项目中,汉字注解调试好了,没有乱码了,但是创建出来的新的项目,写的注解又成乱码了。
|
2月前
|
前端开发 Java Spring
Spring MVC核心:深入理解@RequestMapping注解
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的核心,它将HTTP请求映射到控制器的处理方法上。本文将深入探讨`@RequestMapping`注解的各个方面,包括其注解的使用方法、如何与Spring MVC的其他组件协同工作,以及在实际开发中的应用案例。
49 4
|
2月前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
153 2
|
2月前
|
前端开发 Java Spring
探索Spring MVC:@Controller注解的全面解析
在Spring MVC框架中,`@Controller`注解是构建Web应用程序的基石之一。它不仅简化了控制器的定义,还提供了一种优雅的方式来处理HTTP请求。本文将全面解析`@Controller`注解,包括其定义、用法、以及在Spring MVC中的作用。
64 2
|
2月前
|
消息中间件 Java 数据库
解密Spring Boot:深入理解条件装配与条件注解
Spring Boot中的条件装配与条件注解提供了强大的工具,使得应用程序可以根据不同的条件动态装配Bean,从而实现灵活的配置和管理。通过合理使用这些条件注解,开发者可以根据实际需求动态调整应用的行为,提升代码的可维护性和可扩展性。希望本文能够帮助你深入理解Spring Boot中的条件装配与条件注解,在实际开发中更好地应用这些功能。
45 2
|
27天前
|
XML 安全 Java
Spring Boot中使用MapStruct进行对象映射
本文介绍如何在Spring Boot项目中使用MapStruct进行对象映射,探讨其性能高效、类型安全及易于集成等优势,并详细说明添加MapStruct依赖的步骤。
下一篇
开通oss服务