详解Spring如何更简单的读取和存储对象

 更新时间:2023年07月18日 11:00:31   作者:摸鱼王胖嘟嘟  
这篇文章主要为大家详细介绍了Spring中如何更简单的实现读取和存储对象,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

前置工作

在spring-config.xml添加如下配置:配置bean的扫描根路径:只有当前目录下的类才会扫描是否添加了注解,如果添加了注解,就将这些加了注解的类,存放到IoC容器中。

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

更加简单的存储Bean对象

两种方法:

1.通过类注解实现Bean对象的存储;

  • @Controller:控制器,验证用户请求的数据正确性(安保系统)
  • @Service:服务层,编排和调度具体执行方法的(客服中心)
  • @Repository:持久层,和数据库进行交互,等同于DAO(Data Access Object) 数据访问层
  • @Component:组件(工具类)
  • @Configuration:配置项(配置项目中的一些配置)

2.通过方法注解实现Bean对象的存储

@Bean路径

使用@Controller(控制器存储)

package com.java.demo;
import org.springframework.stereotype.Controller;
@Controller(value = "userinfo")
public class User {
    public void sayHi() {
        System.out.println("Hi,User~");
    }
}
import com.java.demo.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
@SuppressWarnings({"all"})
public class App {
    public static void main(String[] args) {
        // 1. 得到容器对象
        ApplicationContext context =
                new ClassPathXmlApplicationContext("spring-config.xml");
        // 2. 得到 Bean 对象
        User user = context.getBean("userinfo", User.class);
        // 3. 使用 Bean 对象
        user.sayHi();
    }
}

import com.java.demo.Student;
import com.java.demo.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
@SuppressWarnings({"all"})
public class App {
    public static void main(String[] args) {
        // 1. 得到容器对象
        ApplicationContext context =
                new ClassPathXmlApplicationContext("spring-config.xml");
        // 2. 得到 Bean 对象
//        User user = context.getBean("userinfo", User.class);
        Student student = context.getBean("student", Student.class);
        // 3. 使用 Bean 对象
//        user.sayHi();
        student.sayHi();
    }
}

原因就是:student没有加注解。

使用注解和XML是可以一起使用的。

类注解存储Bean命名问题

默认类名首字母小写就能获取到Bean对象。

获取不到Bean对象

使用原类名,可以获取到Bean对象

我们在获取Bean对象时,传入名称时,一般分为两种情况:

默认情况下:使用原类名首字母小写就能读取到Bean对象

特殊情况:如果不满足首字母大写和第二个字母小写的情况,那么使用原类名获取

Java项目标准分层

五大类注解之间的关系

方法注解@Bean

a.使用注意事项:@Bean 注解 必须要配合五大类注解一起使用

package com.java.demo.model;
import java.time.LocalDateTime;
@SuppressWarnings({"all"})
/**
 * 普通的文章实体类
 */
