当前位置: 首页>后端>正文

Spring注册Bean系列--方法5:@Import+ImportBeanDefinitionRegistrar

原文网址:Spring注册Bean系列--方法5:@Import+ImportBeanDefinitionRegistrar_IT利刃出鞘的博客-CSDN博客

简介

本文介绍Spring注册Bean的方法:@Import+ImportBeanDefinitionRegistrar。

注册Bean的方法我写了一个系列,见:Spring注册Bean(提供Bean)系列--方法大全_IT利刃出鞘的博客-CSDN博客

分享Java技术星球(自学精灵):https://learn.skyofit.com

方法概述

实现ImportBeanDefinitionRegistrar接口

实现它的registerBeanDefinitions方法(返回需要导入的组件的全类名数组;)

启动类使用@Import导入实现类

实例

ImportBeanDefinitionRegistrar接口的实现类

package com.knife.registrar;

import com.knife.entity.MyBean;

import org.springframework.beans.factory.support.BeanDefinitionRegistry;

import org.springframework.beans.factory.support.RootBeanDefinition;

import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;

import org.springframework.core.type.AnnotationMetadata;

public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {

? ? /**

? ? * AnnotationMetadata:当前类的注解信息

? ? * BeanDefinitionRegistry:BeanDefinition注册类;

? ? * 把所有需要添加到容器中的bean;调用

? ? * BeanDefinitionRegistry.registerBeanDefinition手工注册进来

? ? */

? ? @Override

? ? public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? BeanDefinitionRegistry registry) {

? ? ? ? // 可以判断对象是否已经注册到容器

? ? ? ? // boolean definition = registry.containsBeanDefinition("com.knife.example.entity.MyBean");

? ? ? ? //指定Bean定义信息

? ? ? ? RootBeanDefinition beanDefinition = new RootBeanDefinition(MyBean.class);

? ? ? ? //注册一个Bean,指定bean名

? ? ? ? registry.registerBeanDefinition("myBean", beanDefinition);

? ? }

}

要注册的类(Bean)

package com.knife.entity;

public class MyBean {

? ? public String sayHello() {

? ? ? ? return "Hello World";

? ? }

}

导入配置类

法1:启动类

package com.knife;

import com.knife.registrar.MyImportBeanDefinitionRegistrar;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.context.annotation.Import;

@SpringBootApplication

@Import({MyImportBeanDefinitionRegistrar.class})

public class DemoApplication {

? ? public static void main(String[] args) {

? ? ? ? SpringApplication.run(DemoApplication.class, args);

? ? }

}

法2:@Configuration 标记的类

其实,只要是注册到Spring容器中的类就可以,但一般用@Configuration。

package com.knife.config;

import com.knife.registrar.MyImportBeanDefinitionRegistrar;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.annotation.Import;

@Configuration

@Import({MyImportBeanDefinitionRegistrar.class})

public class MyBeanImportConfiguration {

}

测试

package com.knife.controller;

import com.knife.entity.MyBean;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class HelloController {

? ? @Autowired

? ? private MyBean myBean;

? ? @GetMapping("/test")

? ? public String test() {

? ? ? ? return myBean.sayHello();

? ? }

}

结果


https://www.xamrdz.com/backend/3au1924828.html

相关文章: