手写spring ioc容器遇到的坑

遇到的问题

写web的时候发现,tomcat启动起来,但是无法注入自己手写的bean对象,查了原因发现,tomcat启动有自己的容器,换句话说,不会初始化我写的容器,解决办法是,自己手写了监听器,在web.xml中配置监听器,来完成容器对象中beans的初始化。

tomcat生命名周期及容器初始化过程

tomcat生命名周期及容器初始化过程

实现监听器

为什么是servlet监听器,不是session后者request监听器,因为按照spring创建的bean,大部分是singleton的,而且一次创建,整个项目可用。如果是session或者request监听器,那么每次新的session或者request就需要重新创建容器。

继承ServletContextListener 实现
public class BeanFactory implements ServletContextListener 
实现ServletContextListener的方法
public interface ServletContextListener extends EventListener {
    void contextInitialized(ServletContextEvent var1);

    void contextDestroyed(ServletContextEvent var1);
}

实现beans的加载

思路是:

  1. 根据项目根路径,扫描路径下所有类。
  2. 进行加载,并判断是否带有指定的自定义注解类。
  3. 有注解,加入map容器。
  4. 取map容器中的每个实例,遍历。
  5. 判断属性是否有@Autowired自定义注解,有就递归得到依赖关系。
  6. 这里容器的初始化基本完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值