栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

手写Spring学习

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

手写Spring学习

准备内容

(1)创建ApplicationContext容器
包括configClass属性,构造方法和getBean方法
(2)创建CompentScan和Compent注解
@rentenion(RUNTIME)和@Target(Element.TYPE)
(3)创建Test、AppConfig和UserServce类

扫描逻辑模拟实现

(1)初始化时读取CompentScan注解的内容
(2)使用容器的类加载器加载对应路径
(3)对路径内容处理获得com.service.XXX.class格式
(4)加载出相应的类
注解的路径名(com.hu.service)——>获得类加载的绝对路径(com/hu/service)——>获得类名(com.hu.srvice.UserService)——>加载类(com.hu.srvice,UserService)
(5)创建BeanDefinition类,包含class,scope;
并在ApplicationContext中创建beanDefinitionMap
(6)判断当前加载的类是否带有Component注解,若有将class和scope设置好后放入beanDefinitionMap
(7)遍历beanDefinitionMap,将所有的singleton单例bean生成并放入singletonObjects;
创建bean时通过beanDefinition中class反射构造方法创建对象
(8)getBean实现——先判断beanName是否在beanDefinitionMap内,若有且为单例bean,取出singletonObjects中的对象,若为原型bean则新生成一个

依赖注入实现

(1)创建OrderServic类,并在UserService类中增加OrderService属性
(2)创建Autowired注解,并在UserService中的OrderService上增加注解
(3)在创建bean时,扫描创建出对象的所有属性,如果有Autowired注解,则通过getBean方法获得对象,并赋给新创建对象

Aware回调机制

(1)创建BeanNameAware接口类,并创建一个方法
(2)在UserService中实现该方法
(3)在createBean中增加判断,如果当前对象实现了BeanNameAware,则调用BeanNameAware的方法

初始化机制实现

(1)创建InitializingBean接口类,并创建方法
void afterPropertiesSet() throws Exception;
(2)在UserService中实现该方法
(3)在createBean中增加判断,如果当前对象实现了InitializingBean,则调用BeanNameAware的方法

BeanPostProcessor

(1)创建BeanPostProcessor接口类,并创建方法
Object postProcessBeforeInitialization(Object bean, String beanName);
Object postProcessAfterInitializatioin(Object bean, String beanName);
(2)创建HuBeanPostProcessor接口实现BeanPostProcessor
(3)在HuBeanPostProcessor类上增加Component注解
(4)在扫描时如果当前类是实现BeanPostProcessor,将加载出来的类放入beanPostProcessorList中
(5)在初始化前后遍历beanPostProcessorList,调用postProcessBeforeInitialization和postProcessAfterInitializatioin方法

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/946598.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号