SpringBoot: ------自动配置原理

1.属性注入

1.spring中属性注入

声明配置文件
jdbc.password=root
jdbc.url=jdbc:mysql://localhost:3306/springboot
jdbc.driver-class-name=com.mysql.jdbc.Driver
jdbc.username=root
  • 完成属性注入
完成属性注入
@Configuration
//从配置文件获取值
@PropertySource(value = "jdbc.properties")
public class CreateDatasource {
    /*
    * 属性注入
    * */
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.driver-class-name}")
    private String driver;
    @Value("${jdbc.password}")
    private String password;

  @Bean
  public DruidDataSource getDruidDataSource(){
      DruidDataSource druidDataSource = new DruidDataSource();
      druidDataSource.setDriverClassName(driver);
      druidDataSource.setUrl(url);
      druidDataSource.setUsername(username);
      druidDataSource.setPassword(password);
      return druidDataSource;
  }
  
}

2.springboot中的属性注入

配置类-属性类-配置文件

1.配置文件中声明相关属性

application.yml
server.port=8989
server.context-path=/springboot
jdbc.password=root
jdbc.url=jdbc:mysql://localhost:3306/springboot
jdbc.driver=com.mysql.jdbc.Driver
jdbc.username=root

2.创建属性配置类并对属性进行注入

@ConfigurationProperties(prefix = "jdbc")  //读取application.yml的属性,并且为当前属性类添加前缀 
public class JDBCProperties {
    private String username;
    private String password;
    private String url;
    private String driver;
}

3.创建配置类引入属性配置类


@EnableConfigurationProperties(value = JDBCProperties.class)//获取配置文件类 
@Configuration
public class JDBCConf {
    @Autowired
    JDBCProperties jdbcProperties;

     @Bean
    public DruidDataSource getDruidDataSource(){
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setPassword(jdbcProperties.getPassword());
        druidDataSource.setUsername(jdbcProperties.getUsername());
        druidDataSource.setUrl(jdbcProperties.getUrl());
        druidDataSource.setDriverClassName(jdbcProperties.getDriver());
        return druidDataSource;
    }
}

4.配置文件提示的jar

  <!--此jar包可以让配置文件有提示-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

@Import

将组件交由工厂管理方式有几种?
java配置   @Confirguation @Bean
注解扫描    @ComponentScan  扫描加有@Repository @Component @Service @Controller的组件
@Import    也可以将组件交由工厂管理   注意:使用@Import注解交由工厂管理的对象名称为全限定名.
           第一种使用方式  @Import(value = {Black.class,Pink.class})
           第二种使用方式  实现ImportSelector接口和其中方法                        

实现ImportSelector接口和其中方法


@Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
//       逻辑代码
        String[] strs={"com.baizhi.conf.Blue","com.baizhi.conf.Red"};
        return strs;
    }

3.自动配置原理

1.EnableAutoConfiguration

@EnableAutoConfiguration= 
@AutoConfigurationPackage +@Import(EnableAutoConfigurationImportSelector.class) 注解
                 @AutoConfigurationPackage  
                 作用就是帮你找到入口类
                 @Import(EnableAutoConfigurationImportSelector.class)
                 public @interface EnableAutoConfiguration {
                     
                 }
                 
                 @Import(EnableAutoConfigurationImportSelector.class)  
                 作用就是往容器种添加组件,添加一个全限定名数组.
                 

通过selectImports()方法获取到类的全限定名,以数组形式返回,然后加入到spring的容器中.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3M8rT2Fb-1594617525776)(.\assets\1561520713923.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CjhW69bE-1594617525777)(.\assets\1561520940509.png)]

加载类路径下的META-info/spring.factorys从而获取到相关的自动配置类信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qId5GpBd-1594617525778)(.\assets\1561521107957.png)]

以org.springframework.boot.autoconfigure.EnableAutoConfiguration为键进行取值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CnpGO46c-1594617525778)(.\assets\1561521286949.png)]

