以下内容是我根據,記錄日志是否進行選擇啟用,而設計的。
第一步:建立注解
/**
* @author wwz
*/
@Target(ElementType.TYPE)
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Import(AopLogRegister.class)
public @interface AutoImport {
/**
* 是否啟用,預設true
* @return
*/
boolean isEnabled() default true;
/**
* 自動裝配的類
* @return
*/
Class<?>[] value() ;
}
第二步:AopLogRegister類實作ImportBeanDefinitionRegistrar實作bean的注冊
/**
* @author wwz
*/
@Data
@Slf4j
public class AopLogRegister implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
if(importingClassMetadata.hasAnnotation(AutoImport.class.getName())){
MergedAnnotations mergedAnnotations = importingClassMetadata.getAnnotations();
MergedAnnotation mergedAnnotation = mergedAnnotations.get(AutoImport.class);
if(mergedAnnotation == null){
return;
}
//注解上是否啟用
if( mergedAnnotation.getBoolean("isEnabled")){
if(log.isInfoEnabled()){
log.info(">>>>start auto import bean definition<<<<");
}
//擷取AutoImport上value配置的class數組
Class<?>[] values = mergedAnnotation.getClassArray("value");
for(Class value:values){
RootBeanDefinition beanDefinition = new RootBeanDefinition(value);
registry.registerBeanDefinition(value.getSimpleName(),beanDefinition);
}
if(log.isInfoEnabled()){
log.info(">>>>end auto import bean definition<<<<");
}
}
}
}
}
第三步:在啟動類加上如上注解
@AutoImport(value= {XXXX.class})
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL5YTO1MzN0cTMyADOwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
切記XXXX.class 不要配置可裝配的注解。形如:@Component,@Configure,@Controller等。不然以上代碼自動裝配的意義就沒有了。
然後你可以在注解上進行,配置任何屬性。達到自己的目的。
其實這個用注解自動裝配bean。最主要的就是
AopLogRegister類實作ImportBeanDefinitionRegistrar