新增ApplicationContextUtil类打印出容器中的bean
@Component
@Import(DogImportSelector.class)
public class ApplicationContextUtil implements ApplicationContextAware {
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
String[] names = applicationContext.getBeanDefinitionNames() ;
for (String name:names
) {
System.out.println(name);
}
}
}
启动项目打印结果如下:
selectImports方法返回String[],需要加入IOC容器进行管理的类都可以添加到数组之中,参数是AnnotationMetadata类型的,实现了ClassMetadata,AnnotatedTypeMetadata类,所以可以对@Import注解引入ImportSelector实现类所在的类上的注解及类实例本身进行操作,可以在selectImports方法中进行各种逻辑上的处理;
新增一个通达信 期权 接口,接口Dog
看下ImportSelector通达信 期权 接口,接口的源码
package org.springframework.context.annotation;
import org.springframework.core.type.AnnotationMetadata;
public interface ImportSelector {
/**
* Select and return the names of which class(es) should be imported based on
* the {@link AnnotationMetadata} of the importing @{@link Configuration} class.
*/
String[] selectImports(AnnotationMetadata importingClassMetadata);
}
新增实现类BlackDog
public class BlackDog implements Dog {
@Override
public String dogName() {
return '黑色Dog';
}
}
新增实现类YellowDog
public class YellowDog implements Dog {
@Override
public String dogName() {
return '黄色Dog';
}
}
文章为作者独立观点,不代表观点