【Spring框架】spring更简单的读取和存储对象

news2025/3/6 21:32:44

目录

  • 前置工作
  • 更加简单的存储Bean对象
  • 类注解存储Bean命名问题
  • Java项目标准分层
  • 五大类注解之间的关系
  • 方法注解@Bean
  • 重命名@Bean的几种方式

前置工作

在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对象的方式就不能使用了。
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/762702.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Android Framework系列】第7章 WMS原理

1 前言 前面【Android Framework系列】第5章 AMS启动流程和【Android Framework系列】第6章 AMS原理之Launcer启动流程我们分析了AMS启动以及Launcher启动的整体流程&#xff0c;那Launcher(Activity启动)后&#xff0c;UI是如何渲染到屏幕并且展示出来的呢&#xff1f;我们这…

零代码编程:用ChatGPT批量提取网页上的文本信息内容

现在有很多个网页&#xff1a; 要批量提取网页内的文本&#xff1a; 可以在ChatGPT中这样写提示词&#xff1a; 你是一个Python专家&#xff0c;写一段Python程序&#xff0c;完全提取网页文本内容的任务&#xff0c;下面是一步步的步骤&#xff1a; 打开表格文件&#xff0c…

麒麟SP3X86系统下,安装Oracle11g数据库

目录 1、写在前面 2、准备工作 2.1 环境准备 2.2 数据库安装前准备 2.2.1 安装依赖 2.2.2 系统环境准备 2.2.3 上传软件安装包 2.2.4 安装调图形化界面的依赖和相关设置 3、执行安装程序 1、写在前面 随着国产化进程&#xff0c;各大应用需要在国产服务器上面进行部署…

【Java基础教程】(十五)面向对象篇 · 第九讲:抽象类和接口——定义、限制与应用的细节,初窥模板设计模式、工厂设计模式与代理设计模式~

Java基础教程之面向对象 第九讲 本节学习目标1️⃣ 抽象类1.1 抽象类定义1.2 抽象类的相关限制1.3 抽象类应用——模板设计模式 2️⃣ 接口2.1 接口定义2.2 接口的应用——标准2.3 接口的应用——工厂设计模式 (Factory)2.4 接口的应用——代理设计模式 (Proxy) 3️⃣ 抽象类与…

前端自动化测试工具 Cypress 试用调研记录

目录 前言 环境准备 1.工具&#xff1a;vs code&#xff1b;环境&#xff1a;node.js。 2.安装 cypress 3.安装插件&#xff1a; 4.配置&#xff1a; 5.启动命令&#xff1a; helloworld&#xff1a; 第一个用例 元素定位方式 使用 request 请求进行登录 提取登录方…

SpringMVC中@ControllerAdvice 注解的三种使用场景

