详解@Configuration

简介

@Configuration注解用于标识一个类作为Spring的配置类,从而允许使用纯Java代码的方式来定义Bean和Bean之间的依赖关系

@Configuration注解是Spring框架中非常核心的一个功能,它提供了一种替代XML配置文件的方法。通过该注解,开发人员可以在Java类中通过方法级别的@Bean注解来创建和配置Bean定义。这样做的好处是可以提高代码的可读性和维护性,同时也使得配置更加灵活。

当一个类被@Configuration注解标记时,这个类会被视为一个Bean定义的来源,并且可以包含一个或多个@Bean方法。这些方法将会在应用启动时由Spring容器调用,以便生成相应的Bean定义,并管理它们的生命周期。

@Configuration注解的类通常与@Bean注解的方法一起使用,其中@Bean注解用于实例化和配置具体的Bean。@Configuration类本身也可以被Spring容器视为一个普通的Bean进行管理,因为它本质上也是一个由Spring管理的组件。

总的来说,@Configuration注解是Spring框架实现基于Java的配置的核心,它使得开发者能够以类型安全且重构友好的方式编写Spring应用的配置代码。

例如,一个简单的@Configuration类:

@Configuration
public class AppConfig {@Beanpublic MyService myService() {return new MyServiceImpl();}
}

这个例子中,AppConfig类被标记为一个配置类,它包含一个方法myService(),该方法创建一个MyService类型的对象并返回,这个对象随后会被注册到Spring容器中。

源码:

@Component
public @interface Configuration {@AliasFor(annotation = Component.class)String value() default "";boolean proxyBeanMethods() default true; //默认为ture Spring会保证多次调用@Bean标注的工厂方法,不会重复产生新的对象,始终是同一个
}

@Configuration与XML配置的对比

XML配置

<bean id="myService" class="com.example.MyServiceImpl"/>

对应的@Configuration类

@Configuration
public class AppConfig {@Beanpublic MyService myService() {return new MyServiceImpl();}
}

作用域与生命周期

如果我们想让MyService成为一个原型作用域的Bean,我们可以这样配置:

@Configuration
public class AppConfig {@Bean(scope = "prototype")public MyService myService() {return new MyServiceImpl();}
}

这样每次从Spring容器中获取myService时,都会得到一个新的实例。

继承与组合

如果我们有两个配置类并且想要在一个配置类中重用另一个配置类的Beans,可以使用@Import注解:

@Configuration
public class AppConfig {@Import(OtherConfig.class)// ... 其他Bean定义
}

在这个例子中,AppConfig通过@Import注解引入了OtherConfig类定义的Beans。

条件化配置

假设我们只想在开发环境中创建某个Bean,可以使用@Conditional注解:

@Configuration
public class DevConfig {@Bean@Conditional(DevCondition.class)public DevService devService() {return new DevServiceImpl();}
}

在这个例子中,devService Bean只会在满足DevCondition条件时被创建。

提别注意避免在@Configuration类中使用静态字段,因为这样会使得Spring容器无法管理这些字段;确保配置类之间的依赖关系清晰,避免循环依赖等。

 

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

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

相关文章

ROS2从入门到精通0-2:ROS2简介、对比ROS1与详细安装流程

目录 0 专栏介绍1 什么是机器人操作系统&#xff1f;2 ROS的发展历程3 ROS2与ROS1的区别4 ROS2安装4.1 基本安装4.2 测试ROS24.2.1 测试一&#xff1a;发布者与订阅者4.2.2 测试二&#xff1a;海龟仿真器 5 常见问题 0 专栏介绍 本专栏旨在通过对ROS2的系统学习&#xff0c;掌…

信息系统项目管理师--成本管理

项⽬成本管理重点关注完成项⽬活动所需资源的成本&#xff0c;但同时也考虑项⽬决策对项⽬产品、服务或成果的使⽤成本、维护成本和⽀持成本的影响。不同的⼲系⼈会在不同的时间&#xff0c;⽤不同的⽅法 测算项⽬成本。 就某些项⽬&#xff0c;特别是⼩项⽬⽽⾔&#xff0c;成…

FocusVisualStyle通常是键盘焦点样式

设置了Button的FocusVisualSytle但是死活没有效果&#xff0c;查了一下这个是键盘焦点样式&#xff0c;摁下Tab键了才能让Button有焦点 <ButtonWidth"100"Height"30"FocusVisualStyle"{DynamicResource MyFocusVisual}">按钮1 </Butto…

VSCode报错:/bin/sh: python: command not found

背景 以前都是直接用txt写python&#xff0c;然后直接命令行运行。 这次涉及的代码较多&#xff0c;决定用编译器。 写好的一段python点击运行报错&#xff01; 问题描述 因为我本地安装的是python3&#xff0c;但是vscode用的是另一个路径的python&#xff0c;所以找不到 解决…

_note_04_02

1&#xff1a;输出1-20之间的奇数。 package _09142023.homework_04;import java.util.Scanner;/**** 输出1-20之间的奇数。**/ public class _07_1 {public static void main(String[] args) {System.out.println("1到20之间的奇数&#xff1a;");for (int i 1; i…

视觉语言处理:用Transformer桥接视觉与语言

引言 人工智能研究的前沿领域见证了显著的交叉融合。将计算机视觉和自然语言处理的领域融合&#xff0c;问题随之而来&#xff1a;AI能否直接从其视觉表现&#xff0c;即从原始像素中辨识和理解语言&#xff1f;在这篇博客中&#xff0c;我试图探究AI从图像中直接理解自然语言的…

