spring3:更简单的读取和存入对象

news2024/9/20 22:33:01

目录

1.存储 Bean 对象

1.1 前置⼯作:配置扫描路径(重要)

1.2 添加注解存储 Bean 对象

1.2.1.@Controller[控制器]

1.2.2 @Service[服务]

1.2.3 @repoistory[仓库]

1.2.4 @Configuration[配置]

1.2.5 @Component[组件]

1.3为什么要这么多类注解?

1.3.1 类注解之间的关系

1.3.2 Bean 命名规则

1.4通过@Bean方法注解

1.使用

2.重命名Bean

 2.获取 Bean 对象(对象装配)

2.1 3种注入方式

1. 属性注⼊

2. 构造⽅法注⼊

3. Setter 注⼊

4.三种注入方式优缺点分析

2.2 2种注入方法

1.@Autowired

2.@Resource

3.@Autowired 和 @Resource 的区别

3.@Bean把一个类型的对象注入多次的问题


1.存储 Bean 对象

1.1 前置⼯作:配置扫描路径(重要)

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

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

1.2 添加注解存储 Bean 对象

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

1. 类注解:@Controller、@Service、@Repository、@Component、@Configuration。

2. ⽅法注解:@Bean

使用五大类注解实现

注:1.加类注解

2.要放到配置文件的目录下

1.2.1.@Controller[控制器]

package com.beans;
import org.springframework.stereotype.Controller;
@Controller
public class UserController {
    public void sayHi(){
        System.out.println("UserController");
    }
}

1.2.2 @Service[服务]

@Repository
public class UserRepository {
    public void sayHi(){
        System.out.println("UserRepository");
    }
}

1.2.3 @repoistory[仓库]

@Repository
public class UserRepository {
    public void sayHi(){
        System.out.println("UserRepository");
    }
}

1.2.4 @Configuration[配置]

@Configuration
public class UserConfig {
    public void sayHi(){
        System.out.println("UserConfig");
    }
}

1.2.5 @Component[组件]

@Component
public class UserComponent {
    public void sayHi(){
        System.out.println("UserComponent");
    }
}

1.3为什么要这么多类注解?

提高代码可读性,可以判断当前类的用途

@Component

@Configuration:配置层

@Controller:控制层(前端参数校验)

@Service:服务器(数据的组装和接口调用)

@Repository:持久层(负责和数据库交互)

1.3.1 类注解之间的关系

 其实这些注解⾥⾯都有⼀个注解 @Component,说明它们本身就是属于 @Component 的“⼦类”

1.3.2 Bean 命名规则

第一个大写,第二个小写,返回时第一个改为小写

第一二个都是大写,则返回原类名

1.4通过@Bean方法注解

1.使用

必须搭配类注解使用.命名是方法的名称

@Component
public class UserBean {
    @Bean
    public User user1(){
        User user=new User();
        user.setUserId(1);
        user.setUsername("zhang");
        return user;
    }
}
public class APP {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");
         User user=context.getBean("user1",User.class);
        System.out.println(user);
}
}

2.重命名Bean

命名规则:

  1. 当没有设置name属性时,bean默认的名称是方法名
  2. 设置了name属性时,通过重命名的name属性对应的值来获取

设置name属性给Bean对象命名可以取多个名字

@Component
public class UserBean {
    @Bean(name = {"userinfo","user1"})
    public User user1(){
        User user=new User();
        user.setUserId(1);
        user.setUsername("zhang");
        return user;
    }
}

 名字要对应

 

 

 2.获取 Bean 对象(对象装配)

获取 bean 对象也叫做对象装配,是把对象取出来放到某个类中,有时候也叫对象注⼊。

2.1 3种注入方式

1. 属性注⼊

属性注⼊是使⽤ @Autowired 实现的,将 Service 类注⼊到 Controller 类中。

 

 

 

 

2. 构造⽅法注⼊

要加构造方法

@Service
public class UserService {
    public  void sayHi(){
        System.out.println("UserService");
    }
}
@Controller
public class UserController2 {
    private UserService userService;
    public UserController2(UserService userService){
        this.userService=userService;
    }

    public void sayHi(){
        userService.sayHi();
    }
}

3. Setter 注⼊

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

@Service
public class UserService {
    public  void sayHi(){
        System.out.println("UserService");
    }
}
public class UserController4 {
    private UserService userService;
    @Autowired
    public void setUserService(UserService userService){
        this.userService=userService;
    }
    public void sayHi(){
        userService.sayHi();
    }
}

