码迷,mamicode.com
首页 > 其他好文 > 详细

如何使用@import导入实现了ImportBeanDefinitionRegistrar接口的类?

时间:2020-03-02 16:30:24      阅读:67      评论:0      收藏:0      [点我收藏+]

标签:name   config   close   metadata   def   ring   system   meta   boot   

如何使用@import导入实现了ImportBeanDefinitionRegistrar接口的类?
技术图片

在程序开发的时候,我们经常会遇见一个名词“接口”这也是我们做开发人员工作中必不可少的一个技术,接下来就和大家分享一下怎么使用@import导入实现了ImportBeanDefinitionRegistrar接口的类。

package com.example.demo9;

import com.example.demo9.server.MyServer;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.context.ConfigurableApplicationContext;

import java.util.Arrays;

@SpringBootApplication

public class Demo9Application {

public static void main(String[] args) {

    ConfigurableApplicationContext context = SpringApplication.run(Demo9Application.class, args);

    String[] beanNamesForType = context.getBeanNamesForType(MyServer.class);

    System.out.println(Arrays.asList(beanNamesForType).toString());

    context.close();

}

}

public interface MyServer {

void fun();

}

package com.example.demo9.server;

//这里最好不要加@Service,除非有其它要求

public class MyServerAImp implements MyServer{

@Override

public void fun() {

    System.out.println("MyServerAImp>>>>>>>>>>>>>>");

}

}

package com.example.demo9.server;

//这里最好不要加@Service,除非有其它要求

public class MyServerBImp implements MyServer{

@Override

public void fun() {

    System.out.println("MyServerBImp>>>>>>>>>>>>>>");

}

}

package com.example.demo9.registrar;

import com.example.demo9.server.MyServerAImp;

import com.example.demo9.server.MyServerBImp;

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

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

import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;

import org.springframework.core.type.AnnotationMetadata;

public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {

@Override

public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {

    //GenericBeanDefinition对象设置BeanDefinition

    GenericBeanDefinition genericBeanDefinitionMyServerAImp=new GenericBeanDefinition();

    genericBeanDefinitionMyServerAImp.setBeanClass(MyServerAImp.class);

    GenericBeanDefinition genericBeanDefinitionMyServerBImp=new GenericBeanDefinition();

    genericBeanDefinitionMyServerBImp.setBeanClass(MyServerBImp.class);

    //注册

    registry.registerBeanDefinition("genericBeanDefinitionMyServerAImp",genericBeanDefinitionMyServerAImp);

    registry.registerBeanDefinition("genericBeanDefinitionMyServerBImp",genericBeanDefinitionMyServerBImp);

}

}

package com.example.demo9.configuration;

import com.example.demo9.registrar.MyImportBeanDefinitionRegistrar;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.annotation.Import;

@Configuration

@Import(MyImportBeanDefinitionRegistrar.class)

public class MyConfiguration {

}

如何使用@import导入实现了ImportBeanDefinitionRegistrar接口的类?

标签:name   config   close   metadata   def   ring   system   meta   boot   

原文地址:https://blog.51cto.com/14672031/2474904

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!