日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

springboot 获取bean_SpringBoot高级(自动配置 事件监听 监控)

發布時間:2023/12/15 javascript 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springboot 获取bean_SpringBoot高级(自动配置 事件监听 监控) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SpringBoot自動配置

condition-1

Condition是Spring4.0后引入的條件化配置接口,通過實現Condition接口可以完成有條件的加載相應的Bean

@Conditional要配和Condition的實現類(ClassCondition)進行使用

  • ClassCondition
public?class?ClassCondition?implements?Condition?{????/**?????*?????*?@param context 上下文對象。用于獲取環境,IOC容器,ClassLoader對象?????*?@param metadata 注解元對象。?可以用于獲取注解定義的屬性值?????*?@return?????*/????@Override????public?boolean?matches(ConditionContext?context,?AnnotatedTypeMetadata?metadata)?{??????????????//1.需求:?導入Jedis坐標后創建Bean????????//思路:判斷redis.clients.jedis.Jedis.class文件是否存在????????boolean?flag?=?true;????????try?{????????????Class>?cls?=?Class.forName("redis.clients.jedis.Jedis");????????}?catch?(ClassNotFoundException?e)?{????????????flag?=?false;????????}????????return?flag;??????????}}

UserConfig

@Configurationpublic?class?UserConfig?{????@Bean????@Conditional(ClassCondition.class)????public?User?user(){????????return?new?User();????}}

測試

@SpringBootApplicationpublic?class?SpringbootConditionApplication?{????public?static?void?main(String[]?args)?{????????//啟動SpringBoot的應用,返回Spring的IOC容器????????ConfigurableApplicationContext?context?=?SpringApplication.run(SpringbootConditionApplication.class,?args);????????Object?user?=?context.getBean("user");????????System.out.println(user);????}}

依賴

????????????????????redis.clients????????????jedis????????

這一段是判斷jedis這個依賴要有沒有來決定是否生成對應的bean對象,需要實現Condition接口,重寫mathes方法,返回false則不創建對象,在這個user對象上加入注解@Conditioal(xxx.class)來實現判斷。

Condition-2

需求:將類的判斷定義為動態的。判斷哪個字節碼文件存在可以動態指定。

自定義條件注解類

import?org.springframework.context.annotation.Conditional;import?java.lang.annotation.*;@Target({ElementType.TYPE,?ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documented@Conditional(ClassCondition.class)public?@interface?ConditionOnClass?{????String[]?value();}

**注意:**此處@ConditionOnClass為自定義注解

@Configurationpublic?class?UserConfig?{????@Bean????//@Conditional(ClassCondition.class)????@ConditionOnClass("com.alibaba.fastjson.JSON")????public?User?user(){????????return?new?User();????}????@Bean????@ConditionalOnProperty(name?=?"itcast",havingValue?=?"ii")????public?User?user2(){????????return?new?User();????}}

測試User對象的創建

@SpringBootApplicationpublic?class?SpringbootConditionApplication?{????public?static?void?main(String[]?args)?{????????//啟動SpringBoot的應用,返回Spring的IOC容器????????ConfigurableApplicationContext?context?=?SpringApplication.run(SpringbootConditionApplication.class,?args);????????Object?user?=?context.getBean("user");????????System.out.println(user);????}}
  • 自定義注解其實是對原來注解的封裝
  • @ConditionalOnProperty是看配置文件中是否存在一個這樣的鍵值對,如果有則創建、
    -執行順序:
    @ConditionOnClass的value值,找到依賴和自定義注解類,通過自定義注解類上的class找到具體要執行的代碼,決定是否生成bean對象。

查看條件注解源碼


SpringBoot 提供的常用條件注解:

ConditionalOnProperty:判斷配置文件中是否有對應屬性和值才初始化Bean

ConditionalOnClass:判斷環境中是否有對應字節碼文件才初始化Bean

ConditionalOnMissingBean:判斷環境中沒有對應Bean才初始化Bean

SpringBoot自動配置-切換內置web服務器

查看繼承關系圖

排除Tomcat


pom文件中的排除依賴效果

?????????????org.springframework.boot????????????spring-boot-starter-web????????????????????????????????????????????????????????????spring-boot-starter-tomcat????????????????????org.springframework.boot????????????????????????????????????????????????????????????????spring-boot-starter-jetty????????????org.springframework.boot????????

SpringBoot自動配置-Enable注解原理

SpringBoot不能直接獲取在其他工程中定義的Bean

演示代碼:

springboot-enable工程

/**?*?@ComponentScan 掃描范圍:當前引導類所在包及其子包?*?*?com.itheima.springbootenable?*?com.itheima.config?*?//1.使用@ComponentScan掃描com.itheima.config包?*?//2.可以使用@Import注解,加載類。這些類都會被Spring創建,并放入IOC容器?*?//3.可以對Import注解進行封裝。?*///@ComponentScan("com.itheima.config")//@Import(UserConfig.class)@EnableUser@SpringBootApplicationpublic?class?SpringbootEnableApplication?{????public?static?void?main(String[]?args)?{????????ConfigurableApplicationContext?context?=?SpringApplication.run(SpringbootEnableApplication.class,?args);?????//獲取Bean????????Object?user?=?context.getBean("user");????????System.out.println(user);?}}

pom中引入springboot-enable-other

???????????????com.itheima??????????springboot-enable-other????????????0.0.1-SNAPSHOT??????

springboot-enable-other工程

UserConfig

@Configurationpublic?class?UserConfig?{????@Bean??public?User?user()?{????????return?new?User();??}}

EnableUser注解類

import?org.springframework.context.annotation.Import;import?java.lang.annotation.*;@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Import(UserConfig.class)public?@interface?EnableUser?{

myImportSelector

?public?class?MyImportSelector?implements?ImportSelector?{??????@Override??????public?String[]?selectImports(AnnotationMetadata?importingClassMetadata)?{??????????return?new?String[]{"com.itheima.domain.User",?"com.itheima.domain.Role"};??????}??}

ImportBeanDefinitionRegistrar 實現類

public?class?MyImportBeanDefinitionRegistrar?implements?ImportBeanDefinitionRegistrar?{????@Override????public?void?registerBeanDefinitions(AnnotationMetadata?importingClassMetadata,?BeanDefinitionRegistry?registry)?{????????AbstractBeanDefinition?beanDefinition?=?BeanDefinitionBuilder.rootBeanDefinition(User.class).getBeanDefinition();????????registry.registerBeanDefinition("user",?beanDefinition);????}}


Import4中用法:

1.導入Bean

  • 2.導入配置類
  • 3.導入ImportSelector的實現類。
  • 4.導入ImportBeanDefinitionRegistrar實現類

自定義依賴

SpringBoot事件監聽

Java中的事件監聽機制定義了以下幾個角色:

①事件:Event,繼承 java.util.EventObject 類的對象

②事件源:Source ,任意對象Object

③監聽器:Listener,實現 java.util.EventListener 接口 的對象

SpringBoot 在項目啟動時,會對幾個監聽器進行回調,我們可以實現這些監聽器接口,在項目啟動時完成一些操作。

  • ApplicationContextInitializer、
  • SpringApplicationRunListener、
  • CommandLineRunner、
  • ApplicationRunner自定義監聽器的啟動時機:MyApplicationRunner和MyCommandLineRunner都是當項目啟動后執行,使用@Component放入容器即可使用

MyApplicationRunner

/**?*?當項目啟動后執行run方法。?*/@Componentpublic?class?MyApplicationRunner?implements?ApplicationRunner?{????@Override????public?void?run(ApplicationArguments?args)?throws?Exception?{????????System.out.println("ApplicationRunner...run");????????System.out.println(Arrays.asList(args.getSourceArgs()));????}}?

MyCommandLineRunner

@Componentpublic?class?MyCommandLineRunner?implements?CommandLineRunner?{????@Override????public?void?run(String...?args)?throws?Exception?{????????System.out.println("CommandLineRunner...run");????????System.out.println(Arrays.asList(args));????}}

MyApplicationContextInitializer的使用要在resource文件夾下添加META-INF/spring.factories

org.springframework.context.ApplicationContextInitializer=com.itheima.springbootlistener.listener.MyApplicationContextInitializer@Componentpublic?class?MyApplicationContextInitializer?implements?ApplicationContextInitializer?{????@Override????public?void?initialize(ConfigurableApplicationContext?applicationContext)?{????????System.out.println("ApplicationContextInitializer....initialize");????}}

MySpringApplicationRunListener的使用要添加構造器(最屌)

public?class?MySpringApplicationRunListener?implements?SpringApplicationRunListener?{????public?MySpringApplicationRunListener(SpringApplication?application,?String[]?args)?{????}????@Override????public?void?starting()?{????????System.out.println("starting...項目啟動中");????}????@Override????public?void?environmentPrepared(ConfigurableEnvironment?environment)?{????????System.out.println("environmentPrepared...環境對象開始準備");????}????@Override????public?void?contextPrepared(ConfigurableApplicationContext?context)?{????????System.out.println("contextPrepared...上下文對象開始準備");????}????@Override????public?void?contextLoaded(ConfigurableApplicationContext?context)?{????????System.out.println("contextLoaded...上下文對象開始加載");????}????@Override????public?void?started(ConfigurableApplicationContext?context)?{????????System.out.println("started...上下文對象加載完成");????}????@Override????public?void?running(ConfigurableApplicationContext?context)?{????????System.out.println("running...項目啟動完成,開始運行");????}????@Override????public?void?failed(ConfigurableApplicationContext?context,?Throwable?exception)?{????????System.out.println("failed...項目啟動失敗");????}}

Springboot Admin圖形化管理平臺


以后可以server打成jar包,然后其他服務通過端口去綁定注冊

Springboot 部署

部署有兩個方式
1.通過maven或者命令直接打成jar包,通過cmd,直接運行jar包即可
2.通過war包啟動,pom.xml里加入war,主文件繼承SpringBootServletInitializer,重寫方法,即可

SpringBoot流程分析

初始化

  • 配置啟動引導類(判斷是否有啟動主類)
  • 判斷是否是Web環境
  • 獲取初始化類、監聽器類

  • run

  • 啟動計時器
  • 執行監聽器
  • 準備環境
  • 打印banner:可以resource下粘貼自定義的banner
  • 5.創建context

  • refreshContext(context);
  • 執行refreshContext方法后才真正創建Bean
  • 最后給個banner

    1

    ${AnsiColor.BRIGHT_GREEN}$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$${AnsiColor.BRIGHT_YELLOW}$$????????????????????????????????_.ooOoo._???????????????????????????????$$${AnsiColor.BRIGHT_RED}$$???????????????????????????????o888888888o??????????????????????????????$$${AnsiColor.BRIGHT_CYAN}$$???????????????????????????????88"??.??"88??????????????????????????????$$${AnsiColor.BRIGHT_MAGENTA}$$???????????????????????????????(|??^_^??|)??????????????????????????????$$${AnsiColor.BRIGHT_GREEN}$$???????????????????????????????O???=???/O??????????????????????????????$$${AnsiColor.BRIGHT_RED}$$????????????????????????????____/`-----'____???????????????????????????$$${AnsiColor.BRIGHT_CYAN}$$??????????????????????????.'??|???????|$$??`.?????????????????????????$$${AnsiColor.BRIGHT_MAGENTA}$$?????????????????????????/??|||???:???|||$$??????????????????????????$$${AnsiColor.BRIGHT_GREEN}$$????????????????????????/??_|||||??-:-??|||||-?????????????????????????$$${AnsiColor.BRIGHT_YELLOW}$$????????????????????????|???|????-???$$/?|???|???????????????????????$$${AnsiColor.BRIGHT_GREEN}$$????????????????????????|?_|??''-----/''??|???|???????????????????????$$${AnsiColor.BRIGHT_YELLOW}$$??????????????????????????.-___??`-`??____/-.?/???????????????????????$$${AnsiColor.BRIGHT_CYAN}$$??????????????????????___`.?.'???/--.--???`.?.?___?????????????????????$$${AnsiColor.BRIGHT_RED}$$????????????????????.""?'_/____.'??>'"".??????????????????$$${AnsiColor.BRIGHT_GREEN}$$??????????????????|?|?:??`-?`.;`.?_?/``;.`/?-?`?:?|?|?????????????????$$${AnsiColor.BRIGHT_YELLOW}$$?????????????????????`-.???_?___?/___?_/???.-`?/??/?????????????????$$${AnsiColor.BRIGHT_CYAN}$$????????????========`-.____`-._________/____.-`____.-'========?????????$$${AnsiColor.BRIGHT_MAGENTA}$$??????????????????????????????????`=---='???????????????????????????????$$${AnsiColor.BRIGHT_YELLOW}$$????????????^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^????????$$${AnsiColor.BRIGHT_GREEN}$$?????????????????????佛祖保佑??????????永無BUG?????????永不修改?????????$$${AnsiColor.BRIGHT_YELLOW}$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$${AnsiColor.BRIGHT_YELLOW}

    2

    ${AnsiColor.BRIGHT_GREEN}/***${AnsiColor.BRIGHT_YELLOW}*??????┌─┐???????┌─┐?+?+${AnsiColor.BRIGHT_GREEN}?*???┌──┘?┴───────┘?┴──┐++${AnsiColor.BRIGHT_YELLOW}?*???│?????????????????│${AnsiColor.BRIGHT_YELLOW}?*???│???????───???????│++?+?+?+${AnsiColor.BRIGHT_BLACK}?*???███████───███████?│+${AnsiColor.BRIGHT_GREEN}?*???│?????????????????│+?*???│???????─┴─???????│?*???│?????????????????│?*???└───┐?????????┌───┘?${AnsiColor.BRIGHT_GREEN}*???????│?????????│?*???????│?????????│???+?+?*???????│?????????│?*???????│?????????└──────────────┐?*???????│????????????????????????│?*???????│????????????????????????├─┐?*???????│????????????????????????┌─┘?*???????│????????????????????????│?*???????└─┐??┐??┌───────┬──┐??┌──┘??+?+?+?+?*?????????│?─┤?─┤???????│?─┤?─┤?*?????????└──┴──┘???????└──┴──┘??+?+?+?+?*????????????????神獸保佑?*???????????????代碼無BUG!?*/

    版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

    本文鏈接:

    http://blog.csdn.net/m0_46690280/article/details/108567548

    總結

    以上是生活随笔為你收集整理的springboot 获取bean_SpringBoot高级(自动配置 事件监听 监控)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。