spring给属性赋值(非从容器中取)

【Spring注解】属性赋值 Spring注解 属性赋值@Value@PropertySource @Value 使用@Value给属性赋值: 基本数值 可以写SpEL, #{} 可以写${}, 取出配置文件properties中的值 @PropertySource 首先要在配置类中 用@PropertySource 把对应的配置文件保存到运行的环境变量中 person.properties的内容person.nickName=aaa 通过${} 来取相应的值 ... 阅读详情

spring怎么直接给属性赋值

1、使用@Value注解直接给属性赋值

  我们要给属性赋基本数据类型或者String类型的值时,可以使用@value注解来给属性赋值,一般来说这种用法比较少用。

/**
 * 给属性赋值
 *    @Value注解可以给属性赋值,给属性赋值的方式
 *      1、value=字符串,直接将字符串赋值给属性,基本数据类型也可以
 *      2、value="#{}",大括号里可以写表达式
 *      3、value="${}",大括号里可以取环境变量中的值
 *      要想向将配置文件中的值赋给属性,我们要先将配置文件的值加到环境变量中。这里需要用到@PropertySource注解,它的value属性指定配置文件的类路径例如:@PropertySource(value ={"classpath:/myconfig.properties"}),@PropertySource注解一般加在配置类类名上
 */
public class Disaster {
    @Value("祸殃")
    private String name;
    @Value("#{1+89}")
    private int age;
    @Value("${disaster.state}")
    private String state;//姿态

    @Override
    public String toString() {
        return "Disaster{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", state='" + state + '\'' +
                '}';
    }
}

2、使用@Value注解将配置文件的值赋给属性

  我们之前如果想将配置文件的值赋给属性,要先读取配置文件的值,然后在通过一系列操作才能将配置文件的值与属性绑定。使用@value注解我们可以轻松的将类的属性与配置文件进行绑定。
  首先我们要明确一点,@value获取到的是环境变量的值,它是无法直接获取配置文件的值的。所以我们要将配置文件的值加到环境变量中(使用@PropertySource注解)。

/**
 * 给属性赋值。给属性赋基本数据类型和String类型的值
 */
@Configuration
@Slf4j
@PropertySource(value ={"classpath:/myconfig.properties"})//会将配置文件的值加到环境变量中,然后使用SPEL表达式从环境变量中获取值
public class AttributeAssignmentConfig {

    @Bean
    public Disaster disaster(){
        return new Disaster();
    }
    public static void main(String[] args) {
        AnnotationConfigApplicationContext applicationContext= new AnnotationConfigApplicationContext(AttributeAssignmentConfig.class);
        String property = applicationContext.getEnvironment().getProperty("os.name");
        log.info(property);
        Disaster bean = applicationContext.getBean(Disaster.class);
        log.info(bean+"");
    }
}

 class Disaster {
    @Value("祸殃")
    private String name;
    @Value("#{1+89}")
    private int age;
    @Value("${disaster.state}")//使用SPEL表达式从环境变量中获取值
    private String state;//姿态
    @Override
    public String toString() {
        return "Disaster{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", state='" + state + '\'' +
                '}';
    }
}

3、原理解析

  我们之前在看bean的生命周期源码时间,在创建好bean实例以后,会调用populateBean()方法,将来自bean定义的属性值填充给定BeanWrapper中的bean实例。下面是部分源码

protected Object doCreateBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args)
			throws BeanCreationException {
		// Instantiate the bean.//创建bean实例
		BeanWrapper instanceWrapper = null;
		if (mbd.isSingleton()) {
			instanceWrapper = this.factoryBeanInstanceCache.remove(beanName);
		}
		if (instanceWrapper == null) {
			instanceWrapper = createBeanInstance(beanName, mbd, args);
		}
		Object bean = instanceWrapper.getWrappedInstance();
		Class<?> beanType = instanceWrapper.getWrappedClass();
		if (beanType != NullBean.class) {
			mbd.resolvedTargetType = beanType;
		}
		// Initialize the bean instance.
		  Object exposedObject = bean;
			populateBean(beanName, mbd, instanceWrapper);//用来自bean定义的属性值填充给定BeanWrapper中的bean实例。
			exposedObject = initializeBean(beanName, exposedObject, mbd);//bean进行初始化
	}

  我们进入到populateBean()方法,下面是部分源码截取。通过源码我们可以知道,spring是通过前置处理器将解析@Value注解的值,并赋给属性。【处理@Value的处理器是AutowiredAnnotationBeanPostProcessor】,处理细节查看AutowiredAnnotationBeanPostProcessor的postProcessProperties()方法,这里就不赘述了。

