minIoC
常用注解结构 当前IOC容器设计结构 可以看到分为了注解、核心、包扫描器3部分。 注解部分最基础的bean注解我们实现了Component,3层架构中的注解我们实现了Controller,Service,Repository,这3者均“继承”了Component(其实是在其注解定义中加入了注解@Component). 待补充:Autowired,Qualifier,Scope BeanDefinition 核心部分,我们先介绍BeanDefinition,该类作为Bean元数据类,主要包含4个属性:用于反射类型,用于实例化的对象名,是否单例(2个属性用于描述)。 那么为何使用两个属性来表示是否单例? reply: 无需多余的字符串比较,可直接由其中一个字段的bool值直接得到是否单例。这在判断性能上提升多倍。 1 2 3 4 5 6 7 8 9 @Data @NoArgsConstructor @AllArgsConstructor public class BeanDefinition { private Class<?> beanClass; // Bean的Class对象(用于反射创建实例) private String beanName; // Bean的唯一标识符 private String scope; // 作用域(singleton/prototype) private boolean singleton; // 是否单例的快速标志位 } 两个字段表示是否单例,也带来了新问题:我们设置信息时需要保证二者的一致性 1 2 3 4 5 6 7 8 9 public void setScope(String scope) { this.scope = scope; this.singleton = "singleton".equals(scope); // 自动同步 } public void setSingleton(boolean singleton) { this.singleton = singleton; this.scope = singleton ? "singleton" : "prototype"; // 自动同步 } 构造器方面,我们提供2个不同参数的构造器,区别是后者可以传入scope(即是否单例) ...