spring裝配
spring從一定層面上講是Bean容器,那麼它是怎麼實現Bean的裝配,這塊對於理解springBoot自動裝配有很大幫助。這裡說的裝配,我指的是基於註解/程式碼的方式,畢竟現在開發都是註解先行,至於xml方式就不討論了。
方式
- 模式註解
@Component
等(Spring2.5+) - 配置類
@Configuration
與@Bean
(Spring3.0+) - 模組裝配
@EnableXXX
與@Import
(Spring3.1+)
模式註解
使用它在我們日常開發中很常見,@Component
、@Service、
@Repository 等。但是它又個天然的缺陷,只能在我們自己寫的程式碼中,對於jar包中元件,無能為力。
配置類
@Configuration
與 @Bean
方式,這種方式我們在開發中也經常使用,例如配置資料來源,一些中介軟體。但是它也有個天然的缺點,配置一多,類就顯得很臃腫,編碼和修改成本都比價高。
模組裝配
這是個殺手鐗,特別對於需要裝配較多的bean到容器,一般它的套路是:@Enablexxx、@Import 註解來完成。
- 元註解@EnableBean
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Import(User.class)
public @interface EnableBean {
}
- 實體
@Data
public class Order {
private Integer id;
private Integer userId;
private Integer productId;
private BigDecimal amount;
public Order() {
System.out.println("order init ...");
}
}
@Data
public class User {
private Integer id;
private String name;
public User() {
System.out.println("user init ...");
}
}
- 配置類
@Configuration
@EnableBean
public class Config {
}
- 啟動容器
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class);
String[] beanDefinitionNames = ctx.getBeanDefinitionNames();
Stream.of(beanDefinitionNames).forEach(System.out::println);
}
- 列印的日誌
user init ...
10:38:50.701 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'com.hf.astilt.normal.Orange'
10:38:50.702 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'com.hf.astilt.normal.Order'
order init ...
10:38:50.710 [main] DEBUG org.springframework.core.env.PropertySourcesPropertyResolver - Found key 'spring.liveBeansView.mbeanDomain' in PropertySource 'systemProperties' with value of type String
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
config
com.hf.astilt.normal.User
com.hf.astilt.normal.Orange
com.hf.astilt.normal.Order
可以看到spring啟動後,列印出了我配置的幾個類,是不是簡單很多。
相關文章
- Spring bean 裝配SpringBean
- Spring裝配Bean(四)SpringBean
- Spring裝配Bean(一)SpringBean
- Spring裝配Bean(二)SpringBean
- 二、Spring裝配BeanSpringBean
- Spring IOC 一——Spring容器裝配BeanSpringBean
- Spring自動裝配BeansSpringBean
- Spring Boot 自動裝配原理Spring Boot
- 初識Spring —— Bean的裝配(一)SpringBean
- 初識Spring —— Bean的裝配(二)SpringBean
- Spring Framework 條件裝配 之 @ConditionalSpringFramework
- 2、spring注入及自動裝配Spring
- Spring裝配Bean(七) Spring的執行時注入SpringBean
- Spring裝配Bean(六)Bean的作用域SpringBean
- Spring-04 Bean的自動裝配SpringBean
- Spring入門(二):自動化裝配beanSpringBean
- Spring入門(三):通過JavaConfig裝配beanSpringJavaBean
- 深入理解Spring框架的自動裝配原理Spring框架
- Spring入門(八):自動裝配的歧義性Spring
- 徹底搞明白Spring中的自動裝配和AutowiredSpring
- Spring框架使用@Autowired自動裝配引發的討論Spring框架
- 深度剖析Spring Boot自動裝配機制實現原理Spring Boot
- 裝置適配
- Spring 框架基礎(02):Bean的生命週期,作用域,裝配總結Spring框架Bean
- SpringBoot - 自動裝配Spring Boot
- springboot 條件裝配Spring Boot
- Spring裝配Bean(五)profile註解和解決自動注入的歧義性SpringBean
- Spring Boot 基礎: 使用 `@ConfigurationProperties` 實現自定義屬性的自動裝配Spring Boot
- springboot之自動裝配Spring Boot
- bean 的自動裝配Bean
- centos安裝後配網CentOS
- springboot自動裝配(1)---@SpringBootApplication註解怎麼自動裝配各種元件Spring BootAPP元件
- 【面試普通人VS高手系列】Spring Boot中自動裝配機制的原理面試Spring Boot
- SpringBoot(14)—註解裝配BeanSpring BootBean
- SpringBoot自動裝配原理分析Spring Boot
- SpringBoot系列--自動裝配原理Spring Boot
- 淺嘗Spring註解開發_自定義註冊元件、屬性賦值、自動裝配Spring元件賦值
- SpringBoot自動裝配-原始碼分析Spring Boot原始碼