国际奥委会如何利用弹簧引导实现

  介绍

这篇文章将为大家详细讲解有关奥委会如何利用弹簧引导实现,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

项目结构

奥委会如何利用弹簧引导实现

实际上三四个类完全能搞定这个简单的国际奥委会容器,但是出于可扩展性的考虑,还是写了不少的类。
因篇幅限制,接下来只将几个最重要的类的代码贴出来并加以说明,完整的代码请直接参考https://github.com/clayandgithub/simple-ioc。

<强> SimpleAutowired

代码

进口java.lang.annotation。*;
  
  @Target ({ElementType.FIELD})
  @Retention (RetentionPolicy.RUNTIME)
  @Documented
  公共@ interface SimpleAutowired {
  布尔要求()默认正确;
  
  字符串值()默认“,“;//这个字段从@ qualifier搬到这里为了简单起见
  }

说明

@SimpleAutowired的作用是用于注解需要自动装配的字段。
此类和春天的@ autowired的作用类似。但又有以下两个区别:
- @SimpleAutowired只能作用于类字段,而不能作用于方法(这样实现起来相对简单些,不会用到aop)
- @SimpleAutowired中包括了要求(是否一定需要装配)和价值(要装配的bean的名字)两个字段,实际上是将spring中的@ autowired以及限定符的功能简单地融合到了一起

<强> SimpleBean

代码

进口java.lang.annotation。*;
  
  @Target({应用。方法,ElementType.ANNOTATION_TYPE})
  @Retention (RetentionPolicy.RUNTIME)
  @Documented
  公共@ interface SimpleBean {
  字符串值()默认“,“;
  }

说明

@SimpleBean作用于方法,根据方法返回值来生成一个bean,对应春天中@ bean
的用价值来设置要生成的bean的名字

<强> SimpleComponent

代码

进口java.lang.annotation。*;
  
  @Target({应用。方法,ElementType.ANNOTATION_TYPE})
  @Retention (RetentionPolicy.RUNTIME)
  @Documented
  公共@ interface SimpleBean {
  字符串值()默认“,“;
  }

说明

@SimpleComponent作用于类,国际奥委会容器会为每一个拥有@SimpleComponent的类生成一个bean,对spring中应的@ component。特殊说明,为了简单起见,@SimpleComponent注解的类必须拥有一个无参构造函数,否则无法生成该类的实例,这个在之后的SimpleAppliationContext中的processSingleClass方法中会有说明。

<强> SimpleIocBootApplication

代码

进口java.lang.annotation。*;
  
  @Target ({ElementType.TYPE})
  @Retention (RetentionPolicy.RUNTIME)
  @Documented
  公共@ interface SimpleIocBootApplication {
  String [] basePackages违约(){};
  }

说明

@SimpleIocBootApplication作用于应用的入口类。
这个启动模式是照搬了spring-boot的启动模式,将启动任务委托给SimpleIocApplication来完成.ioc容器将根据注解@SimpleIocBootApplication的相关配置自动扫描相应的包,生成bean并完成自动装配。(如果没有配置,默认扫描入口类(测试程序中的SampleApplication)所在的包及其子包)

以上就是这个奥委会容器所提供的所有注解,接下来讲解奥委会容器的扫描和装配过程的实现。

<强> SimpleIocApplication

代码

进口com.clayoverwind.simpleioc.context。*;
  进口com.clayoverwind.simpleioc.util.LogUtil;
  
  进口java.util.Arrays;
  进口java.util.Map;
  进口java.util.logging.Logger;
  
  
  公开课SimpleIocApplication {
  ,私人Class<和# 63的在applicationEntryClass;
  
  私人ApplicationContext ApplicationContext;
  
  私人最后日志记录器=LogUtil.getLogger (this.getClass ());
  
  公共SimpleIocApplication (Class<及# 63;比;applicationEntryClass) {
  这一点。applicationEntryClass=applicationEntryClass;
  }
  
  公共静态空运行(Class<及# 63;在applicationEntryClass (String [] args) {
  新SimpleIocApplication (applicationEntryClass) .run (args);
  }
  
  公共空间运行(String [] args) {
  LOGGER.info(“开始运行……“);//创建应用程序上下文和应用程序初始化
  applicationContext=createSimpleApplicationContext ();
  ApplicationContextInitializer初始值设定项=createSimpleApplicationContextInitializer (applicationEntryClass);//初始化应用程序上下文(这是我们创建bean)
  initializer.initialize (applicationContext);//这里可能存在一个隐藏的//处理这些特殊bean
  processSpecialBeans (args);
  
  LOGGER.info (“!“);
  }
  
  私人SimpleApplicationContextInitializer createSimpleApplicationContextInitializer (Class

国际奥委会如何利用弹簧引导实现