02. Interpretation of Spring's underlying core concepts
AD |
BeanDefinitionBeanDefinitonBeanBeanDefinitionBeanclassBeanscopeBeanBeanlazylnitBeanintMethodNameBeandestroyMethodNameBean.
BeanDefinition
BeanDefinitonBeanBeanDefinitionBean
- classBean
- scopeBeanBean
- lazylnitBean
- intMethodNameBean
- destroyMethodNameBean
- ....... spring

SpringBean
- <bean/>
- @Bean
- @Component(@Service,@Controller)
Bean
BeanBeanDefinition
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);// BeanDefinitionbeanClassUser.classApplicationContextAbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition().getBeanDefintion();context.registerBeanDefinition("user", beanDefinition);System.out.println(context.getBean("user"));
BeanDefinitionBean
beanDefinition.setScope("prototype"); // beanDefinition.setInitMethodName("init"); // beanDefinition.setLazyInit(true); //
<bean/>@Bean@ComponentBeanSpringBeanDefinitionSpring
BeanDefinitionReader
SpringBeanDefinitionBeanDefinitionReaderBeanDefinitionReaderSpringSpringSpring
AnnotatedBeanDefinitionReader
BeanDefinition
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);AnnotatedBeanDefinitionReader annotatedBeanDefinitionReader = new AnnotatedBeanDefinitionReader(context);// User.classBeanDefinitionannotatedBeanDefinitionReader.register(User.class);System.out.println(context.getBean("user"));
@Conditional@Scope@Lazy@Primary@DependsOn@Role@Description
XmlBeanDefinitionReader
<bean/>
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);XmlBeanDefinitionReader xmlBeanDefinitionReader = new XmlBeanDefinitionReader(context);int i = xmlBeanDefinitionReader.loadBeanDefinitions("spring.xml");System.out.println(context.getBean("user"));
ClassPathBeanDefinitionScanner
ClassPathBeanDefinitionScannerBeanDefinitionReader@ComponentBeanDefinition
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();context.refresh();ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(context);scanner.scan("com.zhouyu");System.out.println(context.getBean("userService"));
BeanFactory
BeanFactoryBeanBeanFactoryBeanBeanAPI
ApplicationContextBeanFactorySpring
public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory, MessageSource, ApplicationEventPublisher, ResourcePatternResolver { ...}

JavaApplicationContextListableBeanFactoryHierarchicalBeanFactoryListableBeanFactoryHierarchicalBeanFactoryBeanFactoryApplicationContextBeanFactoryApplicationContextBeanFactoryBeanFactoryApplicationContextBeanFactoryApplicationContextApplicationContextMessageSourceApplicationEventPublisherEnvironmentCapableApplicationContext
SpringnewApplicationContextnewBeanFactoryApplicationContextgetBean()BeanFactorygetBean()
SpringBeanFactory**
DefaultListableBeanFactory**
DefaultListableBeanFactoryApplicationContext
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition();beanDefinition.setBeanClass(User.class);beanFactory.registerBeanDefinition("user", beanDefinition);System.out.println(beanFactory.getBean("user"));
DefaultListableBeanFactory
DefaultListableBeanFactory

- AliasRegistry
- BeanDefinitionRegistryBeanDefinition
- BeanFactoryBeanbeanBean
- SingletonBeanRegistryBean
- SimpleAliasRegistryAliasRegistry
- ListableBeanFactoryBeanFactoryBeanDefinitionbeanNamesbeanNames{Bean}
- HierarchicalBeanFactoryBeanFactoryBeanFactory
- DefaultSingletonBeanRegistrySingletonBeanRegistryBean
- ConfigurableBeanFactoryHierarchicalBeanFactorySingletonBeanRegistryBeanFactorySpring ELBeanFactoryELBeanFactoryBeanPostProcessorBeanFactoryBeanBeanDefinitionBean
- FactoryBeanRegistrySupportFactoryBean
- AutowireCapableBeanFactoryBeanFactoryBeanFactoryBeanBean
- AbstractBeanFactoryConfigurableBeanFactoryFactoryBeanRegistrySupportBeanFactorybeanNames
- ConfigurableListableBeanFactoryListableBeanFactoryAutowireCapableBeanFactoryConfigurableBeanFactory
- AbstractAutowireCapableBeanFactoryAbstractBeanFactoryAutowireCapableBeanFactory
- DefaultListableBeanFactoryAbstractAutowireCapableBeanFactoryConfigurableListableBeanFactoryBeanDefinitionRegistryDefaultListableBeanFactory
ApplicationContext
ApplicationContextBeanFactoryBeanFactory
- HierarchicalBeanFactoryBeanFactory
- ListableBeanFactorybeanNames
- ResourcePatternResolver
- EnvironmentCapable
- ApplicationEventPublisher
- MessageSource
ApplicationContext
- AnnotationConfigApplicationContext
- ClassPathXmlApplicationContext
AnnotationConfigApplicationContext