自动配置类是springboot默认提供的自动配置.

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
org.springframework.boot.autoconfigure.cloud.CloudAutoConfiguration,\
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,\
org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration,\
org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.ldap.LdapDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.ldap.LdapRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.neo4j.Neo4jRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.solr.SolrRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,\
org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration,\
org.springframework.boot.autoconfigure.elasticsearch.jest.JestAutoConfiguration,\
org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration,\
org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration,\
org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration,\
org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration,\
org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration,\
org.springframework.boot.autoconfigure.hazelcast.HazelcastJpaDependencyAutoConfiguration,\
org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration,\
org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration,\
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration,\
org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.JndiConnectionFactoryAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.artemis.ArtemisAutoConfiguration,\
org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\
org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration,\
org.springframework.boot.autoconfigure.jooq.JooqAutoConfiguration,\
org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration,\
org.springframework.boot.autoconfigure.ldap.embedded.EmbeddedLdapAutoConfiguration,\
org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration,\
org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\
org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration,\
org.springframework.boot.autoconfigure.mail.MailSenderValidatorAutoConfiguration,\
org.springframework.boot.autoconfigure.mobile.DeviceResolverAutoConfiguration,\
org.springframework.boot.autoconfigure.mobile.DeviceDelegatingViewResolverAutoConfiguration,\
org.springframework.boot.autoconfigure.mobile.SitePreferenceAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\
org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration,\
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\
org.springframework.boot.autoconfigure.reactor.ReactorAutoConfiguration,\
org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration,\
org.springframework.boot.autoconfigure.security.SecurityFilterAutoConfiguration,\
org.springframework.boot.autoconfigure.security.FallbackWebSecurityAutoConfiguration,\
org.springframework.boot.autoconfigure.security.oauth2.OAuth2AutoConfiguration,\
org.springframework.boot.autoconfigure.sendgrid.SendGridAutoConfiguration,\
org.springframework.boot.autoconfigure.session.SessionAutoConfiguration,\
org.springframework.boot.autoconfigure.social.SocialWebAutoConfiguration,\
org.springframework.boot.autoconfigure.social.FacebookAutoConfiguration,\
org.springframework.boot.autoconfigure.social.LinkedInAutoConfiguration,\
org.springframework.boot.autoconfigure.social.TwitterAutoConfiguration,\
org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration,\
org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration,\
org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,\
org.springframework.boot.autoconfigure.transaction.jta.JtaAutoConfiguration,\
org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration,\
org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration,\
org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration,\
org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.web.HttpEncodingAutoConfiguration,\
org.springframework.boot.autoconfigure.web.HttpMessageConvertersAutoConfiguration,\
org.springframework.boot.autoconfigure.web.MultipartAutoConfiguration,\
org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.web.WebClientAutoConfiguration,\
org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.WebSocketAutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.WebSocketMessagingAutoConfiguration,\
org.springframework.boot.autoconfigure.webservices.WebServicesAutoConfiguration

以WebMvcAutoConfiguration为例在该类中已经预先配置了相关的一些组件,比如视图解析器,但是默认的视图解析器没有属性值,如果想设置属性值则需通过配置文件进行属性注入方可完成自动配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-um2Tj8kC-1594617525779)(.\assets\1561522315194.png)]

属性配置类一般一properties结尾,每一个自动配置类都会有一个对应的properties

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PzHqvzrV-1594617525780)(assets\1561522386001.png)]

4.启动器

spring-boot-starter-web
spring-boot-starter(启动器)     -web应用场景
springboot提供的启动器列表
https://docs.spring.io/spring-boot/docs/1.5.22.BUILD-SNAPSHOT/reference/html/using-boot-build-systems.html#using-boot-starter
默认没有为mybatis提供启动器,所以mybatis自己定义了一套启动器.

1.自定义启动器

1.构建java项目
2.引入父级项目.启动器规范的依赖.配置文件提示依赖
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starters</artifactId>
    <version>1.5.8.RELEASE</version>
  </parent>
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-configuration-processor</artifactId>
      <optional>true</optional>
    </dependency>
3.resources下构建META-INF目录
4.在META-INF目录下创建spring.factories,并且将EnableAutoConfirguration设置为键值,将自动配置类设置为值.
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.baizhi.autoconfirguation.HelloConf
5.将项目install到maven的本地仓库
6.在springboot项目中引用当前自动配置的依赖jar
7.书写配置文件测试自动配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值