仿写Spring IOC

文章目录

  • IOC思路
  • 手写代码思路
  • 一些杂七杂八(可跳过)

IOC思路

在这里插入图片描述

手写代码思路

手写代码的思路:

  1. 自定义一个MyAnnotationConfigApplicationContext,构造器中传入要扫描的包。
  2. 获取这个包下的所有类。
  3. 遍历这些类,找出添加了@Component注解的类,获取它的Class和对应的beanName,封装成一个BeanDefinition,存入集合Set。这个集合就是loC自动装载的原材料。(为什么用set集合,因为要去重,保证唯一性,set有序且不重复)
  4. 遍历Set集合,通过反射机制创建对象,同时检测属性有没有添加@Value注解,如果有还需要给属性赋值,再将这些动态创建的对象以k-v的形式存入缓存区。
  5. 提供getBean等方法,通过beanName取出对应的bean即可。

一些杂七杂八(可跳过)

传统java web:

  • servlet层里注入service层,service层里注入Dao层
  • 一般service层,Dao层都是先写一个接口,再写一个接口的实现类impl
  • Dao层是数据库操作层,也叫mapper层,持久层

注入:

private HelloService helloService = new HelloServiceImpl(); 

本来Dao层注入到service层是需要new的,我们在两者中间插入一个工厂类,工厂类里写个方法getDao获取Dao对象(Dao对象即为Dao接口类,它的实现写到DaoImpl里)

// private HelloDao helloDao = new HelloDaoImpl();  //这里是要new的,ioc就是不用去new了
private HelloDao helloDao = BeanFactory.getDao();  //不new了,用工厂
   

上一篇:微软Edge浏览器全解析


下一篇:为什么需要服务器?服务器可以做些什么