Spring存储基础知识

一、对象存储 

1.创建bean对象

public class User {public void sayHi() {System.out.println("hi student");}
}

2.bean存入Spring

spring-config.xml,将 bean(com.spring.demo.User)存到 Spring 容器中,它的名称叫做 id id指的是将对象存储在IOC容器的姓名,class是要存储到IOC 中完整的Bean路径包括包名+类名 

<bean id="user" class="com.spring.demo.User"></bean>

3.容器获取到bean对象

ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");

4.获取Bean对象

get bean 用法

4.1根据用户名称获取Bean对象(id)

Use user = (User) context.getBean("user"); // 根据名称获取

4.2根据类型获取Bean对象

当同一个类型注入到Spring多个情况,使用类型获取Bean就会报错

User user = context.getBean(User.class); // 根据类型获取

4.3根据用户名称+类型获取Bean对象

User user = context.getBean("user", User.class); 

二、类注解

1.必要工作

<content:component-scan base-package="com.java.demo"></content:component-scan>

2.@Controller

控制器,验证数据的准确性

2.1@Controller实现Bean处理

package com.java.demo.controller;import org.springframework.stereotype.Controller;@Controller
public class SController {public void sayHi() {System.out.println("do SController sayHi()");}
}

2.2读取Bean

详见本文第一项对象存储

3.@Service

服务,编排调度实际方法的

4.@Repository

持节层和数据库交互的

5.@Component

工具类

6.@Configuration

配置项

三、使用@Bean方法注解存储对象到Spring容器

1.bean对象命名 存储对象的名称为方法名

2.@Bean 配合五大类注解

@Component
@Order(1) // 控制注入的顺序
public class UserBeans {@Beanpublic User getuserbyid() {User user = new User();user.setUid(1);user.setUsername("张三");user.setPassword("123456");user.setAge(18);return user;}

3.@Bean重命名

@Bean(name={"名字"})

重命名后默认使用方法获取对象方法不可使用

四、对象注入

从Spring容器中读取某个对象,放到当前类里面

1.属性注入

1.属性注入@Autowired // 注入对象(更加简单的从 spring 容器中读取到对象) @Resourceprivate UserService userService;

优点:简单

缺点:

1.没办法实现final修饰的变量注入

2.兼容不好只适用于Ioc容器

3.风险:违背单一设计原则的概率更多

2.Setter注入

//    // 2.Setter 注入private UserService userService;@Autowiredpublic void setUserService(UserService userService) {this.userService = userService;}

优点:符合单一设计原则

缺点:1.不能注入不可变对象(final)

2.使用setter对象可能会被修改

3.构造方法注入

   private final UserService userService;@Autowiredpublic UserController(UserService userService) {this.userService = userService;}

优点:1.可以注入不可变对象

2.注入对象不会改变(构造方法只能执行一次)

3.保证注入对象完全被初始化

4.通用性更好

5.@Autowired vs @Resource

@Autowired根据类型查找 之后根据名称查找

@Resource 根据名称查找 之后根据类型查找

五、lombok使用

1.在框架中添加lombok依赖

pom文件添加

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.4</version><scope>provided</scope>
</dependency>

2.使用注解

3.添加lombok插件

六、Bean作用域

1.单例模式 singleton

2.原型模式 prototype

3.请求作用域 request 每次请求都会创建一个Bean对象 适用于 Spring MVC/Spring Web

4.会话作用域 session  每次会话共享一个Bean对象 适用于 Spring MVC

5.全局作用域 application 一个Http servlet 中共享一个bean

@Scope(value = "prototype")

七、Bean生命周期

1.开辟内存空间

2.设置属性(注入属性)

3.初始化

   各种通知

   初始化前置方法

    初始化方法(xml、注解方法)

