在线营销型网站,网站访问量来源,浙江常升建设有限公司网站,成都广告公司地址自动装配以及简单的解析源码
自动装配是指SpringBoot在启动的时候会自动的将系统中所需要的依赖注入进Spring容器中 我们可以点开SpringBootApplication这个注解来一探究竟 点开这个注解可以发现这些 我们点开SpringBootConfiguration这个注解 可以发现实际上SpringBootApp…自动装配以及简单的解析源码
自动装配是指SpringBoot在启动的时候会自动的将系统中所需要的依赖注入进Spring容器中 我们可以点开SpringBootApplication这个注解来一探究竟 点开这个注解可以发现这些 我们点开SpringBootConfiguration这个注解 可以发现实际上SpringBootApplication这个其实是一个配置类 再点开EnableAutoConfiguration允许自动配置这个注解 在这里最重要的是AutoConfigurationPackage和Import这两个注解 AutoConfigurationPackage这个注解的作用是扫描与启动类同目录底下的所有包以及其子包将相关的Bean注入进Spring容器中 而Import注解则是将AutoConfigurationImportSelector.class将这个类作为Bean注入进Spring容器中我们再点开这个类来看看 找到这个方法然后再点 loadFactoryNames这个方法 我们可以看到这段代码这段代码的意思就是说加载META-INF/spring.factories 这个目录底下的配置类到Spring容器里面再根据配置类来生成相应的Bean对象 所以说这两个注解一个是将同一个项目里面的bean注入进Spring容器中另外一个注解是将别人写好的配置类里面的Bean注入进Spring容器中
手写一个starter帮助理解自动装配
手把手教学
首先创建一个maven工程名字应该是xxx-spring-boot-starterSpring官方规定如果是第三方的starter命名规则应该是xxx-spring-boot-starter而Spring官方的starter应该是spring-boot-xxx-starter 创建好了以后添加如下依赖 parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.4.2/version/parentdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-autoconfigure/artifactId/dependency/dependencies然后我们创建两个类 ConfigProperties 这个类是与Spring的配置文件关联的配置文件中的值会被注入相应的字段中 ConfigurationProperties(prefix dxg)这个注解的意思就是在配置文件中相关配置前缀是什么
package com.DXG.config;import org.springframework.boot.context.properties.ConfigurationProperties;ConfigurationProperties(prefix dxg)
public class ConfigProperties {private Integer age;private String name;public ConfigProperties(){}public ConfigProperties(Integer age, String name) {this.age age;this.name name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age age;}public String getName() {return name;}public void setName(String name) {this.name name;}
}然后我们再编写这个配置类
Configuration
EnableConfigurationProperties(ConfigProperties.class)
public class ConfigPropertiesAutoConfiguration {public ConfigProperties configProperties;public ConfigPropertiesAutoConfiguration(ConfigProperties configProperties){this.configProperties configProperties;}
}在这个配置类中首先打上Configuration这个注解表明这是一个配置类 然后再打上EnableConfigurationProperties(ConfigProperties.class)这个注解这个注解的意思是让使用了ConfigurationProperties(prefix dxg)的ConfigProperties.class注入进IOC容器中 然后我们就可以根据配置来生成相应的Bean了,比如我们编写了两个Bean Beanpublic TestService testService(){return new TestService(configProperties.getAge(), configProperties.getName());}Beanpublic TestService1 testService1(){return new TestService1(configProperties.getAge());}package com.DXG.service;public class TestService {private Integer age;private String name;public TestService(Integer age, String name) {this.age age;this.name name;}Overridepublic String toString() {return ConfigProperties{ age age , name name \ };}
}
package com.DXG.service;public class TestService1 {private Integer age;public TestService1(Integer age) {this.age age;}Overridepublic String toString() {return TestService1{ age age };}
}
最重要的一步来了我们需要在META-INF这个目录下面创建spring.factories这个文件 在这里面输入我们的配置类这样才能被SpringBoot扫描到然后加载进Spring容器里面生成相应的Bean
org.springframework.boot.autoconfigure.EnableAutoConfiguration\com.DXG.config.ConfigPropertiesAutoConfiguration然后我们打包这个项目生成相应的jar包 接下来我们就需要测试自动装配到底有没有生效了 在创建一个项目然后引入这个jar包 parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.4.2/version/parentdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdcom.DXG/groupIdartifactIdtest-spring-boot-starter/artifactIdversion1.0-SNAPSHOT/version/dependency/dependencies编写相应的代码来进行测试 package com.DXG.controller;import com.DXG.service.TestService;
import com.DXG.service.TestService1;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;RestController
RequestMapping(/test/)
public class TestController {Resourceprivate TestService testService;Resourceprivate TestService1 testService1;RequestMapping(/testString)public String testString(){return testService.toString();}RequestMapping(/testString1)public String testString1(){return testService1.toString();}
}
在配置文件里面填写相应的配置
server:port: 8080dxg:age: 12name: DXG接下来启动SpringBoot项目 可以看到确实是将两个Bean都注入进Spring容器中供我们使用了
总结
接下来画个流程图总结一下