首页 > 编程语言 > 详细

简单手写模拟spring底层原理

时间:2021-09-07 15:55:59      阅读:11      评论:0      收藏:0      [点我收藏+]

补充说明

在开始前,先补充一个bean的生成时间。在之前的spring入门使用代码里,是这么写的

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
UserService userService = (UserService) context.getBean("userService");
userService.test();

生成bean,是在我们第一行代码生成的,第二行代码只是去单例池去获取这个bean而已,但是这个是对于普通加载的,如果要生成的bean,声明采用了懒加载的方式,那就不再是第一行代码生成bean了,如果是一个单例bean,我们每次去getBean,都是同一个,但是如果是一个多例bean(也称为原型bean),每次去get,都是创建新的bean

编写基础工程

我们来自己实现一下上面的获取bean的方式

实现 ApplicationContext

package own.study.spring;
 
public class MyApplicationContext {
 
    private Class config;
 
    public MyApplicationContext (Class config) {
        this.config = config;
    }
 
    public Object getBean (String beanName) {
 
        return null;
    }
 
}

做一个配置类

做完配置类,我们还需要一个测试类

package own.study.spring;
 
public class Test {
 
    public static void main(String[] args) {
        MyApplicationContext myApplicationContext = new MyApplicationContext(Appconfig.class);
        UserService userService = (UserService) myApplicationContext.getBean("userService");
    }
 
}

看似我们就这么实现了,但是这么做肯定不能用,毕竟还有注解,当然,我们说了手动模拟实现,就不能用现成的spring的注解,所以我们也来实现一下注解

实现@ComponentScan注解

package own.study.spring;
 
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
 
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface ComponentScan {
 
    String value() default "";
 
}

这样,我们就可以使用我们自己的注解。

简单手写模拟spring底层原理

原文:https://www.cnblogs.com/java0011/p/15236898.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!