/**
* beanName:bean的名字
* mbd:bean的定义信息
* bw:带有bean实例的BeanWrapper
*/
protected void populateBean(String beanName, RootBeanDefinition mbd, @Nullable BeanWrapper bw) {
   for (InstantiationAwareBeanPostProcessor bp : getBeanPostProcessorCache().instantiationAware) {//见下图
				PropertyValues pvsToUse = bp.postProcessProperties(pvs, bw.getWrappedInstance(), beanName);
				if (pvsToUse == null) {
					if (filteredPds == null) {
						filteredPds = filterPropertyDescriptorsForDependencyCheck(bw, mbd.allowCaching);
					}
					pvsToUse = bp.postProcessPropertyValues(pvs, filteredPds, bw.getWrappedInstance(), beanName);
					if (pvsToUse == null) {
						return;
					}
				}
				pvs = pvsToUse;
			}
}

在这里插入图片描述

大白映射 宝马Esys编程设码映射、USB设备映射 大白映射,宝马Esys设码编程、USB设备映射 阅读详情

相关推荐

大疆2025八月份校招硬件工程师笔试真题A卷题目分享

大疆2025年笔试真题解析

weixin_63651698的博客 1569

springboot中非容器类获取配置文件数据

如果是被spring容器所管理,一般采用@Value注解就可以读取到application.yml文件的内容。 但是不被spring容器管理,使用@Value是无效的。注入时会是NULL。但就是会有这样的场景,此时可采用在springboot启动类中将环境注入到某一个公共配置类,该类所有属性为公共静态属性攻外部类直接使用。 @SpringBootApplication public class DemoStarterTestApplication { public static void ma

weixin_42740540的博客 2896

Jetson Nano系统重装的艺术:从格式化到烧录的深度解析

本文详细解析了Jetson Nano系统重装的完整流程,从SD卡格式化到系统镜像烧录的进阶技巧,包括硬件选择、软件准备、常见问题处理及深度学习环境配置。特别推荐使用三星EVO Plus SD卡和官方电源以确保稳定性,适合开发者快速掌握嵌入式设备系统重装的核心技术。

weixin_28273593的博客 611

SpringBoot获取配置文件属性的三种方式

springBoot获取配置文件属性

qq_41611688的博客 2919

AppFlow实战:零代码将Dify接入企业微信的完整指南

本文提供了一份零代码将Dify AI应用接入企业微信的完整实战指南。通过使用阿里云AppFlow作为无代码连接器,详细讲解了从获取Dify API密钥、创建企业微信应用到配置自动化流程的全过程,帮助团队快速将AI能力无缝融入日常协作,大幅提升工作效率。

php55的博客 808

初识数据结构之入门必懂——线性表(顺序表)

本文将介绍数据结构中的线性表与线性表中最简单的结构——顺序表

m0_64705485的博客 905

在spring中普通类获取注入在bean中的变量方式

1 注入util类 2 构造该类的单利方式 3 单利获取通过spring容器获取 4 在普通类中使用(下边是普通类中的方法)

zhensanwuhou的博客 1018

海康威视HiTools实战:5分钟搞定工业镜头选型(附避坑指南)

本文详细解析了海康威视HiTools在工业镜头选型中的应用,通过五步操作流程帮助用户快速匹配适合的镜头型号。文章深入探讨了工业视觉系统的核心参数,包括焦距、视野、景深和畸变控制,并提供了光源搭配和系统集成的实战指南,助力提升机器视觉检测精度与效率。

u0v1w2x3的博客 1059

spring取配置文件的的属性值

一、从默认配置文件中取值: 今天介绍三种配置文件手动取值的方式: springboot配置文件信息保存在application.properties中,默认可以spring.开头的进行spring进行一些常用参数的配置,但是很多时候我们需要手动配置一些配置,这就需要我们自己手动取值了, application.propertis配置文件默认存在classpath/classpaht/conf...

u011649691的博客 5400

LangGraph教程8:LangGraph流式处理

流式处理可显著提升基于LLM应用的响应性。LangGraph支持两种流式模式:values模式返回每一步的完整结果,适合需要完整上下文处理的场景;updates模式仅返回增量变化,适用于实时更新需求。示例代码展示了如何用create_react_agent实现这两种模式,其中values模式完整记录处理流程,updates模式逐步输出结果。通过异步迭代输出流,开发者可以灵活选择适合应用场景的流式处理方式。

Cachel Wood的博客 621

海思芯片YOLOv8模型部署完整指南:从RPN硬化到8bit量化精度优化

本文详细介绍了在海思芯片平台部署YOLOv8目标检测模型的完整方案,重点解决8bit量化精度损失问题。通过分析海思RPN硬化层的性能优势(1.9ms推理时间),对比不同量化策略(16bit仅损失0.6AP,8bit损失5.2AP),并深入定位到strides计算层是量化误差的主要来源。关键突破在于采用混合精度策略(敏感层16bit,其余8bit),使8bit量化AP回升4.1%,同时保持3.4ms的推理速度和60%的低NPU占用率。文章还提供了量化参数调整、校准数据集优化等进阶技巧,为边缘计算应用提供了性能

FJN110的博客 734

非Spring容器中的类里读取yml配置文件

非Spring容器中的类里读取yml配置文件

qq_42026600的博客 2990

【2024遥感应用组一等奖】基于时空融合和水量平衡法的若尔盖高原水源涵养功能评价

考虑到水源涵养的概念和尺度特征、数据的可获得性、模型的模拟精度等,构建了一种基于遥感、气象和水量平衡原理的草原湿地水源涵养评价方法,估算若尔盖湿地近23年(2000-2022)来的水源涵养量。若尔盖湿地是我国黄河源区的重要水源地,所以本研究以若尔盖湿地的水源涵养功能评估为科学问题,基于遥感数据、GIS数据等,利用水量平衡原理,发展计算简单、便捷、数据易获取的“水源涵养估算方法”,科学估算若尔盖湿地水源涵养服务量,探究其时空动态变化趋势及其影响因素;公式中,Z1和Z2为两个不同高度面的高度,u为摩擦速率;

JData_Engineer的博客 240

【Spring IoC】实验:为对象类型属性赋值

🐼作者简介:一名大三在校生,喜欢AI编程🎋 🐻‍❄️个人主页🥇:落798. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️ 零基础学Java——小白入门必备🔥 重识C语言——复习回顾🔥 计算机网络体系———深度详讲 HCIP数通工程师-刷题与实战🔥🔥🔥 微信小程序开发——实战开发🔥 HarmonyOS 4.0 应用开发实战——实战开发🔥🔥🔥 Redis快速入门到精通——实战开发🔥🔥🔥 RabbitMQ快速入门🔥

鱼干的博客 4274

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

spring中给属性赋值的三种方式

Main.java package com.vow.spring; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main { public static void main(String[] args) { //1. 创建 Spring...

3184

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Spring框架—IOC容器—Bean的属性赋值

目录1.1 创建测试类2.1 通过标签赋值2.1.1 基本数类型、包装类赋值2.1.2 引用类型赋值2.1.2.1 引用外部Bean2.1.2.2 创建内部Bean2.1.3 集合类型赋值2.1.3.1 List类型2.1.3.2 Map类型 1.1 创建测试类 Address.java public class Address { private String province; private String city; } Book.java public class Book {

qq_37022135的博客 844

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Spring系统学习 -Spring IOC 的XML管理Bean之类类型属性赋值、数组类型属性赋值、集合类属性赋值

类类型属性赋值: 在XML配置中,可以使用 `` 元素为类类型属性赋值。通过指定属性的名称和值,可以直接将其他Bean的实例引用注入到目标Bean的属性中。这种方式可以建立对象之间的关联关系。例如,可以将一个Address对象注入到Person对象的address属性中。 数组类型属性赋值: XML配置中,可以使用 `` 元素为数组类型属性赋值。通过使用` ` 或 ` `元素,可以定义一个数组或列表,并使用 `

好看的皮囊千篇一律,有趣的灵魂万里挑一。 1803

Spring 给对象的属性赋值的两种方式

DI: 依赖注入(Dependency Injection),IOC和DI完全一样。在一个类对象(service)中需要依赖于另一个类对象(dao),将另一个类对象(dao)注入给对象(service)的过程,称为依赖注入。: 赋值:基本类型和基本类型的包装类以及String类型。6. Properties类型 ,属性配置类型。index: 索引,索引号从0开始。2. 设值注入 (set方法赋值)将年级对象注入给学生对象的年级属性。2. 配置文件中配置。3. List 类型。

weixin_72038059的博客 804

在非srping容器管理的类中获取spring容器

在工作的时候需要在非srping容器管理的类中获取spring容器。在以前的开发中一般是分成两种情况,一是都是由spring容器进行管理;二是非spring管理。 碰到这种混在一起的情况比较困惑,故来csdn找寻帮助,得到了解决办法,现在写下博客作为自我记录。 应用场景 在非容器管理的service类中获取容器中的dao。 解决方案 编写工具类SpringContextUtil.java...

刘凯砍桥的博客 868

Spring(三)之容器对象的属性赋值

文章目录基本类型赋值复杂类型赋值赋值null自定义对象赋值List对象赋值Map对象赋值 基本类型赋值 使用property标签,本质是调用setter方法赋值。 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-insta...

qq_38783257的博客 494

注解怎么给属性赋值

如何通过注解对属性赋值?-Spring版本前言思路:代码实现1.加载spring.xml2.创建多个自定义注解3.创建多个Bean对象4.使用PostProcessor进行扩展(逻辑在第6步)5.启动Spring6.PostProcessor处理逻辑总结: 前言 大家都用过Spring的@Value(“xxx”)注解,如果没有debug过源码的同学对这个操作还是一知半解,工作一年了学了反射学了注解,还是不会自己手撸一个注解对属性赋值的操作。今天就用几分钟时间给你讲明白这个如何实现! 理想中: @Compan

qq_40679905的博客 2157

Spring IoC是如何使用BeanWrapper和Java内省结合起来给Bean属性赋值的【享学Spring】

前言

架构师:通透,才能写出好代码! 1986

Spring中使用@Value注解实现给Bean属性赋值

一、属性赋值 只用Spring注解开发的时候,可以使用@Value搭配@PropertySource注解进行给对象的属性进行赋值。 @Value注解的定义: @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE}) @Retention(Retention...

huangjhai的博客 3694

【Spring 给对象的属性赋值的两种方式】

补充《Spring》

cyxhaha12的博客 1712

Spring--IOC--bean属性赋值

一.(*)根据bean的类型从IOC容器中获取bean的实例 将上一篇博客中的代码进行改进(*) https://blog.youkuaiyun.com/myjess/article/details/105656310 测试代码改为: import org.springframework.context.ApplicationContext; import org.springframework.conte...

myjess’s blog 469

Spring框架—IOC容器—属性赋值的几种方式

目录一、常用的赋值方式1.1 set注入1.1.1 ApplicationContext.xml配置文件1.1.2 测试类:1.1.2 控制台输出:1.2 构造注入1.2.1 修改Student类1.2.2 配置ApplicationContext.xml文件1.2.2 测试类1.2.3 控制台输出1.2.3 使用重载构造方法赋值1.2.3.1 解决办法二、 其他赋值方式2.1 P名称空间赋值2.2 导入名称空间2.2 测试类2.3 控制台输出 一、常用的赋值方式 在Spring中,有两种常用的赋值方式:s

qq_37022135的博客 929
上一篇: spring(注解版)将组件加入到容器
下一篇: bean的生命周期
java加油鸭
博客等级 码龄7年 3粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值