1. 程式人生 > 其它 >SpringBoot2核心技術與響應式程式設計——容器功能

SpringBoot2核心技術與響應式程式設計——容器功能

1、元件新增

1.1、@Configuration

  • 基本使用
  • Full模式與Lite模式
    • 示例
    • 實踐
      • 配置類元件之間無依賴關係用Lite模式加速容器啟動過程,減少判斷。
      • 配置類元件之間有依賴關係,方法會被呼叫得到之前單例項元件,用Full模式

配置類:

 1 /**
 2  * 1. @Configuration 告訴SpringBoot這是一個配置類
 3  * 2. @Bean 配置類中使用@Bean標註在方法上給容器註冊元件,預設為單例項
 4  * 3. proxyBeanMethods:代理Bean方法
 5  *     3.1 Full(proxyBeanMethods = true) 保證每個@Bean方法被呼叫多少次返回的元件都是單例項的
6 * 3.2 Lite(proxyBeanMethods = false) 每個@Bean方法被呼叫多少次返回的元件都是新建立的 7 * 元件依賴必須使用Full模式。其他預設是否則使用Lite模式 8 * 4.適用場景 9 * 4.1 元件依賴 10 */ 11 @Configuration(proxyBeanMethods = true) 12 public class MyConfig { 13 14 /** 15 * @Bean 向容器中新增元件,以方法名作為元件id,返回型別為元件型別,返回的值,就是元件在容器中的例項 16
* 外部無論對配置類中的這個元件註冊方法註冊多少遍,獲取的都是之前註冊到容器中的單例項 17 * @return 18 */ 19 @Bean 20 public User userA(){ 21 return new User("zhangsan", 3); 22 } 23 24 @Bean("tom") 25 public Pet tomcatPet() { 26 return new Pet("tomcat"); 27 } 28 }

配置類測試

/**
 * 稱為主程式類
 * 告訴SpringBoot這是一個SpringBoot應用
 
*/ @SpringBootApplication public class MainApplication { public static void main(String[] args) { //1.返回IOC容器 ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args); //2.檢視容器裡的元件 String[] beanDefinitionNames = run.getBeanDefinitionNames(); for (String beanDefinitionName : beanDefinitionNames) { System.out.println("元件名稱: " + beanDefinitionName); } //3.從容器中獲取元件 Pet tom01 = run.getBean("tom", Pet.class); Pet tom02 = run.getBean("tom", Pet.class); System.out.println("tom01等於tom02嗎? " + (tom01 == tom02)); //4. cn.mxz.boot.config.MyConfig$$EnhancerBySpringCGLIB$$b24b3179@1d8e2eea MyConfig bean = run.getBean(MyConfig.class); System.out.println("MyConfig元件: " + bean); /** * 1.如果@Configuration(proxyBeanMethods = true)代理物件呼叫方法,SpringBoot總會檢查這個元件是否已經存在於容器中, * 要保持元件的單例項 */ User user = bean.userA(); User user1 = bean.userA(); System.out.println("user等於user1嗎? " + (user == user1)); } } ======控制檯輸出====== ...... 元件名稱: org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration 元件名稱: characterEncodingFilter 元件名稱: localeCharsetMappingsCustomizer 元件名稱: org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration 元件名稱: multipartConfigElement 元件名稱: multipartResolver 元件名稱: spring.servlet.multipart-org.springframework.boot.autoconfigure.web.servlet.MultipartProperties 元件名稱: org.springframework.aop.config.internalAutoProxyCreator tom01等於tom02嗎? true MyConfig元件: cn.mxz.boot.config.MyConfig$$EnhancerBySpringCGLIB$$b24b3179@1d8e2eea user等於user1嗎? true

======未完待續======