public class ArticleInfo {
    private int aid;
    private String title;
    private String content;
    private LocalDateTime createtime;
    public int getAid() {
        return aid;
    }
    public void setAid(int aid) {
        this.aid = aid;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public LocalDateTime getCreatetime() {
        return createtime;
    }
    public void setCreatetime(LocalDateTime createtime) {
        this.createtime = createtime;
    }
    @Override
    public String toString() {
        return "ArticleInfo{" +
                "aid=" + aid +
                ", title='" + title + '\'' +
                ", content='" + content + '\'' +
                ", createtime=" + createtime +
                '}';
    }
}
package com.java.demo;
import com.java.demo.model.ArticleInfo;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Controller;
import java.time.LocalDateTime;
@SuppressWarnings({"all"})
@Controller
public class Articles {
    @Bean // 将当前方法返回的对象存储到 IoC 容器
    public ArticleInfo articleInfo() {
        // 伪代码
        ArticleInfo articleInfo = new ArticleInfo();
        articleInfo.setAid(1);
        articleInfo.setTitle("今天周几?");
        articleInfo.setContent("今天周一!");
        articleInfo.setCreatetime(LocalDateTime.now());
        return articleInfo;
    }
}
import com.java.demo.UConfig;
import com.java.demo.example.Teacher;
import com.java.demo.model.ArticleInfo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
@SuppressWarnings({"all"})
public class App {
    public static void main(String[] args) {
        // 1. 得到容器对象
        ApplicationContext context =
                new ClassPathXmlApplicationContext("spring-config.xml");
        // 2. 得到 Bean 对象
//        User user = context.getBean("userinfo", User.class);
//        Student student = context.getBean("student", Student.class);
//        UserService userService = context.getBean("userService",UserService.class);
//        Teacher teacher = context.getBean("teacher",Teacher.class);
//        UConfig uConfig = context.getBean("UConfig",UConfig.class);
        ArticleInfo articleInfo = context.getBean("articleInfo", ArticleInfo.class);
        // 3. 使用 Bean 对象
//        user.sayHi();
//        student.sayHi();
//        userService.sayHi();
//        teacher.sayHi();
//        uConfig.sayHi();
        System.out.println(articleInfo);
    }
}

b.@Bean 获取时注意事项:@Bean的默认命名=方法名。

重命名@Bean的几种方式

方式1:@Bean("aaa")

方法2:@Bean(name = "aaa")

方式3:@Bean(value = "aaa")

重命名扩展:@Bean 支持指定多个名称@Bean(value = {“aaa”})默认命名注意事项:当@Bean重命名之后,那么默认的使用方法名获取Bean对象的方式就不能使用了。

以上就是详解Spring如何更简单的读取和存储对象的详细内容,更多关于Spring读取存储对象的资料请关注脚本之家其它相关文章!

相关文章

  • 一篇文章彻底拆解Java HashMap扩容机制

    一篇文章彻底拆解Java HashMap扩容机制

    在Java中HashMap是一个非常常用的数据结构,基于哈希表实现,它通过键值对的形式存储数据,这篇文章主要介绍了Java HashMap扩容机制的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2026-04-04
  • 解决idea中javaweb的mysql8.0.15配置问题

    解决idea中javaweb的mysql8.0.15配置问题

    这篇文章主要介绍了idea中javaweb的mysql8.0.15配置问题 ,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • 关于Mybatis-Plus字段策略与数据库自动更新时间的一些问题

    关于Mybatis-Plus字段策略与数据库自动更新时间的一些问题

    这篇文章主要介绍了关于Mybatis-Plus字段策略与数据库自动更新时间的一些问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Java实现简单的五子棋小游戏

    Java实现简单的五子棋小游戏

    这篇文章主要为大家详细介绍了Java实现简单的五子棋小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10
  • 如何解决Gradle、Maven项目build后没有mybatis的mapper.xml文件的问题

    如何解决Gradle、Maven项目build后没有mybatis的mapper.xml文件的问题

    这篇文章主要介绍了如何解决Gradle、Maven项目build后没有mybatis的mapper.xml文件的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Java HttpClient用法的示例详解

    Java HttpClient用法的示例详解

    Java开发语言中实现HTTP请求的方法主要有两种:一种是JAVA的标准类HttpUrlConnection;另一种是第三方开源框架HTTPClient。本文就将详细讲讲Java中HttpClient的使用,需要的可以参考一下
    2022-07-07
  • 配置javaw.exe双击运行jar包方式

    配置javaw.exe双击运行jar包方式

    这篇文章主要介绍了配置javaw.exe双击运行jar包方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • SpringBoot项目集成Swagger和swagger-bootstrap-ui及常用注解解读

    SpringBoot项目集成Swagger和swagger-bootstrap-ui及常用注解解读

    这篇文章主要介绍了SpringBoot项目集成Swagger和swagger-bootstrap-ui及常用注解解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • java中jdk代理和cglib代理使用步骤详解

    java中jdk代理和cglib代理使用步骤详解

    这篇文章主要给大家介绍了关于java中jdk代理和cglib代理使用步骤的相关资料,JDK代理和CGLIB是Java中两种常见的代理实现方式,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • Java魔法值处理的四种方式

    Java魔法值处理的四种方式

    这篇文章主要介绍了Java魔法值处理的四种方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11

最新评论