Spring5原始碼 - Spring IOC 註解複習
文章目錄
Pre
為了更好地學習原始碼,我們有必要對基礎知識進行一次簡單的複習,只有在知道如何使用的基礎上,再去閱讀原始碼才能明白spring這些原始碼是對哪些功能的支援。
這裡簡單的梳理一下
xml配置檔案
【配置檔案 】
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="artisan" class="com.artisan.base.Artisan"/>
</beans>
【讀取Bean】
ClassPathXmlApplicationContext cx = new ClassPathXmlApplicationContext("classpath:spring.xml");
System.out.println(cx.getBean("artisan").getClass().getSimpleName());
}
【輸出】
JavaConfig
【POJO】
public class Bean1 {
}
【配置檔案 】
@Configuration
public class MainConfig {
@Bean
public Bean1 bean1(){
return new Bean1();
}
}
【讀取Bean— 傳入配置類】
public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(MainConfig.class);
System.out.println(ac.getBean("bean1"));
}
@Bean的形式, bean的預設名稱是方法名,若@Bean(value=“bean的名稱”) ,那麼bean的名稱是指定的名稱。
【測試結果】
@CompentScan
在配置類上寫@CompentScan註解來進行包掃描
【配置類】
package com.artisan.base.componentscan.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("com.artisan.base.componentscan")
public class CSMainConfig {
}
【c - s -d 】
package com.artisan.base.componentscan.controller;
import org.springframework.stereotype.Controller;
@Controller
public class ArtisanInfoController {
}
package com.artisan.base.componentscan.service;
import org.springframework.stereotype.Service;
@Service
public class ArtisanService {
}
package com.artisan.base.componentscan.dao;
import org.springframework.stereotype.Repository;
@Repository
public class ArtisanDao {
}
【測試類】
package com.artisan.base.componentscan;
import com.artisan.base.componentscan.config.CSMainConfig;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class CMTest {
public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(CSMainConfig.class);
// 輸出 單例池中的單例bean的名字
for (String beanDefinitionName : ac.getBeanDefinitionNames()) {
System.out.println("bdName:" + beanDefinitionName);
}
}
}
【輸出】
excludeFilters
【配置類】
import com.artisan.base.componentscan.service.ArtisanService;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Controller;
@Configuration
@ComponentScan(
basePackages = {"com.artisan.base.componentscan"},
excludeFilters = {
@ComponentScan.Filter(type = FilterType.ANNOTATION,value = {Controller.class}),
@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,value = {ArtisanService.class})
})
public class CSMainConfig {
}
重點配置
@ComponentScan(
basePackages = {"com.artisan.base.componentscan"},
excludeFilters = {
@ComponentScan.Filter(type = FilterType.ANNOTATION,value = {Controller.class}),
@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,value = {ArtisanService.class})
})
excludeFilters(排除@Controller註解的,和ArtisanService的)
【測試結果】
includeFilters
@Configuration
@ComponentScan(
basePackages = {"com.artisan.base.componentscan"},
includeFilters =
{@ComponentScan.Filter(type = FilterType.ANNOTATION, value = {Controller.class})},
useDefaultFilters = false)、
public class CSMainConfig {
}
若使用包含的用法, 需要把useDefaultFilters屬性設定為false(true表示掃描全部的)
【測試結果】
@ComponentScan.Filter type的型別
相關文章
- Spring的IOC常用註解(含原始碼)Spring原始碼
- Spring5原始碼深度解析(一)之理解Configuration註解Spring原始碼
- Spring5原始碼深度分析(二)之理解@Conditional,@Import註解Spring原始碼Import
- 2.2 spring5原始碼 -- ioc載入的整體流程Spring原始碼
- Spring5原始碼解析_IOC之容器的基本實現Spring原始碼
- Spring5原始碼解析系列一——IoC容器核心類圖Spring原始碼
- Spring:原始碼解讀Spring IOC原理Spring原始碼
- Spring5(七)——AOP註解Spring
- Spring Ioc原始碼分析系列--@Autowired註解的實現原理Spring原始碼
- spring5原始碼-ioc抽象層次設計 與 aop流程理解Spring原始碼抽象
- 5.1 Spring5原始碼--Spring AOP原始碼分析一Spring原始碼
- 5.2 Spring5原始碼--Spring AOP原始碼分析二Spring原始碼
- Spring IoC 公共註解詳解Spring
- Spring原始碼學習之路---IOC初探(二)Spring原始碼
- 5.2 spring5原始碼--spring AOP原始碼分析三---切面原始碼分析Spring原始碼
- spring-IOC容器原始碼分析(二)BeanDefinition註冊流程Spring原始碼Bean
- Spring學習筆記2(IOC註解方式&AOP)Spring筆記
- Spring IOC 常用註解與使用Spring
- spring原始碼解析之IOC容器(二)------載入和註冊Spring原始碼
- 學習Spring5必知必會(4)~使用註解配置、使用java程式碼配置SpringJava
- 【spring 原始碼】IOC 之 ClassPathXmlApplicationContextSpring原始碼XMLAPPContext
- 5.2 spring5原始碼--spring AOP原始碼分析二--切面的配置方式Spring原始碼
- Spring基於註解的IoC配置Spring
- Spring原始碼系列:註解說明Spring原始碼
- Spring原始碼之IOC(一)BeanDefinition原始碼解析Spring原始碼Bean
- 《spring原始碼解讀》 - IoC 之解析 import 標籤Spring原始碼Import
- 深入淺出解讀 Spring 原始碼:IOC/AOP 篇Spring原始碼
- Spring原始碼分析之IoC(一)Spring原始碼
- Spring原始碼分析之IoC(二)Spring原始碼
- Spring-IOC原始碼淺析Spring原始碼
- 5.3 Spring5原始碼--Spring AOP使用介面方式實現Spring原始碼
- Spring IOC原始碼深度剖析:Spring IoC迴圈依賴問題Spring原始碼
- Spring原始碼深度解析(郝佳)-學習-原始碼解析-基於註解注入(二)Spring原始碼
- Spring原始碼解讀(1)-IOC容器BeanDefinition的載入Spring原始碼Bean
- Spring @Profile註解使用和原始碼解析Spring原始碼
- Spring原始碼剖析1:初探Spring IOC核心流程Spring原始碼
- Spring原始碼剖析2:初探Spring IOC核心流程Spring原始碼
- 手寫Spring ioc 框架,狠狠的“Spring 原始碼Spring框架原始碼