【spring】@Bean注解学习

news2024/11/24 11:33:33

@Bean介绍

@Bean用于指示一个方法应该产生一个Bean对象,并将其交给Spring容器管理。

当使用@Bean注解的方法被Spring容器调用时,它只会执行一次,随后该方法返回的Bean对象会被添加到Spring的IOC(Inversion of Control,控制反转)容器中。这个Bean对象通常具有一个默认的id,即方法名,但可以通过@Bean的name属性显式指定Bean的名称。@Bean通常用于@Configuration类中,但也可以用于其他类型的类,如@Component、@Repository、@Controller和@Service。使用@Bean的方法必须具有返回值,且可以包含任何必要的参数。

@Bean注解是Spring从3.0版本开始提供的注解

简化源码:

@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Bean {

	@AliasFor("name")
	String[] value() default {};

	@AliasFor("value")
	String[] name() default {};
	

	boolean autowireCandidate() default true;

	String initMethod() default "";

	String destroyMethod() default AbstractBeanDefinition.INFER_METHOD;
}
 
属性介绍
  • name:String[]数组类型,指定注入到IOC容器中的Bean的名称,可以指定多个名称。如果不指定name属性和value属性的值,则注入到IOC容器中的Bean的名称默认是方法的名称。
  • value:String[]数组类型,从Spring 4.3.3版本开始提供的@Bean的属性,作用与name属性相同。
  • autowireCandidate:boolean类型,表示是否支持自动按照类型注入到其他的Bean中。此属性会影响@Autowired注解,不会响应@Resource注解,默认为true,表示支持自动按照类型注入到其他的Bean中。
  • initMethod:指定初始化的方法。
  • destroyMethod:指定销毁的方法。

测试示例代码

BeanDemo类
package com.yang.SpringTest.bean;

import lombok.extern.slf4j.Slf4j;

/**
 * <p>BeanDemo类</p>
 *
 * @author By: chengxuyuanshitang
 * Package com.yang.SpringTest.bean
 * Ceate Time 2024-03-12 16:12
 */

@Slf4j
public class BeanDemo {

    public BeanDemo() {
        log.info("======= 执行构造方法...");
    }

    public void init() {
        log.info("======= 执行初始化方法...");
    }

    public void destroy() {
        log.info("======= 执行销毁方法...");
    }
}
BeanDemoConfig配置类
package com.yang.SpringTest.bean;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * <p>配置类</p>
 *
 * @author By: chengxuyuanshitang
 * Package com.yang.SpringTest.bean
 * Ceate Time 2024-03-12 16:15
 */
@Configuration
@ComponentScan(basePackages = "com.yang.SpringTest.bean")
public class BeanDemoConfig {
    @Bean(initMethod = "init", destroyMethod = "destroy")
    public BeanDemo user() {
        return new BeanDemo();
    }
}
BeanDemoTest测试类

package com.yang.SpringTest.bean;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * <p>bean测试类</p>
 *
 * @author By: chengxuyuanshitang
 * Package com.yang.SpringTest.bean
 * Ceate Time 2024-03-12 16:14
 */
@Slf4j
public class BeanDemoTest {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BeanDemoConfig.class);
        log.info("**************** IOC容器启动完成....");

        BeanDemo demo1 = context.getBean(BeanDemo.class);
        BeanDemo demo2 = context.getBean(BeanDemo.class);

        log.info("**************** demo1是否等于demo2 ==>{}", (demo1 == demo2));

        context.close();
    }
}
运行结果
======= 执行构造方法...
======= 执行初始化方法...
**************** IOC容器启动完成....
**************** demo1是否等于demo2 ==>true




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

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

相关文章

linux解析域名指令 nslookup 或者 host

host www.baidu.com 第二种方法 nslookup www.baidu.com 注意&#xff1a;ns是name server之意

鼓楼夜市管理wpf+sqlserver

鼓楼夜市管理系统wpfsqlserver 下载地址:鼓楼夜市管理系统wpfsqlserver 说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于C#wpf架构和sql server数据库 功能模块&#xff1a; 登录注册 鼓楼夜市管理系统主界面所有店铺信…

YOLOv8独家改进:backbone改进 | TransXNet:聚合全局和局部信息的全新CNN-Transformer视觉主干| CVPR2024

💡💡💡本文独家改进:CVPR2024 TransXNet助力检测,代替YOLOv8 Backbone 改进结构图如下: 收录 YOLOv8原创自研 https://blog.csdn.net/m0_63774211/category_12511737.html?spm=1001.2014.3001.5482 💡💡💡全网独家首发创新(原创),适合paper !!! 💡…

【C++ Boost库】原始计时器

文章目录 前言一、原始计时器1.1 timer定时器timer类的介绍异常安全代码概况 1.2 progress_timer类如何使用异常安全代码概况 1.3 progress_display类如何使用代码概况 总结 前言 在现代软件开发中&#xff0c;时间是一种不可逆转的资源。特别是在需要按时执行任务、调度事件或…

汽车屏类产品(五):仪表Cluster常用芯片i.MX117x

前言: 仪表一般就是指方向盘前面那个表盘。做仪表的芯片最主要需要支持显示Display,而仪表的主要排版布局多种多样,但是主旨显示内容不尽相同。 仪表需求: 1、rpm转速表盘 仪表Cluster一般会有转速表盘rpm,单位一般是x1000,大部分汽车仪表范围就是0~8,也就是最高8000…

Prometheus 开源系统监控系统