4.三种注入方式优缺点分析

  • 属性注入:
    • 优点:简洁使用方便
    • 缺点:只能用ioc容器,也可能出现空指针异常
  • 构造方法注入:Spring推荐的注入方式
    • 缺点:如果有多个注⼊会显得⽐较臃肿
    • 优点:通用性,保证注入不为空
  • setter注入:Spring早期推荐方式
    • 缺点:通用性不如构造方法

2.2 2种注入方法

1.@Autowired

@Controller
public class UserController3 {
    private UserService userService;
    @Autowired
    public void setUserService(UserService userService){
        this.userService=userService;
    }
    public void sayHi(){
        userService.sayHi();
    }
}

2.@Resource

@Controller
public class UserController3 {
    private UserService userService;
    @Resource
    public void setUserService(UserService userService){
        this.userService=userService;
    }
    public void sayHi(){
        userService.sayHi();
    }
}

3.@Autowired 和 @Resource 的区别

1.出身不同:@Autowired来自于Spring,@Resource来自于JDK注解

2.用法不同:@Autowired可以用于三种注入方式,@Resource不能用于构造函数注入

3.参数不同:@Autowired只支持requierd设置,@Resourcd可以设置更多的参数,例如name设置根据名称获取 Bean;type设置

3.@Bean把一个类型的对象注入多次的问题

 方法:

1.精确描述bean名称

2.使用@Resouce设置name方式来重命名注入对象

@Resource(name="user")

3.用@Autowired+@Qualifier来筛选bean对象

@Autowired
@Qualifier(value="user1")
private User user;

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

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

相关文章

Spring 创建和使用

文章目录 什么是 Bean ?1. 创建 Spring 项目1.创建一个 Maven 项目2. 添加 Spring 依赖1.配置 Maven 国内源2.添加 Maven 依赖 3.添加启动项 2.存储Bean对象1.创建 Bean2.注册 Bean3.获取并使用 Bean 对象1. 得到 Spring 对象常见方式有两种: 2. 获取 Bean 对象Bean 的三种获取…

SpringMVC中使用LocalDateTime、LocalDate等参数作为入参数据转换问题

1、接收GET请求方式及POST请求表单方式时间类型传参&#xff0c;需要自定义参数转换器或者使用ControllerAdvice配合initBind&#xff0c;不设置的话表单方式会报以下错误&#xff1a; 这种情况要和时间作为Json字符串时区别对待&#xff0c;因为前端json转后端pojo底层使用的是…

什么是Auto GPT-4? OpenAI 最新语言模型概览

动动发财的小手&#xff0c;点个赞吧&#xff01; 人工智能正在快速发展&#xff0c;近年来最令人兴奋的发展之一是创建可以生成类似人类文本的语言模型。领先的人工智能研究机构 OpenAI 最近发布了其最新的语言模型 Auto GPT-4。 在什么是 Auto GPT-4&#xff1f; OpenAI 最新…

【Java笔试强训 29】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 一、选择题 二、编程题 &#x1f525;求正数数…

AtCoder Beginner Contest 300(D-G)

D - AABCC (atcoder.jp) &#xff08;1&#xff09;题目大意 给你个数N&#xff0c;问你不超过N的三个质数abc组成的数有多少个。 &#xff08;2&#xff09;解题思路 考虑到枚举的数不会特别多&#xff0c;因此预处理出1e6的质因子&#xff0c;暴力枚举即可。 &#xff08;3&a…

在体育新闻文本中提取关键词可以使用什么技术

在体育新闻文本中提取关键词可以使用以下技术&#xff1a; 1. 领域词典&#xff1a; 通过构建体育领域的词汇表&#xff0c;将其中的词语作为关键词&#xff0c;可以较好地提取体育新闻中的关键词。 就当下的研究情况&#xff0c;国内外有哪些体育领域的词汇表http://t.csdn…

Reactive Streams介绍与应用分析

目录 一、Reactive Streams基本知识 &#xff08;一&#xff09;基本介绍 &#xff08;二&#xff09;反应式流的特点 基本特性1:事件驱动&变化传递 基本特性2:数据流 基本特性3:声明式 高级特性1:流量控制&#xff08;回压&#xff09; 高级特性2:异步边界 &…

ALBEF:基于动量蒸馏的视觉语言表示学习

Align before Fuse&#xff1a;Vision and Language Representation Learning with Momentum Distillation ALBEF&#xff1a;基于动量蒸馏的视觉语言表示学习 摘要 大规模的视觉和语言表征学习在各种视觉-语言任务上显示出有希望的改进。大多数现有的方法采用了基于Transform…

【平衡二叉搜索树(AVL)-- 旋转】

目录&#xff1a; 前言1、二叉搜索树的插入2、AVL树的旋转&#xff08;1&#xff09;右单旋&#xff08;LL&#xff09;&#xff08;2&#xff09;左单旋&#xff08;RR&#xff09;&#xff08;3&#xff09;右左双旋&#xff08;LR&#xff09;&#xff08;4&#xff09;左右…

