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 – 裝配BeanSpringBean
- 二、Spring裝配BeanSpringBean
- Spring裝配Bean(四)SpringBean
- Spring裝配Bean(一)SpringBean
- Spring裝配Bean(二)SpringBean
- Spring - 高階裝配Spring
- Spring – 高階裝配Spring
- Spring自動裝配BeansSpringBean
- 自動裝配【Spring autowire】Spring
- Spring 自動裝配AutoWireSpring
- Spring實戰:裝配bean-自動化裝配beanSpringBean
- Spring IOC 一——Spring容器裝配BeanSpringBean
- Spring Boot 自動裝配原理Spring Boot
- Spring IOC容器-自動裝配Spring
- 2、spring注入及自動裝配Spring
- 初識Spring —— Bean的裝配(二)SpringBean
- 初識Spring —— Bean的裝配(一)SpringBean
- Spring裝配Bean(七) Spring的執行時注入SpringBean
- Spring Framework 條件裝配 之 @ConditionalSpringFramework
- Spring-04 Bean的自動裝配SpringBean
- Spring裝配Bean(六)Bean的作用域SpringBean
- Spring入門(二):自動化裝配beanSpringBean
- Spring9:Autowire(自動裝配)機制Spring
- Spring學習(二):3個裝配bean方式SpringBean
- Spring高階裝配之執行時注入Spring
- Spring@Autowired註解與自動裝配Spring
- 深入理解Spring框架的自動裝配原理Spring框架
- Spring 新手教程(三) 注入和自己主動裝配Spring
- spring自動裝配與spring_bean之間的關係(二)SpringBean
- Spring入門(三):通過JavaConfig裝配beanSpringJavaBean
- Spring入門(八):自動裝配的歧義性Spring
- Spring MVC 基本配製SpringMVC
- Spring框架使用@Autowired自動裝配引發的討論Spring框架
- 徹底搞明白Spring中的自動裝配和AutowiredSpring
- 深度剖析Spring Boot自動裝配機制實現原理Spring Boot
- Spring學習筆記二: Bean裝配及生命週期Spring筆記Bean