- ConfigurableApplicationContextApplicationContextBeanFactoryPostProcessorEnvironmentConfigurableListableBeanFactory
- AbstractApplicationContextConfigurableApplicationContext
- GenericApplicationContextAbstractApplicationContextBeanDefinitionRegistryApplicationContextBeanDefinition(DefaultListableBeanFactory beanFactory)
- AnnotationConfigRegistryBeanDefinition**@Configuration****@Bean**
- AnnotationConfigApplicationContextGenericApplicationContextAnnotationConfigRegistry
ClassPathXmlApplicationContext

AbstractApplicationContext
AnnotationConfigApplicationContext
AnnotationConfigApplicationContextBeanDefinition
MessageSource:
@Beanpublic MessageSource messageSource() { ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); messageSource.setBasename("messages"); return messageSource;}
BeanMessageSourceApplicationContext
context.getMessage("test", null, new Locale("en_CN"))
ApplicationContextApplicationContext
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);Resource resource = context.getResource("file:/home/IdeaProjects/spring-framework/src/main/java/com/eemp/entity/User.java");System.out.println(resource.contentLength());
ApplicationContext
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);Resource resource = context.getResource("file:/home/IdeaProjects/spring-framework/src/main/java/com/eemp/entity/UserService.java");System.out.println(resource.contentLength());System.out.println(resource.getFilename());Resource resource1 = context.getResource("https://www.baidu.com");System.out.println(resource1.contentLength());System.out.println(resource1.getURL());Resource resource2 = context.getResource("classpath:spring.xml");System.out.println(resource2.contentLength());System.out.println(resource2.getURL());
Resource[] resources = context.getResources("classpath:com/eemp/*.class");for (Resource resource : resources) { System.out.println(resource.contentLength()); System.out.println(resource.getFilename());}
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);Map<String, Object> systemEnvironment = context.getEnvironment().getSystemEnvironment();System.out.println(systemEnvironment);System.out.println("=======");Map<String, Object> systemProperties = context.getEnvironment().getSystemProperties();System.out.println(systemProperties);System.out.println("=======");MutablePropertySources propertySources = context.getEnvironment().getPropertySources();System.out.println(propertySources);System.out.println("=======");System.out.println(context.getEnvironment().getProperty("NO_PROXY"));System.out.println(context.getEnvironment().getProperty("sun.jnu.encoding"));System.out.println(context.getEnvironment().getProperty("eemp"));
@PropertySource("classpath:spring.properties")
properties.
@Beanpublic ApplicationListener applicationListener() { return new ApplicationListener() { @Override public void onApplicationEvent(ApplicationEvent event) { System.out.println(""); } };}
context.publishEvent("kkk");
SpringStringSpring
PropertyEditor
JDK
public class StringToUserPropertyEditor extends PropertyEditorSupport implements PropertyEditor { @Override public void setAsText(String text) throws IllegalArgumentException { User user = new User(); user.setName(text); this.setValue(user); }}
StringToUserPropertyEditor propertyEditor = new StringToUserPropertyEditor();propertyEditor.setAsText("1");User value = (User) propertyEditor.getValue();System.out.println(value);
SpringPropertyEditor
@Beanpublic CustomEditorConfigurer customEditorConfigurer() { CustomEditorConfigurer customEditorConfigurer = new CustomEditorConfigurer(); Map<Class<?>, Class<? extends PropertyEditor>> propertyEditorMap = new HashMap<>(); // StringToUserPropertyEditorStringUserSpringStringUserPropertyEditor propertyEditorMap.put(User.class, StringToUserPropertyEditor.class); customEditorConfigurer.setCustomEditors(propertyEditorMap); return customEditorConfigurer;}
Bean:
@Componentpublic class UserService { @Value("xxx") private User user; public void test() { System.out.println(user); }}
test
OrderComparator
OrderComparatorSpring@OrderOrdered
public class A implements Ordered { @Override public int getOrder() { return 3; } @Override public String toString() { return this.getClass().getSimpleName(); }}
public class B implements Ordered { @Override public int getOrder() { return 2; } @Override public String toString() { return this.getClass().getSimpleName(); }}
public class Main { public static void main(String[] args) { A a = new A(); // order=3 B b = new B(); // order=2 OrderComparator comparator = new OrderComparator(); System.out.println(comparator.compare(a, b)); // 1 List list = new ArrayList<>(); list.add(a); list.add(b); // order list.sort(comparator); System.out.println(list); // BA }}
SpringOrderComparator
AnnotationAwareOrderComparator@Orderorder
@Order(3)public class A { @Override public String toString() { return this.getClass().getSimpleName(); }}@Order(2)public class B { @Override public String toString() { return this.getClass().getSimpleName(); }}public class Main { public static void main(String[] args) { A a = new A(); // order=3 B b = new B(); // order=2 AnnotationAwareOrderComparator comparator = new AnnotationAwareOrderComparator(); System.out.println(comparator.compare(a, b)); // 1 List list = new ArrayList<>(); list.add(a); list.add(b); // order list.sort(comparator); System.out.println(list); // BA }}
BeanPostProcessor
BeanPostProcessBenaBeanPostProcessorBeanPostProcessor
@Componentpublic class MyBeanPostProcessor implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { if ("userService".equals(beanName)) { System.out.println(""); } return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { if ("userService".equals(beanName)) { System.out.println(""); } return bean; }}
BeanPostProcessorBeanbeanNameBeanBean
BeanPostProcessorSpringBean
BeanFactoryPostProcessor
BeanFactoryPostProcessorBeanBeanPostProcessorBeanPostProcessorBeanBeanFactoryPostProcessorBeanFactoryBeanFactoryPostProcessor
@Componentpublic class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor { @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { System.out.println("beanFactory"); }}
postProcessBeanFactory()BeanFactory
FactoryBean
BeanPostPorcessorSpringBeanBeanFactoryBean
@Componentpublic class MyFactoryBean implements FactoryBean { @Override public Object getObject() throws Exception { UserService userService = new UserService(); return userService; } @Override public Class<?> getObjectType() { return UserService.class; }}
UserServiceBeanUserServiceBeanSpring
@BeanBeanFactoryBean@BeanBeanBean
ExcludeFilterIncludeFilter
FilterSpringExcludeFilterIncludeFilter
com.eempUserService@ComponentBean
@ComponentScan(value = "com.eemp", excludeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = UserService.class)})public class AppConfig {}
UserService@ComponentBean
@ComponentScan(value = "com.eemp", includeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = UserService.class)})public class AppConfig {}
FilterType
- ANNOTATION
- ASSIGNABLE_TYPE
- ASPECTJAspectj
- REGEX
- CUSTOM
SpringAnnotationTypeFilterincludeFiltersSpring@ComponentBean
MetadataReaderClassMetadataAnnotationMetadata
SpringSpring
MetadataReaderSimpleMetadataReader
public class Test { public static void main(String[] args) throws IOException { SimpleMetadataReaderFactory simpleMetadataReaderFactory = new SimpleMetadataReaderFactory(); // MetadataReader MetadataReader metadataReader = simpleMetadataReaderFactory.getMetadataReader("com.eemp.service.UserService"); // ClassMetadata ClassMetadata classMetadata = metadataReader.getClassMetadata(); System.out.println(classMetadata.getClassName()); // AnnotationMetadata AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata(); for (String annotationType : annotationMetadata.getAnnotationTypes()) { System.out.println(annotationType); } }}
SimpleMetadataReaderASM
ASMSpringSpringJVMASM
Disclaimer: The content of this article is sourced from the internet. The copyright of the text, images, and other materials belongs to the original author. The platform reprints the materials for the purpose of conveying more information. The content of the article is for reference and learning only, and should not be used for commercial purposes. If it infringes on your legitimate rights and interests, please contact us promptly and we will handle it as soon as possible! We respect copyright and are committed to protecting it. Thank you for sharing.(Email:[email protected])
Mobile advertising space rental |
Tag: Interpretation of Spring underlying core concepts
Still struggling? A clear understanding of the difference between C language and C++language in one article
NextThe 2022 Nobel Prize in Physics actually proves that our universe is not real?
Guess you like
-
Pinduoduo's "Trillion-Yuan Support" Plan: A Three-Year, 100 Billion Yuan Investment to Build a Multi-Win Business EcosystemDetail
2025-04-03 14:41:29 11
-
Huyu Xianxiang and AVIC Optoelectronics Institute Forge Strategic Partnership to Shape China's eVTOL Avionics LandscapeDetail
2025-04-02 18:39:02 1
-
Haier Smart Home's 8th Global R&D Innovation Awards: Illuminating Better Lives with Technology, Achieving User SatisfactionDetail
2025-04-02 15:57:33 21
-
Huawei's 2025 China Digital Power Partner Conference: Carbon-Neutral Path for China, Shared Value CreationDetail
2025-03-31 18:57:09 11
-
OPPO Think Tank: A New Paradigm for Chinese Enterprises' Globalization From Wusha Village to the Global High-End MarketDetail
2025-03-31 18:48:21 1
-
ICLR 2025: Chinese Universities and Companies Showcase AI Prowess with Numerous Accepted Papers; Stanford-HKUST Collaboration Achieves Perfect ScoreDetail
2025-03-31 14:54:45 11
-
Huawei HarmonyOS Smart Home Partner Summit: Deep Dive into Spatial Intelligence Transformation and Ecosystem Development StrategyDetail
2025-03-31 13:01:45 1
-
AI Large Models Drive Innovation in Humanoid Robots and Autonomous Driving: 2025 as a Key MilestoneDetail
2025-03-31 13:00:04 1
-
Eight Cities Pilot Credit Supervision Data Openness, Empowering Micro and Small Enterprises with Mobile Payment PlatformsDetail
2025-03-26 09:32:47 1
-
Xiaomi's "Just a Little Profit": The Deep Logic and Sustainability Behind its Low-Margin StrategyDetail
2025-03-25 15:07:32 21
- Detail
-
The Ninth Huawei ICT Competition China Challenge Finals Conclude Successfully: Kunpeng and Ascend Tracks Crown Their ChampionsDetail
2025-03-24 16:26:03 11
-
Ronshen Sugar Cube Refrigerator: The Official Product of the 2025 FIFA Club World Cup, Ushering in a New Era of Healthy Food PreservationDetail
2025-03-24 15:40:35 21
-
Zhihu Launches New Version of Zhihu Straight Answer: Deep Integration of AI and Community to Enhance Professionalism and CredibilityDetail
2025-03-24 14:04:38 1
-
China Construction Ninth Harmony (Zhongjian Jiuhe) and Huawei HarmonyOS Smart Home Deepen Strategic Partnership at AWE2025, Building a Green and Intelligent Future HomeDetail
2025-03-23 15:21:15 41
-
ZuoYeBang Books Leads the New Trend in Intelligent Education Publishing at Changsha Book FairDetail
2025-03-21 15:15:33 1
-
Tianyancha: Shielding Consumer Safety and Reshaping Business Trust with DataDetail
2025-03-21 08:47:58 1
-
Hisense at AWE2025: AI Empowerment, Leading the Transformation of Future Smart LivingDetail
2025-03-20 18:24:11 11
-
Haier TV Makes a Stunning Debut at AWE 2024: Zhiyuan AI Large Model and PureScene Care Screen Usher in a New Era of Smart HomesDetail
2025-03-20 15:17:20 1
-
China Power's Xin Yuan Zhi Chu (New Source Smart Storage): Open Energy Intelligence Computing Center Leads Intelligent Transformation of the Energy IndustryDetail
2025-03-20 15:15:39 1