bean的加载控制:根据特定情况对bean进行选择性加载
代码
package com.qing.bean;
import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;
public class MyImportSelector implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
try {
Class<?> clazz = Class.forName("com.qing.bean.Mouse");
if (clazz != null) {
return new String[]{"com.qing.bean.Cat"};
}
} catch (ClassNotFoundException e) {
return new String[0];
}
return null;
}
}
import
package com.qing.config;
import com.qing.bean.MyImportSelector;
import org.springframework.context.annotation.Import;
@Import(MyImportSelector.class)
public class SpringConfig1 {
}
测试
package com.qing.app;
import com.qing.config.SpringConfig1;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class App {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig1.class);
String[] names = context.getBeanDefinitionNames();
for (String name :names) {
System.out.println(name);
}
}
}
结果
存在老鼠这个类,就加载猫这个bean → 存在老鼠 → 加载猫这个bean
存在狼这个类,就加载猫这个bean → 不存在狼 → 不加载猫这个bean