一、ImportBeanRegistrar 实例
1. 创建一个 Mac 对象类
java
package org.example.spring5.domain;
/**
* @author: Calvin <br>
* @date: 2020/11/25 17:26 <br>
* @since: 1.0 <br>
* @description: Mac <br>
*/
public class Mac {
public Mac() {
System.out.println("【Mac系统】将被注入到Spring IoC容器中...");
}
}
2. 创建一个 MacOsManualImportBeanDefinitionRegistrar
实现类,实现接口 ImportBeanDefinitionRegistrar
接口类。
java
package org.example.spring5.config.register;
import org.example.spring5.domain.Mac;
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;
/**
* @author: Calvin <br>
* @date: 2020/11/26 15:03 <br>
* @since: 1.0 <br>
* @description: MacOsManualImportBeanDefinitionRegistrar <br>
*/
public class MacOsManualImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
/**
* 手动注册 Bean对象到IOC容器
*
* @param annotationMetadata 注解信息
* @param registry 注册器
*/
@Override
public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry registry) {
RootBeanDefinition MacBeanDefinition = new RootBeanDefinition(Mac.class);
registry.registerBeanDefinition("mac",MacBeanDefinition);
}
}
3. 在 @EnableOS
中添加 @Import
添加 MacOsManualImportBeanDefinitionRegistrar.class
值。
- 作用:将手动注册 Mac Bean对象写入到配置文件中,再通过配置文件加载到 IOC 容器中。
java
package org.example.spring5.config.annotations;
import org.example.spring5.config.imports.ImportSelectorOS;
import org.example.spring5.config.register.MacOsManualImportBeanDefinitionRegistrar;
import org.springframework.context.annotation.Import;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @author: Calvin <br>
* @date: 2020/11/26 10:50 <br>
* @since: 1.0 <br>
* @description: EnableOS <br>
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import(value = {
ImportSelectorOS.class,
MacOsManualImportBeanDefinitionRegistrar.class
})
public @interface EnableOS {
}
4. 启动程序
java
package org.example.spring5;
import org.example.spring5.config.SpringConfiguration;
import org.example.spring5.domain.User;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import java.util.Arrays;
/**
* @author: Calvin <br>
* @date: 2020/11/25 14:27 <br>
* @since: 1.0 <br>
* @description: SpringApplication <br>
*/
public class SpringApplication {
private static AnnotationConfigApplicationContext annotationConfigApplicationContext;
public static void main(String[] args) {
annotationConfigApplicationContext = new AnnotationConfigApplicationContext(SpringConfiguration.class);
System.out.println("Bean 对象已装配完毕...");
}
}
5. 执行结果
java
【Win7操作系统】将被注入到Spring IoC容器中...
【Win10操作系统】将被注入到Spring IoC容器中...
【Mac系统】将被注入到Spring IoC容器中...
Bean 对象已装配完毕...