     初始化后置方法

4.使用Bean

5.销毁Bean对象

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

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

相关文章

【数据结构学习笔记】选择排序

【数据结构学习笔记】选择排序 参考电子书&#xff1a;排序算法精讲 算法原理 首先在未排序序列中找到最小&#xff08;大&#xff09;元素&#xff0c;存放到排序序列的起始位置&#xff0c;然后&#xff0c;再从剩余未排序元素中继续寻找最小&#xff08;大&#xff09;元…

读取CSV数据并写入MySQL

import pandas as pd #import tushare as ts from sqlalchemy import create_engineimport baostock as bs #### 登陆系统 #### lg bs.login() # 显示登陆返回信息 print(login respond error_code:lg.error_code) print(login respond error_msg:lg.error_msg) #### 获取沪深…

STM32第十课:串口发送

一、usart串口 1.1 USART串口协议 串口通讯(Serial Communication) 是一种设备间非常常用的串行通讯方式&#xff0c;因为它简单便捷&#xff0c;因此大部分电子设备都支持该通讯方式&#xff0c;电子工程师在调试设备时也经常使用该通讯方式输出调试信息。在计算机科学里&…

主流数据库的区别

几个主流的数据库有&#xff1a; 1. MySQL&#xff1a;MySQL是一种关系型数据库管理系统&#xff0c;常用于Web应用程序开发和数据存储。 2. Oracle&#xff1a;Oracle是一种关系型数据库管理系统&#xff0c;由Oracle Corporation开发和销售。它广泛用于企业级应用程序中。 …

在使用qml的qmldir文件创建常用组件报错unknow component

解决方法&#xff1a;Qt Creator中的工具-->QML/JS-->重置代码模型 参考博文:QML自定义模块及qmldir的使用_同一资源文件目录下的qml模块使用-CSDN博客 不一样的地方是我给我的文件起了别名 以及我的qrc文件路径有前缀/qml 总体操作&#xff1a; 1.使用模块中的组件时…

线程与进程的区别、协程

1【线程与进程的区别、协程】 【1】 进程跟线程 进程&#xff08;Process&#xff09;和 线程&#xff08;Thread&#xff09;是操作系统的基本概念&#xff0c; 但是它们比较抽象&#xff0c; 不容易掌握。关于多进程和多线程&#xff0c;教科书上对经典的一句话“进程是资源分…

铭文:探索比特币世界的数字印记

铭文是什么&#xff1f; 铭文指的是在某种物品&#xff08;如石头、硬币、平板等&#xff09;上刻有文字。在比特币领域&#xff0c;铭文指的是刻在聪&#xff08;satoshi&#xff09;上的元数据。比特币的最小单位是聪&#xff0c;1比特币可分为1亿聪。每个聪都通过序数理论进…

解决WSL2的ubuntu20.04中安装docker出现无法连接的问题(Cannot connect to the Docker daemon)

wsl2的ubuntu20.04系统安装docker可以参考官网教程操作&#xff0c;我个人喜欢参考其中的离线安装方式&#xff1a;Install from a package。只需要按照官网一步步操作即可&#xff0c;跟普通的ubuntu20.04的安装是一样的步骤。 在安装完以后&#xff0c;发现一旦使用docker相…

OpenAI GPT LLMs 高级提示词工程方法汇总

原文地址&#xff1a;An Introduction to Prompt Engineering for OpenAI GPT LLMs Github&#xff1a;Prompt-Engineering-Intro 2023 年 3 月 2 日 提示工程指南 | Prompt Engineering Guide Naive 提示词&#xff1a;带有提示的情感分类器 prompt Decide whether a T…

计算机缺失iutils.dll怎么办,分享5种靠谱的解决方法

​在计算机系统运行过程中&#xff0c;如果发现无法找到或缺失iutils.dll文件&#xff0c;可能会引发一系列的问题与故障。首先&#xff0c;由于iutils.dll是系统中一个重要的动态链接库文件&#xff0c;它的主要功能可能涉及到系统核心服务、应用程序支持或者特定功能模块的运…

互联网高频面:输入URL按下回车后,中间发生了什么

题目 输入URL按下回车后&#xff0c;中间发生了什么 这个问题其实是计算机网络里面很经典的一个问题&#xff0c;不能去死机硬背&#xff0c;很考察对网络架构和通信原理的理解&#xff0c;也是各个互联网大厂喜欢考察的面试题。 一些图片参考了小林的计算机网络面经 从输入…

“光谱视界革新:ChatGPT在成像光谱遥感中的智能革命“

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境&#xff0c;是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型&#xff0c;在理解和生成人类语言方面表现出了非凡的能力。本文重点介绍ChatGPT在遥感中的应用&#xff0c;人工智能…

LeetCode(力扣)算法题_2864_最大二进制奇数

最大二进制奇数 题目描述 给你一个 二进制 字符串 s &#xff0c;其中至少包含一个 1 。 你必须按某种方式 重新排列 字符串中的位&#xff0c;使得到的二进制数字是可以由该组合生成的 最大二进制奇数 。 以字符串形式&#xff0c;表示并返回可以由给定组合生成的最大二进…

爬虫案例2:playwright 超爽体验

参考链接&#xff1a;https://playwright.bootcss.com/python/docs/intro 目标网站&#xff1a;https://spa6.scrape.center/通过观察&#xff0c;页面的信息是通过Ajax请求后返回的信息 下面使用playwright实现绕过token的获取直接拿到返回的数据import asyncio import json f…

Docker安装达梦数据库(DM8)

安装目录 mkdir /opt/dm8 /opt/dm8/datadir && cd /opt/dm8 && chmod 777 /opt/dm8 /opt/dm8/datadir 下载镜像 yum -y install wget && wget https://download.dameng.com/eco/dm8/dm8_20230808_rev197096_x86_rh6_64_single.tar 导入镜像 docker loa…

深入挖掘C语言之——联合

目录 联合的定义 联合的特点 联合的应用场景 在C语言中&#xff0c;联合&#xff08;Union&#xff09;是一种特殊的数据结构&#xff0c;它允许在同一内存地址存储不同类型的数据。与结构体&#xff08;Struct&#xff09;不同的是&#xff0c;联合中的所有成员共享同一块内…

C语言--从零开始的扫雷游戏

C语言--从零开始的扫雷游戏 1. 游戏说明2. 总体代码3. 详细讲解3.1 菜单部分3.2 游戏主体部分3.2.1 总体分析3.2.2 棋盘初始化3.2.3 棋盘展示3.2.4 设置地雷3.2.5 扫雷阶段3.2.6 统计雷个数的代码3.2.7 使用迭代的方式进行展开&#xff1a;3.2.8 扫雷部分主体代码 4. 总结 1. 游…

docker常用操作-docker私有仓库的搭建(Harbor),并将本地镜像推送至远程仓库中。

1、docker-compose安装&#xff0c;下载docker-compose的最新版本 第一步&#xff1a;创建docker-compose空白存放文件vi /usr/local/bin/docker-compose 第二步&#xff1a;使用curl命令在线下载&#xff0c;并制定写入路径 curl -L "https://github.com/docker/compos…

Linux学习:基础开发工具的使用(1)

目录 1. Linux软件包管理器&#xff1a;yum工具1.1 yum是什么&#xff08;软件商城&#xff09;1.2 yum的使用1.3 yum的背景生态 2. 项目开发与集成开发环境3. vim编辑器3.1 vim编辑器的常见模式与模式切换3.3 vim编辑器的使用3.3.1 命令模式下的常见命令&#xff1a;3.3.2 vim…

【rk3368 android6.0 恢复出厂设置功能】

rk3368 android6.0 恢复出厂设置功能 恢复出厂设置三种方法一&#xff0c;设置--进入恢复出厂设置页面二&#xff0c;发送广播形式三&#xff0c;命令形式总结 郑重声明:本人原创博文&#xff0c;都是实战&#xff0c;均经过实际项目验证出货的 转载请标明出处:攻城狮2015 恢复…