文章目录 1.Prometheus简介2.Prometheus架构3.数据模型4.Prometheus Server5.AlertManager6.Exporters7.Pushgateway8.Grafana9.微服务监控 开源中间件 # Prometheushttps://iothub.org.cn/docs/middleware/ https://iothub.org.cn/docs/middleware/prometheus/prome-summary/…

【软件测试】探索和学习SDLC与软件测试的关系

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-gMpBJBc5FTUA3r7m {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

聊一聊常见的网络安全模型

目录 一、概述 二、基于时间的PDR模型 2.1 模型概念提出者 2.2 模型图 2.3 模型内容 2.3.1 Protection&#xff08;保护&#xff09; 2.3.2 Detection&#xff08;检测&#xff09; 2.3.3 Response&#xff08;响应&#xff09; 2.4 PDR模型思想 2.4.1 PDR模型假设 2…

asp购房网/网上房屋中介系统/房屋售房网站/(二手房交易)-203-(代码 +说明+开题+外文)

转载地址: http://www.3q2008.com/soft/search.asp?keyword203 以下是代码片段&#xff1a; 可以下载 查看演功能示 网站主要分前台系统和后台管理系统。 1、前台系统分为用户管理系统&#xff0c;新闻管理系统&#xff0c;资源查询系统&#xff0c;在线交流&#xff08;BBS&…

无人机远程指挥控制系统技术,无人机远程指挥中心功能详解

无人机远程指挥控制系统是一种用于实现无人机远程控制和指挥的技术。它主要基于先进的通信技术和无人机控制技术&#xff0c;使得操作人员可以在远离无人机的地方对其进行实时的控制和监控。 无人机远程指挥控制系统关键部分&#xff1a; 1. 通信技术&#xff1a;这是无人机远…

保研复习数据结构记(7)--散列查找(哈希表)

哈希表有什么特点&#xff1f;数据元素的关键字与其存储地址直接相关&#xff08;通过哈希函数相关&#xff09;&#xff0c;典型的用空间换时间的算法处理冲突的方法&#xff1f;拉链法&#xff08;链地址法&#xff09;&#xff0c;开放定址法&#xff0c;再散列法什么是查找…

國内linux服务器解决Ollama安装超时

curl -fsSL https://ollama.com/install.sh | sh 执行一直超时 做如下配置&#xff1a; 修改hosts文件&#xff0c;直接将http://github.com做个ip指向。 sudo vim /etc/hosts 输入密码后&#xff0c;按 i 增加以下配置 # github 注意下面的IP地址和域名之间有一个空格 140…

AI在商业逻辑应用中的革命性作用

在今天的商业环境中&#xff0c;我们面临着一系列复杂且瞬息万变的问题。从最初的业务点子产生&#xff0c;到方案的落地实施&#xff0c;每一个环节都充满了不确定性。传统的商业逻辑构建方式&#xff0c;往往耗时耗力&#xff0c;而且容易因为人的主观因素导致效率低下或偏离…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的交通信号灯识别系统(深度学习+UI界面+训练数据集+Python代码)

摘要&#xff1a;本研究详细介绍了一种采用深度学习技术的交通信号灯识别系统&#xff0c;该系统集成了最新的YOLOv8算法&#xff0c;并与YOLOv7、YOLOv6、YOLOv5等早期算法进行了性能评估对比。该系统能够在各种媒介——包括图像、视频文件、实时视频流及批量文件中——准确地…

execl/python读取数据库( Access、MySQL)

目录 一 、读取access数据库 &#xff08;一&#xff09;execl读取数据库 1.搜索ODBC&#xff08;注意自己的execl是64位还是32位&#xff09; 2.安装数据源的驱动程序 3.打开execl 4. 补充&#xff1a;选择数据源时&#xff0c;也可以直接在execl中选择数据源 &#xff…

YOLOv5涨点优化:backbone改进 | TransXNet:聚合全局和局部信息的全新CNN-Transformer视觉主干| CVPR2024

💡💡💡本文独家改进:CVPR2024 TransXNet助力检测,代替YOLOv5 Backbone 改进结构图如下: 收录 YOLOv5原创自研 https://blog.csdn.net/m0_63774211/category_12511931.html 💡💡💡全网独家首发创新(原创),适合paper !!! 💡💡💡 2024年计算…

最优学习率寻找

https://github.com/vmbbc/pytorch-lr-finderhttps://github.com/vmbbc/pytorch-lr-finder Keras 实现最优学习率寻找(LR Range Test) - 知乎深度神经网络使用随机梯度下降和可微分的误差向后传递更新神经网络中所有的可训参数 (trainable parameters \theta ),从而学到一个…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的自动驾驶目标检测系统详解(深度学习+Python代码+PySide6界面+训练数据集)

摘要&#xff1a;开发自动驾驶目标检测系统对于提高车辆的安全性和智能化水平具有至关重要的作用。本篇博客详细介绍了如何运用深度学习构建一个自动驾驶目标检测系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLO…

Trust Region Policy Optimization (TRPO)

Trust Region Policy Optimization (TRPO) 是一种强化学习算法&#xff0c;专门设计来改善策略梯度方法在稳定性和效率方面的表现。由 John Schulman 等人在 2015 年提出&#xff0c;TRPO 的核心思想是在策略优化过程中引入一个信任区域&#xff08;trust region&#xff09;&a…

探索TikTok云手机在社交媒体营销的作用

近年来&#xff0c;TikTok作为全球短视频平台之一&#xff0c;其用户基数呈现持续增长的趋势。伴随社交媒体的蓬勃发展&#xff0c;企业和个人纷纷涌入TikTok平台&#xff0c;追求更广泛的曝光和用户互动。为满足这一需求&#xff0c;TikTok云手机应运而生。本文将深度剖析TikT…