《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,,即可获取!
BeanDefinition beanDefinition = new BeanDefinition();
//保存Class
beanDefinition.setBeanClass(clazz);
Service service = (Service) clazz.getAnnotation(Service.class);
//获取该Service 名字 实际上 Spring有自动扫描 自动生成名字的一套方案 在以前XML文件定义的形式 有id 可以定义Bean的名字.
String beanName = service.value();
//判断类是否实现了BeanPostProcessor接口 假设实现;
if(BeanPostProcessor.class.isAssignableFrom(clazz)){
try {
//获取该实现类BeanPostProcessor
BeanPostProcessor instance = (BeanPostProcessor) clazz.getDeclaredConstructor().newInstance();
//在初始化过程中 它仅仅是把相关实例保存到内存List中 在此处并无调用;请注意;
beanPostProcessorList.add(instance);
} catch (Exception e) {
e.printStackTrace();
}
}
// 解析scope
if (clazz.isAnnotationPresent(Scope.class)) {
Scope scope = (Scope) clazz.getAnnotation(Scope.class);
String scopeValue = scope.value();
if (ScopeEnum.singleton.name().equals(scopeValue)) {
beanDefinition.setScope(ScopeEnum.singleton);
} else {
beanDefinition.setScope(ScopeEnum.prototype);
}
} else {
beanDefinition.setScope(ScopeEnum.singleton);
}
//保存BeanDefinition 使用的Map集合 后续用于创建对象;
beanDefinitionMap.put(beanName,beanDefinition);
}
}
System.out.println(“”);
}
}
private List getBeanClasses(String compomentScanPath) {
//创建List 用于返回
List beanClasses = new ArrayList();
//拿到主类的ClassLoader 用于获取URL路径<