在 Android 上恢复已删除文件的 5 种简单方法

您可能会因为意外删除、未完成的 Android 更新、手机意外关机等原因而丢失 Android 上的重要数据。新技术的发展使许多手机功能或程序能够从内部恢复丢失的数据。 在 Android 上恢复已删除文件的 5 种简单方法 然而恢复成功率的不确定性也成为人们克服数据丢失困境的重要考虑因…

Android14音频进阶:AudioTrack与AudioFlinger创建数据通道(五十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

子类和父类不在同一包中的继承性

不同包中的继承性 继承父类的protected 、public 成员变量 继承父类的 protected 、public 方法&#xff1b; 继承的成员或方法的 。 public class People { int age,leg 2,hand 2; public void showPeopleMess() { System.out.printf("%d岁&#xff0c;%d只脚,%d只手…

[Spring] IoC 控制反转和DI依赖注入和Spring中的实现以及常见面试题

目录 1. 什么是Spring 2.什么是IoC容器 3.通过实例来深入了解IoC容器的作用 3.1造一量可以定义车辆轮胎尺寸的车出现的问题 3.2解决方法 3.3IoC优势 4.DI介绍 5.Spring中的IoC和DI的实现 5.1.存对象 5.1.2 类注解 5.1.3 方法注解 5.2取对像 (依赖注入) 5.2.1.属性…

FPGA高端项目:FPGA基于GS2971的SDI视频接收+HLS多路视频融合叠加,提供1套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案的SDI接收转HDMI输出应用本方案的SDI接收图像缩放应用本方案的SDI接收纯verilog图像缩放纯verilog多路视频拼接应用本方案的SDI接收HLS图像缩放Video Mixer多路视频拼接应用本方案的SDI接收OSD动态字符叠加…

护眼台灯怎么选比较好?明基、爱德华、书客护眼台灯硬核PK测评

现在不管是学生党学习阅读&#xff0c;还是办公族加班工作&#xff0c;都离不开一盏光源舒适的台灯&#xff0c;然而如今的台灯市场水实在太深的&#xff0c;各种网红、劣质产品混杂在其中&#xff0c;这类台灯往往采用劣质电源&#xff0c;其电源品质较差&#xff0c;导致输出…

开发指南002-前后端信息交互规范-返回值定义

public enum IOResultEnum {SUCCESS(88888888, "IOResult_88888888"),//操作成功ERROR(99999999, "IOResult_99999999"), //操作失败EXCEPTION(11111111, "IOResult_11111111"),//操作异常AUTHORIZATE_FAIL(9000,"IOResult_9000"),//没…

VUE3 显示Echarts百度地图

本次实现最终效果 技术基础以及环境要求 vue3 echarts 百度地图API 要求1&#xff1a; VUE3 环境搭建&#xff1a;https://blog.csdn.net/LQ_001/article/details/136293795 要求2&#xff1a; VUE3 echatrs 环境搭建:https://blog.csdn.net/LQ_001/article/details/1363…

Ps:画笔工具

画笔工具 Brush Tool是 Photoshop 中最常用的工具&#xff0c;可广泛地用于绘画与修饰工作之中。 快捷键&#xff1a;B ◆ ◆ ◆ 常用操作方法与技巧 1、熟练掌握画笔工具的操作对于使用其他工具也非常有益&#xff0c;因为 Photoshop 中许多与笔刷相关的工具有类似的选项和操…

docker一键安装debian/ubuntu桌面环境LXDE+VNC+Firefox

好处不用说&#xff0c;可以在linux服务器版本使用chrome和firefox浏览器&#xff0c;步骤如下&#xff1a; 1.拉取镜像 镜像大概有1.3G左右 docker pull dorowu/ubuntu-desktop-lxde-vnc 使用docker images 查看镜像id 2.运行容器 docker run -dit --name ubuntu -p 6080…

多层菜单的实现方案(含HierarchicalDataTemplate使用)

1、递归 下面是Winform的递归添加菜单栏数据&#xff0c;数据设置好父子id方便递归使用 在TreeView的控件窗口加载时&#xff0c;调用递归加载菜单 private void LoadTvMenu(){this.nodeList objService.GetAllMenu(); // 通过Service得到全部数据// 创建一个根节点this.t…

SQL中如何添加数据

SQL中如何添加数据 一、SQL中如何添加数据&#xff08;方法汇总&#xff09;二、SQL中如何添加数据&#xff08;方法详细解说&#xff09;1. 使用SQL脚本&#xff08;推荐&#xff09;1.1 在表中插入1.1.1 **第一种形式**1.1.2 **第二种形式**SQL INSERT INTO 语法示例SQL INSE…

【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现

&#x1f31e;前言 这里我们会实现一个项目&#xff1a;在linux操作系统下基于OpenCV和Socket的人脸识别系统。 目录 &#x1f31e;前言 &#x1f31e;一、项目介绍 &#x1f31e;二、项目分工 &#x1f31e;三、项目难题 &#x1f31e;四、实现细节 &#x1f33c;4.1 关…

读算法的陷阱:超级平台、算法垄断与场景欺骗笔记06_共谋(下)

1. 博弈论 1.1. 当市场竞争对手之间普遍存在着误解和不信任情绪时&#xff0c;从长远来看&#xff0c;他们一半时间是在合作&#xff0c;另一半时间则是在背叛承诺 1.2. 当一方越了解对手&#xff0c;或者说可以更好地掌握对方的战略性行为时&#xff0c;他才可能找到展开合作…