概述

上面博文(简介与快速搭建)我们简单地介绍了什么是,以及如何使用,但是我们对于的基本原理并没有介绍,这篇博文我们重点介绍是如何实现的自动配置。

依赖管理

在我们的pom文件中最核心的依赖就一个:

    org.springframework.boot
    spring-boot-starter-parent
    2.4.4
    

它的父项目依赖,规定所有依赖的版本信息:

  org.springframework.boot
  spring-boot-dependencies
  2.4.4

由此,我们发现框架几乎声明了所有开发中常用的依赖的版本号,无需关注版本号,而且实现了自动版本仲裁机制,当然了我们也可以根据我们的需要,替换掉默认的依赖版本。

核心注解@n

@SpringBootApplication
public class BootApplication {
    public static void main(String[] args) {
        SpringApplication.run(BootApplication.class, args);
    }
}

在上面的启动类中我们发现了一个陌生的注解@n,这个注解的是什么含义呢?我们点进去看一下。

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
      @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })

其实@n是上面三个注解的组合体,我们对这三个注解理解清楚就可以了,下面逐个进行解释:

@ion

@Configuration
public @interface SpringBootConfiguration {

@我们并不陌生,它允许在上下文中注册额外的bean或导入其他配置类,@ion其实代表当前类是一个配置类。

@ion

ion的目的是启动的自动配置机制。

@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {

1、kage指定默认的包规则

@Import(AutoConfigurationPackages.Registrar.class)
public @interface AutoConfigurationPackage {

kage注解的作用是将 添加该注解的类所在的 作为 自动配置 进行管理。也就是说当应用启动时默认会将启动类所在的作为自动配置的。然后使用@注解将其注入到ioc容器中。这样,可以在容器中拿到该路径。

static class Registrar implements ImportBeanDefinitionRegistrar, DeterminableImports {
   @Override
   public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
      register(registry, new PackageImports(metadata).getPackageNames().toArray(new String[0]));
   }
   @Override
   public Set determineImports(AnnotationMetadata metadata) {
      return Collections.singleton(new PackageImports(metadata));
   }
}

重点看下ons方法。
方法的第二个参数通过new ().()方法设置。
接着看下的构造器方法。
PackageImports(AnnotationMetadata metadata) {
   AnnotationAttributes attributes = AnnotationAttributes
         .fromMap(metadata.getAnnotationAttributes(AutoConfigurationPackage.class.getName(), false));
   List packageNames = new ArrayList(Arrays.asList(attributes.getStringArray("basePackages")));
   for (Class basePackageClass : attributes.getClassArray("basePackageClasses")) {
      packageNames.add(basePackageClass.getPackage().getName());
   }
   if (packageNames.isEmpty()) {
      packageNames.add(ClassUtils.getPackageName(metadata.getClassName()));
   }
   this.packageNames = Collections.unmodifiableList(packageNames);
}

.(.())获取标注@kage注解的类的全限定名。
最后,利用给容器中导入一系列组件,将指定的包下的所有组件导入进来。
2、@(.class)
使用自动导入所有符合自动配置条件的Bean定义并加载到IOC容器
@Override
    public void process(AnnotationMetadata annotationMetadata, DeferredImportSelector deferredImportSelector) {
      Assert.state(deferredImportSelector instanceof AutoConfigurationImportSelector,
          () -> String.format("Only %s implementations are supported, got %s",
              AutoConfigurationImportSelector.class.getSimpleName(),
              deferredImportSelector.getClass().getName()));
      AutoConfigurationEntry autoConfigurationEntry = ((AutoConfigurationImportSelector) deferredImportSelector)
          .getAutoConfigurationEntry(annotationMetadata);
      this.autoConfigurationEntries.add(autoConfigurationEntry);
      for (String importClassName : autoConfigurationEntry.getConfigurations()) {
        this.entries.putIfAbsent(importClassName, annotationMetadata);
      }
    }

1、利用Entry();给容器中批量导入一些组件 2、调用List  = (, )获取到所有需要导入到容器中的配置类 3、利用工厂加载 Map> (@  );得到所有的组件 4、从META-INF/.位置来加载一个文件。 默认扫描我们当前系统里面所有META-INF/.位置的文件 -boot–2.4.4..jar包里面也有META-INF/.

文件里面写死了-boot一启动就要给容器中加载的所有配置类-boot–2.4.4..jar/META-INF/.,一共130个自动配置类。
130个场景的所有自动配置,会在启动的时候默认全部加载。n会按照条件装配规则(@),最终会按需配置。
小结:
为我们的应用程序启用了三个功能:自动配置,组件扫描,以及能够在”应用类”上定义额外的配置。
@
@在应用程序所在的软件包上启用扫描,指定扫描哪些注解。
为例
在130个场景有我们比较熟悉两个组件,和ion,我们以为例,看一下是如何自动装配的。

在注解中我们看到了大量以@开头的注解,即条件装配,满足指定的条件,则进行组件注入。@(.class)+@ies( = “”,  = true),读取我们在配置文件编写的属性,并把它封装到中,以供随时使用。
此时我们的容器已经以Bean的形式被注入到了IOC容器中。
如何禁用特定的自动配置类
如果发现应用中不需要特定自动配置类,则可以使用属性@n来禁用它们,如以下示例所示:
import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.autoconfigure.jdbc.*;
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
//@SpringBootApplication(excludeName = {"org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration"})
public class MyApplication {
}

如果该类不在类路径中,则可以使用注释的属性,并指定完全限定的名称(全类名字符串)。定义排除项,即可以使用哪个注释级别也可以使用属性来定义。
总结
ion —> 扫描on —> 根据条件@装配组件 —>根据加载属性值 —-> .
———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,永久会员只需109元,全站资源免费下载 点击查看详情
站 长 微 信: nanadh666

			
	声明:1、本内容转载于网络,版权归原作者所有!2、本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。3、本内容若侵犯到你的版权利益,请联系我们,会尽快给予删除处理!
		

		
		

	
			AutoConfigurationImportSelector
			Spring Boot
			依赖管理
			注解
	
		


	
		
		
						
				
				娜娜            
            		

		
			
						分享
			
						收藏
			
						点赞(0)
			
		
	



	


		
	
	    
		  		  	
			    
			      免费下载或者VIP会员资源能否直接商用?
			      本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
			    
			
	    		  	
			    
			      提示下载完但解压或打开不了?
			      最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。 若排除这种情况,可在对应资源底部留言,或联络我们。
			    
			
	    		  	
			    
			      找不到素材资源介绍文章里的示例图片?
			      对于会员专享、整站源码、程序插件、网站模板、网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
			    
			
	    		  	
			    
			      付款后无法显示下载地址或者无法查看内容?
			      如果您已经成功付款但是网站没有弹出成功提示,请联系站长提供付款信息为您处理
			    
			
	    		  	
			    
			      购买该资源后,可以退款吗?
			      源码素材属于虚拟商品,具有可复制性,可传播性,一旦授予,不接受任何形式的退款、换货要求。请您在购买获取之前确认好 是您所需要的资源
			    
			
	    		

	
	
	



			
			
			


    
                
            
                
                
                    上一篇
                    转发到头条
                
            
        
                        
            
                
                    下一篇
                    知言合一教育分享|教你如何制作vlog(一)
                
                
            
        
            
			
			

   相关文章
   
    

    



	
		

			
				
				
			
			
			
			
			


	

		
		
		
	
			
									生活百科
				
				
					中国小学500强,黄浦有4所!
				

									在上海,什么最牛?不是你家拆迁分了8套房,也不是你广场舞斗赢了大妈,而是你能不费...
				
				


		7 月前
	
		0
	
		0
	
		1.9K
	
	
			
		
	



    



	
		

			
				
				
			
			
			
			
			


	

		
		
		
	
			
									生活百科
				
				
					海南医学院2023年普通高等教育招生章程
				

									——海南医学院 ——2023年普通高等教育招生章程第一章 总则根据《中华人民共和...
				
				


		10 月前
	
		0
	
		0
	
		2.5K
	
	
			
		
	



    



	
		

			
				
				
			
			
			
			
			


	

		
		
		
	
			
									生活百科
				
				
					收藏!最新广东高校志愿填报指南
				

									深圳新闻网是立足深圳、辐射全国的综合性区域门户网站,为用户提供新闻、视频、博客、...
				
				


		6 月前
	
		0
	
		0
	
		1.8K
	
	
			
		
	



    



	
		

			
				
				
			
			
			
			
			


	

		
		
		
	
			
									生活百科
				
				
					大衣哥前儿媳陈亚男近况曝光,摆脱往日稚嫩,多了几分成熟韵味
				

									农民歌手大衣哥一家的生活日常,一直是网友们热衷关注的话题。 作为一个老百姓耳熟能...
				
				


		8 月前
	
		0
	
		0
	
		1.8K
	
	
			
		
	

    


			
		

		
			
				站长简介			微信:nanadh666
公众号:娜娜创业日记
QQ群:278210989
本人创业10年,多家网站VIP付费会员,本站分享创业项目、创业教程、主题源码、电商教程、工具软件等也不断的从淘宝购买很多教程和模板。 做了这个网站用来分享这些精品付款资源。

		
最新实战项目


  
    
      

        
          
        

        
          
            
              微头条变现写作课程,掌握流量变现技巧,提升微头条质量,实现收益增长
            
          
        

      
    

  
    
      

        
          
        

        
          
            
              AI+自媒体运营变现课,掌握AI写作与RPA技术,轻松实现自媒体变现
            
          
        

      
    

  
    
      

        
          
        

        
          
            
              微信朋友圈 广告投放全攻略:ADQ平台介绍、推广层级、商品库与营销目标
            
          
        

      
    

  
    
      

        
          
        

        
          
            
              人工智能AI时代,饭碗频遭抢夺,普通人咋办?躺赢之道在何方?
            
          
        

      
    

  
    
      

        
          
        

        
          
            
              图书博主养成记:4类带货方式,视频直播课助力,快速入局图文赛道
            
          
        

      
    

  
    
      

        
          
        

        
          
            
              YouTube视频营销入门:账号注册指南,平台介绍与外贸推广
            
          
        

      
    

  
    
      

        
          
        

        
          
            
              小红书飞书 模板实战变现:小红书快速起号,搭建一个赚钱的飞书模板
            
          
        

      
    

  
    
      

        
          
        

        
          
            
              联盟营销实战指南,详解联盟模式、平台规则及联盟客运作,实现流量变现
            
          
        

      
    

  

			
		

	











    	    

		



  
    
          
    
    

	          	            

    同步各大论坛VIP资源,创业教程、自媒体、抖音快手短视频等视频教程以及营销软件、源码、淘宝虚拟资源等,长期更新各大付费创业项目
  

  
    快速导航
    
      实战项目免费项目自动项目网站源码    
  

  
    关于本站
    
      VIP介绍合伙人介绍客服咨询推广计划    
  

  
    联系我们
    
微信客服
扫码加我微信


微信公众号
关注公众号
  

		
	

		
			网站地图      Copyright © 2023 本站为非盈利性赞助网站,本站所有软件来自互联网,版权属原著所有,如有侵权,敬请来信联系我们,我们立即删除。 - All rights reserved
			闽ICP2023013435/*@media (min-width: 768px){*/
/*.py-md-4 {*/
/*    padding-top: 1.5rem!important;*/
/*    padding-bottom: 0rem!important;*/
/*}}*/




		
	


	
			








	
		
			首页会员介绍用户中心		
	




	
		
			首页实战项目开通VIP我的加盟合伙人		
	




  
  
  
  
    

	          	            


  
  首页
实战项目
免费项目
自动项目
开通会员限时5折
加盟合伙人
APP下载
生活百科









var zb = {"home_url":"https:\/\/www.taonana.cn","ajax_url":"https:\/\/www.taonana.cn\/wp-admin\/admin-ajax.php","theme_url":"https:\/\/www.taonana.cn\/wp-content\/themes\/ripro-v5","singular_id":"43395","post_content_nav":"0","site_popup_login":"1","site_notify_auto":"0","current_user_id":"0","ajax_nonce":"c4099f77a7","gettext":{"__copypwd":"\u5bc6\u7801\u5df2\u590d\u5236\u526a\u8d34\u677f","__copybtn":"\u590d\u5236","__copy_succes":"\u590d\u5236\u6210\u529f","__comment_be":"\u63d0\u4ea4\u4e2d...","__comment_succes":"\u8bc4\u8bba\u6210\u529f","__comment_succes_n":"\u8bc4\u8bba\u6210\u529f\uff0c\u5373\u5c06\u5237\u65b0\u9875\u9762","__buy_be_n":"\u8bf7\u6c42\u652f\u4ed8\u4e2d\u00b7\u00b7\u00b7","__buy_no_n":"\u652f\u4ed8\u5df2\u53d6\u6d88","__is_delete_n":"\u786e\u5b9a\u5220\u9664\u6b64\u8bb0\u5f55\uff1f"}};



        
(function(){
var el = document.createElement("script");
el.src = "https://lf1-cdn-tos.bytegoofy.com/goofy/ttzz/push.js?b38fc1b4a0668a7c2cb975bbb26fef3329ce400567c1e04f47289e3a62667c923d72cd14f8a76432df3935ab77ec54f830517b3cb210f7fd334f50ccb772134a";
el.id = "ttzz";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(el, s);
})(window)



(function(){
var el = document.createElement("script");
el.src = "https://lf1-cdn-tos.bytegoofy.com/goofy/ttzz/push.js?ebded415054d3b078cff74cc51db0700195bafea6b214600891dbd43de6b68ccfd9a9dcb5ced4d7780eb6f3bbd089073c2a6d54440560d63862bbf4ec01bba3a";
el.id = "ttzz";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(el, s);
})(window)


var _hmt = _hmt || [];
(function() {
  var hm = document.createElement("script");
  hm.src = "https://hm.baidu.com/hm.js?c8bfa035760d88c8c595bdba887f3e8a";
  var s = document.getElementsByTagName("script")[0]; 
  s.parentNode.insertBefore(hm, s);
})();





  var ndt = $("#help dt");
  var ndd = $("#help dd");
  ndd.eq(0).show();
  ndt.click(function () {
    ndd.hide();
    $(this).next().show();
  });