首页 > 其他分享 >SpringBoot复习:(20)如何把bean手动注册到容器?

SpringBoot复习:(20)如何把bean手动注册到容器?

时间:2023-08-12 10:32:27浏览次数:30  
标签:20 SpringBoot springframework class bean org import public MusicService


可以通过实现BeanDefinitionRegistryPostProcessor接口,它的父接口是BeanFactoryPostProcessor.
步骤:
一、自定义一个组件类:

package com.example.demo.service;


public class MusicService {
    public MusicService() {
        System.out.println("music service constructed!");
    }
}

二、定义类实现BeanDefinitionRegistryPostProcessor:

package com.example.demo.component;

import com.example.demo.service.MusicService;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.stereotype.Component;

@Component
public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {

    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
        System.out.println(registry.getBeanDefinitionCount());
        //定义BeanDefinition对象
        RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(MusicService.class);
        //将BeanDefinition对象注册到容器
        registry.registerBeanDefinition("musicBean", rootBeanDefinition);
    }

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        System.out.println( beanFactory.getBeanDefinitionCount() );
    }
}

通过@Component注解,Spring就能够扫描到MyBeanDefinitionRegistryPostProcessor,也就能够把MusicService这个组件注册到容器。
三、可以获取在容器中通过MyBeanDefinitionRegistryPostProcessor注册的bean

package com.example.demo;

import com.example.demo.service.MusicService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.PropertySource;

@SpringBootApplication
@PropertySource("classpath:my.properties")
public class DemoApplication {

	public static void main(String[] args) {
		ConfigurableApplicationContext context = SpringApplication.run(DemoApplication.class, args);
		System.out.println("abc");

		MusicService musicService = context.getBean("musicBean", MusicService.class);
		System.out.println(musicService);

	}

}


标签:20,SpringBoot,springframework,class,bean,org,import,public,MusicService
From: https://blog.51cto.com/amadeusliu/7056853

相关文章

  • SpringBoot复习:(19)Condition接口和@Conditional注解
    Condition接口代码如下:publicinterfaceCondition{ booleanmatches(ConditionContextcontext,AnnotatedTypeMetadatametadata);}它是一个函数式接口,只有一个方法matches用来表示条件是否满足。matches方法中的ConditionContext类对象context可以通过getEnvironment方法获......
  • 【专题】2023消费电子行业数字化转型白皮书报告PDF合集分享(附原数据表)
    在后疫情时代,全球经济和消费力的增长面临巨大考验。2022年,电脑、手机等产品的市场规模出现了小幅收缩调整。然而,在这样的环境下,各种消费电子的细分领域却展现出了强大的韧性。阅读原文,获取专题报告合集全文,解锁文末29份消费电子行业相关报告。智能手表、真无线耳机、AR/VR眼镜、户......
  • N76E003使用双串口,波特率异常(115200 bps)
    1、如下图通过数据手册可以看出在16Mhz的时钟下115200会有较大误差,故须将时钟配置为16.6Mhz2、使用双串口的情况下串口0使用timer1作为时钟,串口1使用timer3作为时钟,在这种情况下,实际上timer1的时钟是16.588Mhz,需要按16.588Mhz来计算波特率,否则波特率有较大误差。(即便如此,在某些......
  • 2023.8.11
    今天早上起来,还是和往常一样打球,还有几天就离开了,只能假期回来再和兄弟们一起玩了,下午回家有些无聊了,问兄弟们还来不来,他们答应我出来打几个小时,太好了,终于不用在家里待着了,下午打到56点钟就回家了,爸妈还没回来,赶紧把饭蒸好,舒服了,晚上有些累了,躺着突然就睡着了,半夜起来写下这些,明......
  • [NISACTF 2022]babyupload
    [NISACTF2022]babyupload题目来源:nssctf题目类型:web涉及考点:文件上传1.题目说传一个图片文件,那我们传个muma.jpg看看但是上传失败:回去检查一下源代码,发现有/source直接访问下载了一个压缩文件,解压之后是一个py文件,随后进行代码审计2.代码审计fromflaskimportFl......
  • 32.SpringBoot整合high-level-client
    idea中使用es创建一个bianen-search模块 在mydata文件夹下创建一个nginx文件夹:mkdirnginx随便启动一个nginx实例,只是为了复制出配置:dockerrun-p80:80--namenginx-dnginx:1.10 如下图可以看到启动好了nginx容器,当然这个容器我们只是为了用来复制它的配置文......
  • Pycharm2023.2远程连接Linux服务器
    1.点击右下角(图中RemotePython处)2.输入服务器地址和用户3.输入密码4.只需在Location选择自己Linux中的虚拟环境Baseinterpreter不需要更改,点击create即可......
  • 洛谷 P7739 - [NOI2021] 密码箱
    感觉难度和今年D2T2差不多。首先一个很显然的事情是,每一步得到的分数的分子分母都是互质的,证明参考SBT。而最后答案要求我们将分子分母都求出来而不是求分数值,所以可以很明显的想到将分数当成一个二元组然后维护变换。考虑从右往左扫,假设当前分数为\(\dfrac{x}{y}\),那么扫过......
  • 2023.8.11 模拟赛
    A询问\(L\lei,j\leR\),其中\(\gcd(i,j)\not=1,i,j\)的对数。莫反先求出\(gcd(i,j)\not=1\)的对数,然后再直接调和级数暴力删去\(i,j\)是倍数的对数即可。BP4334[COI2007]Policija考虑建立圆方树。圆方树是怎么样的呢?圆方树是对于每个点双,都建立一个方点,然后......
  • 【专题】2023年全球中小型快消品企业调研报告PDF合集分享(附原数据表)
    全文链接:https://tecdat.cn/?p=33411原文出处:拓端数据部落公众号我们在这份报告合集中分享了有关中国本土企业的信息,包括快消品企业的渠道布局、所面临的外部风险和挑战,以及如何应对这些挑战。阅读原文,获取专题报告合集全文,解锁文末19份快消品行业相关报告。中国本土企业在制定......