# SpringBoot-K1 **Repository Path**: weekends/spring-boot-k1 ## Basic Information - **Project Name**: SpringBoot-K1 - **Description**: Spring 版本注解 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-05-15 - **Last Updated**: 2023-05-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 版本介绍 #### V1 * 使用`applicationContext.xml`中``标签进行引入路径注入 `Bean` * 使用``标签进行加载其他配置文件,例如`MySQL、Redis`等配置文件 #### V2 * 使用`applicationContext.xml`中``标签进行引入路径注入`Bean` * 使用`@Component、@Service、@Controller、@Repository`等注解标识`Bean`,然后通过 `applicationContext.xml`中`` 标签进行配置扫描路径 * 使用``标签进行加载其他配置文件,例如`MySQL、Redis`等配置文件,与`v1`版本相同 #### V3 * 使用`@Configuration`注解代替`applicationContext.xml`,`@Bean`进行替代``标签 * `v3.1`版本使用`@ComponentScan`注解代替`` * 使用`@import`注解代替``标签进行加载其他配置文件,例如`MySQL、Redis`等配置文件,并且`@import`注解可以直接导入类进行注入`Bean`(不推荐) * 使用`@Import`导入的类若实现了`ImportSelector`接口,实现类自身不会注入`Bean`容器,而实现类实现的`selectImports`方法返回的类全路径名称会动态注入到`Bean`容器(相对灵活) * 使用`@Import`导入的类若实现了`ImportBeanDefinitionRegistrar`接口,实现类自身不会注入`Bean`容器,而实现类实现的`registerBeanDefinitions`方法可以实现动态注入`Bean`容器(更加灵活) * `@Enable...` 注解主要是限制`@Import`使用四种元注解进行限制作用范围,其是基于`@Import`进行实现 四种元注解:`@Target`, `@Retention`, `@Documented`, `@Inherited`,负责注解其他注解。 * `@Target`:描述注解的使用范围,比如类、接口、字段等 * `@Retention`:描述的注解在什么范围内有效,比如运行时、源文件中、class 文件中 * `@Documented`:生成文档相关 * `@Inherited`:是否子类继承描述的注解 #### V4 * `@Conditional`条件注解,使得注解注入`Bean`更加灵活,与`@Import`导入实现`ImportSelector`、`ImportBeanDefinitionRegistrar`接口一样动态判断是否注入`Bean` 跨域解决方式: * 在需要跨域访问的类和方法中设置允许跨域访问(如`Spring`中使用`@CrossOrigin`注解,非全局) * 继承使用`Spring Web`的`CorsFilter`(适用于`Spring MVC`、`Spring Boot`) * 实现`WebMvcConfigurer`接口(适用于`Spring Boot`) #### V5 * `@Index`引入注解`spring-context-indexer`依赖自动内嵌`@Component`等注解中,无需单独引用。生成`target/classes/META-INF/spring.components`索引文件,运行时效率提高。 #### SPI * `SPI`是调用方来制定接口规范,提供给外部来实现,`API`是实现方制定接口规范,提供给外部来调用 * 相关项目`MyDataBase`、`MysqlDataBase`、`OracleDataBase`,需下载并通过`Maven`进行构建(`maven intsall`) * 通过`MyDataBase`统一定义接口,`MysqlDataBase`和`OracleDataBase`分别实现`Connection`接口 * `MysqlDataBase`和`OracleDataBase`在`resources`目录下创建`META-INFO/services/${MyDataBase项目Connection接口地址}`,赋值为`MysqlDataBase`和`OracleDataBase`实现类地址 * `SpringBoot-K1`项目`spring-api`模块引入`MysqlDataBase`或`OracleDataBase`项目依赖,通过`ServiceLoader`进行加载配置信息,可通过引入不同依赖进行使用不同的实现类