第18章 项目风险管理

文章目录 18.1.2 风险的分类 54318.1.3 风险的性质 544项目风险管理6个过程&#xff08;风险管理、识别风险、实施定性风险分析、实施定量风险分析、规划风险应对、控制风险&#xff09;组织和干系人的风险态度影响因素18.3.3 规划风险管理的输出 550风险识别的原则18.4.2 识别…

vim编辑文件

目录 一、vi和vim &#xff08;1&#xff09;介绍 &#xff08;2&#xff09;相同点 &#xff08;3&#xff09;不同点 二、使用vim打开文件 三、使用vim编辑文件 &#xff08;1&#xff09;vim的四个模式 &#xff08;2&#xff09;命令模式下的编辑命令 删除 复制 …

树莓派4:跑通Tensorflow的Sequential模型用于图片分类

重要提示&#xff1a;由于树莓派相对孱弱的性能&#xff0c;直接在其上训练模型可能花&#xff08;lang4&#xff09;费非常长的时间。本文仅作为示例性的可行性参考&#xff0c;请酌情考虑实验平台。 著名的Tensorflow框架也可以运行在树莓派上。理论还没吃透&#xff0c;但使…

【量化交易笔记】5.SMA,EMA 和WMA区别

股票中的SMA&#xff0c;EMA和WMA是常用的技术分析指标。这些指标基于历史股价计算得出&#xff0c;可以帮助投资者了解股票的趋势&#xff0c;为决策提供依据。虽然它们都是平均值算法&#xff0c;但它们之间还是有一些区别的。 SMA 简单移动平均线&#xff08;Simple Moving…

参与辅助服务的用户侧储能优化配置及经济分析(matlab代码)

目录 1 主要内容 目标函数 2 部分程序 3 程序结果 4 程序链接 1 主要内容 该程序方法复现《参与辅助服务的用户侧储能优化配置及经济分析》&#xff0c;首先&#xff0c; 建立了用户侧储能的全生命周期成本和考虑辅助服务的收益模型&#xff1b;其次&#xff0c;在两部…

一文读懂UML用例图

一、概述 用例是描述系统需求的一种手段&#xff0c;即系统应该做什么。用例图由参与者、用例和主题组成。每个用例的主题都代表了一个用例所适用的系统。用户和任何其他可以与主体交互的系统都被表示为行动者。 用例是一种行为规范。用例的实例指的是紧急行为的发生符合相应…

【前端客栈】基于HTML、CSS、JavaScript的羊了个羊静态仿写页面小游戏

&#x1f3dc;哈喽&#xff0c;大家好&#xff0c;我是小浪。前段时间羊了个羊火遍了大江南北&#xff0c;大家是否都通过第二关了呢&#xff1f;哈哈&#xff0c;没关系&#xff0c;既然通不过&#xff0c;那咋们不如自己来做一个这样的羊了个羊的仿写页面&#xff0c;学会了赶…

文本中的关键词提取方法

目录 1. TF-IDF&#xff08;Term Frequency-Inverse Document Frequency&#xff09;算法&#xff1a; 2. TextRank算法&#xff1a; 3. LDA&#xff08;Latent Dirichlet Allocation&#xff09;算法&#xff1a; 4. RAKE&#xff08;Rapid Automatic Keyword Extraction&…

基于SLM调制器,MIT研发高效率全息显示方案

此前&#xff0c;青亭网曾报道过NVIDIA、三星、剑桥大学等对空间光调制器&#xff08;SLM&#xff09;全息方案的探索。空间光调制器可调节光波的空间分布&#xff0c;在电驱动信号控制下&#xff0c;可改变光在空间中传播的振幅、强度、相位、偏振态等特性&#xff0c;从而形成…

MySQL性能优化之(explain)工具

慢SQL的定位 在MySQL当中&#xff0c;我们有时候写的SQL执行效率太慢此时我们需要将其优化。但是SQL可能非常的多&#xff0c;难道我们一条一条的进行查看吗&#xff1f;在MySQL当当中我们可以查看慢查询日志&#xff0c;看看那些SQL这么慢。但是这个默认情况下这个慢查询日志…

sqoop使用

sqoop使用 1. 导入数据2. 从mysql向hive导入数据2.1 导入用户信息表 2.导入订单表2.2 导入订单表2.3 导入商品信息表2.4 导入国家信息表2.5 导入省份信息表2.6 导入城市信息表2.7 创建hive临时表文件 在使用sqoop之前&#xff0c;需要提前启动hadoop, yarn和对应的数据库mysql …