国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - springBoot @Enable* 注解的使用

springBoot @Enable* 注解的使用

2021-05-07 13:16心無私天地寬 Java教程

這篇文章主要介紹了springBoot @Enable* 注解的使用,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

1、為什么使用@springbootapplication注解,即可做到自動配置?

答:@springbootapplication,內部起作用的注解其實有3個。@enableautoconfiguration,@componentscan,@configuration。這篇文章主要是講解@enablexx注解

2、為什么使用了@enableautoconfiguration。當使用了@configurationproperties時,即可自動導入.yml 或者.properties里面的配置項?

答:在@enableautoconfiguration內部,使用了@import注解。導入autoconfigurationimportselector幫助springboot將符合條件的configuration加載到ioc容器中。但是內部其實使用了springfactoriesloader來完成。類似與java spi的功能
,即從/meta-inf/spring.factories加載配置

?
1
2
3
4
5
6
7
@target({elementtype.type})
@retention(retentionpolicy.runtime)
@documented
@inherited
@autoconfigurationpackage
@import({autoconfigurationimportselector.class})
public @interface enableautoconfiguration

可以看到@import中,其實是導入了一個autoconfigurationimportselector的類。最關鍵的是,該類實現了接口importselector

?
1
2
3
4
5
6
7
8
public interface importselector {
 /**
  * select and return the names of which class(es) should be imported based on
  * the {@link annotationmetadata} of the importing @{@link configuration} class.
  */
 string[] selectimports(annotationmetadata importingclassmetadata);
 
}

這是importselector的描述,大概意思就是,該方法返回的bean 會自動的被注入,被spring所管理。

接著來看 autoconfigurationimportselector中 selectimports 的實現

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public string[] selectimports(annotationmetadata annotationmetadata) {
  if(!this.isenabled(annotationmetadata)) {
   return no_imports;
  } else {
   autoconfigurationmetadata autoconfigurationmetadata = autoconfigurationmetadataloader.loadmetadata(this.beanclassloader);
   annotationattributes attributes = this.getattributes(annotationmetadata);
   list<string> configurations = this.getcandidateconfigurations(annotationmetadata, attributes);
   configurations = this.removeduplicates(configurations);
   set<string> exclusions = this.getexclusions(annotationmetadata, attributes);
   this.checkexcludedclasses(configurations, exclusions);
   configurations.removeall(exclusions);
   configurations = this.filter(configurations, autoconfigurationmetadata);
   this.fireautoconfigurationimportevents(configurations, exclusions);
   return stringutils.tostringarray(configurations);
  }
 }

代碼都寫得很清楚。就不解釋了。

在@import中,可以看到 有個鏈接指向了 importbeandefinitionregistrar。這同樣是一個接口,作用跟 importselector 一樣。

?
1
2
3
4
5
public interface importbeandefinitionregistrar {
 public void registerbeandefinitions(
   annotationmetadata importingclassmetadata, beandefinitionregistry registry);
 
}

在registerbeandefinitions方法中,可以用beandefinitionregistry 注入我們想要注入的bean。

代碼示例:

使用@import編寫自己的@enable

1、創建2個測試bean

?
1
2
3
4
5
public class role {
}
 
public class user {
}

2、自定義enable注解

?
1
2
3
4
5
6
@target({elementtype.type})
@retention(retentionpolicy.runtime)
@documented
@import(myenableautoconfig.class)
public @interface enablebean {
}

3、實現自己的enableautoconfiguration類

?
1
2
3
4
5
6
public class myenableautoconfig implements importselector{
 @override
 public string[] selectimports(annotationmetadata importingclassmetadata) {
  return new string[]{"com.xhn2.role","com.xhn2.user"};
 }
}

4、編寫啟動類

?
1
2
3
4
5
6
7
8
9
@enablebean
@componentscan("com.xhn2")
public class main {
 public static void main(string[] args) {
  configurableapplicationcontext context = springapplication.run(main.class, args);
  system.out.println(context.getbean(user.class));
  system.out.println(context.getbean(role.class));
 }
}

5、運行結果

com.xhn2.user@496bc455
com.xhn2.role@59402b8f

控制臺成功打印。

代碼示例2,自動裝配第3方jar包的bean

新建maven工程

1、pom.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<modelversion>4.0.0</modelversion>
 
 <groupid>org.csp</groupid>
 <artifactid>hello</artifactid>
 <version>1.0.0</version>
 
 <properties>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
  <project.build.sourceencoding>utf-8</project.build.sourceencoding>
 </properties>
 
 <dependencies>
  <dependency>
  <groupid>org.springframework</groupid>
  <artifactid>spring-context</artifactid>
  <version>4.3.17.release</version>
  </dependency>
 </dependencies>

2、編寫configuration

?
1
2
3
4
5
6
7
@configuration
public class mytest {
 @bean
 public runnable runnable() {
  return ()->{};
 }
}

在resources下新建meta-inf/spring.factories文件,加入以下配置

?
1
org.springframework.boot.autoconfigure.enableautoconfiguration=com.edu.mytest

3、將項目安裝到本地maven倉庫:mvn install

4、主工程引入剛才安裝到本地的jar。

?
1
2
3
4
5
<dependency>
   <groupid>org.csp</groupid>
   <artifactid>hello</artifactid>
   <version>1.0.0</version>
  </dependency>

5、獲取剛才配置的runnable

?
1
2
3
4
5
6
7
8
@springbootapplication
public class main {
 public static void main(string[] args) {
  springapplication application = new springapplication(main.class);
  configurableapplicationcontext context = application.run(args);
  system.out.println(context.getbean(runnable.class));
 }
}

6、控制臺打印

com.edu.mytest$$lambda$153/284686302@2c07545f

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://segmentfault.com/a/1190000015188776

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 午夜私人影院 | 国产精品中文字幕在线观看 | 欧美亚洲精品在线 | 欧美国产精品一区二区三区 | 国产在线观看一区二区 | 一级黄色大片免费观看 | 依人在线| 精品美女 | 久久2| 日韩精品免费在线视频 | 日本久久久久 | 日本不卡视频 | 亚洲成人精品在线观看 | 日本精品在线观看 | 狠狠操夜夜爱 | 欧美黄色网 | 6080yy午夜一二三区久久 | 午夜视频国产 | 国产一级大片 | h视频在线免费观看 | 黄色一级片a | 精品无码久久久久久国产 | 欧美狠狠操 | 国产成年免费视频 | 久久国产成人 | 本道综合精品 | 成人免费小视频 | 91麻豆精品国产91久久久资源速度 | www一区| 国产特黄大片aaaaa毛片 | 少妇精品视频在线观看 | 中文字幕在线观看日本 | 97久久超碰 | 久久精品中文字幕一区二区 | 日日摸夜夜添夜夜添特色大片 | 亚洲国产91 | 这里只有精品视频在线 | 欧美成人性生活 | 亚洲电影在线观看 | 黄网站色 | 亚洲国产成人在线 |