您的当前位置:首页正文

Spring原理篇(2)--BeanPostProcessor or BeanDefinition or Aware or InitializingBean

2024-12-01 来源:个人技术集锦

《一线大厂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路径<

显示全文