全局异常处理 /**可以定义多个方法&#xff0c;不同的方法处理不同的异常。如专门处理空指针的方法&#xff0c;专门处理数组越界…… */ ControllerAdvice public class MyGlobalExceptionHandler{ExceptionHandler(Exception.class)//指定异常处理类型public ModelAndView c…

一、基础-4.MySQL启动和客户端连接

一、启动 方法一&#xff1a; 1、winR&#xff0c;输入services.msc&#xff0c;按回车 2、找到MySQL&#xff0c;右键-启动/停止 MySQL安装后&#xff0c;默认已启动。 方法二、 1、winR&#xff0c;输入cmd&#xff0c;打开命令行 2、输入启动与停止命令 二、客户端连接 …

工业手持终端在工业现场的实际应用

在工业现场&#xff0c;RFID手持终端设备扮演着关键的角色。本文将介绍RFID手持终端设备在工业现场的功能和优势&#xff0c;并探讨其应用场景和最佳实践。同时&#xff0c;提供选择和使用RFID手持终端设备时的注意事项&#xff0c;以帮助企业实现有效的应用策略。 RFID手持终…

uniapp学习之【从一个小程序跳转到另一个小程序】

uni.navigateToMiniProgram({appId: ,path: pages/index/index?id123,extraData: {data1: test},success(res) {// 打开成功} })

【深度学习】日常笔记12

当⾯对更多的特征⽽样本不⾜时&#xff0c;线性模型往往会过拟合。 线性模型没有考虑到特征之间的 交互作⽤。对于每个特征&#xff0c;线性模型必须指定正的或负的权重&#xff0c;⽽忽略其他特征。与线性模型不同&#xff0c;神经⽹络并不局限于单独查看每个特征&#xff0c…

408 计算机考研-001-C语言-C语言基础-考研必学

408 计算机考研-001-C语言-C语言基础-考研必学 本文目录 408 计算机考研-001-C语言-C语言基础-考研必学考研C语言应掌握的内容考研真题2022 年考研真题第 1 题2022 年考研真题第 41 题2021 年考研真题第 42 题 一、打印&#xff1a;Hello, World二、数据类型1. 基本数据类型 三…

项目bug——编码问题报错(java.lang.IllegalStateException)

项目场景&#xff1a; 项目拉下后报错 问题描述 2023-07-17 14:26:07.596 ERROR 14300 — [ main] o.s.boot.SpringApplication : Application run failed java.lang.IllegalStateException: Failed to load property source from ‘file:/Users/wang/IdeaProjects/ms-famil…

ADS交叉耦合振荡器仿真

ADS交叉耦合振荡器仿真 摘要参考视频书籍 环境过程结果分析频率计算瞬态仿真差分电压输出查看相位噪声分析 摘要 本文主要参考视频中如何使用进行ADS交叉耦合振荡器仿真和分析&#xff0c;由于视频中有诸多错误和视频清晰度较低&#xff0c;虽然视频博主及时改正&#xff0c;为…

家用洗地机好用吗、智能洗地机品牌排行榜

在现如今&#xff0c;洗地机不算是什么稀奇的东西了。正相反&#xff0c;越来越多的家庭在清洁的时候都会使用洗地机。因为洗地机相比传统的清洁方式&#xff0c;更加便捷高效&#xff0c;清洁使用的时候简直就是事半功倍&#xff01;那么今天小编就为给大家盘点几款非常适合家…

3Ds max入门教程:快捷键命令和鼠标热键大全

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 起初&#xff0c;您可能需要花一些时间查找热键&#xff0c;但是一旦您使用它们记住了它们&#xff0c;它们将使您以至少两倍的速度产生结果。例如&#xff0c;当您进行建模&#xff08;移动、缩放、旋转等…

霍纳法则----快速入门,贼好理解

别问我&#xff0c;为什么写这个&#xff0c;我可能一辈子都在开发中用不到&#xff0c;纯粹应付八股。 公式我不知道咋打&#xff0c;就网上复制了个图片。 这是什么&#xff1f;是一个含x的多项式&#xff0c;他有很多次方。假设让你写代码&#xff0c;x的输入项&#xff0c;…

一文带你了解动态内存管理

目录 动态内存存在的意义 动态内存函数的介绍 malloc和free calloc realloc 常见的动态内存错误 对NULL指针解引用操作 对动态开辟的空间的越界访问 对非动态开辟内存使用free释放 使用free释放一块动态开辟内存的一部分 对同一块内存多次释放 动态开辟内存忘记释放…

时序预测 | MATLAB实现NARX非线性自回归外生模型房价预测

时序预测 | MATLAB实现NARX非线性自回归外生模型房价预测 目录 时序预测 | MATLAB实现NARX非线性自回归外生模型房价预测效果一览基本介绍研究内容程序设计参考资料效果一览 基本介绍 时序预测 | MATLAB实现NARX非线性自回归外生模型房价预测 研究内容 NARX(Nonlinear AutoReg…

抖音账号矩阵系统源码-开源部署开发者分享

抖音账号矩阵系统&#xff0c;短视频账号矩阵系统源码&#xff0c; 短视频矩阵是一种常见的视频编码标准&#xff0c;它通过将视频分成多个小块并对每个小块进行压缩来实现高效的视频传输。短视频多账号矩阵系统&#xff0c;通过多账号一键授权管理的方式&#xff0c;为运营人员…

90%的程序员都不知道Mysql索引下推

索引下推(Index Condition Pushdown) ICP 是Mysql5.6之后新增的功能&#xff0c;主要的核心点就在于把数据筛选的过程放在了存储引擎层去处理&#xff0c;而不是像之前一样放到Server层去做过滤。 虽然这是一个比较简单的概念&#xff0c;但是可能很多不细心的同学对于索引下推…