1.applicationcontext的父接口
2.是Spring的核心容器
表面只有getBean,但实现类默默发挥了巨大作用
1.管理所有bean
2.控制反转
3.基本的依赖注入
- package org.example;
-
-
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
- import org.springframework.beans.factory.support.AbstractBeanDefinition;
- import org.springframework.beans.factory.support.BeanDefinitionBuilder;
- import org.springframework.beans.factory.support.DefaultListableBeanFactory;
- import org.springframework.context.annotation.AnnotationConfigUtils;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.stereotype.Component;
-
- import static java.rmi.server.LogStream.log;
-
- public class TestBeanFactory {
- public static void main(String[] args) {
- DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
- //bean的定义(描述bean的特征)
- AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition(Config.class).setScope("singleton").getBeanDefinition();
- beanFactory.registerBeanDefinition("config", beanDefinition);
- System.out.println("原始已有的bean");
- for (String name : beanFactory.getBeanDefinitionNames()) {
- System.out.println(name);
- }
- //添加一些常用的后处理器
- AnnotationConfigUtils.registerAnnotationConfigProcessors(beanFactory);
- System.out.println("添加一些常用的后处理器");
- for (String name : beanFactory.getBeanDefinitionNames()) {
- System.out.println(name);
- }
- //调用后处理器
- System.out.println("调用后处理器");
- beanFactory.getBeansOfType(BeanFactoryPostProcessor.class).values().forEach(beanFactoryPostProcessor -> {
- beanFactoryPostProcessor.postProcessBeanFactory(beanFactory);
- });
- for (String name : beanFactory.getBeanDefinitionNames()) {
- System.out.println(name);
- }
- }
-
- @Configuration
- static class Config {
- @Bean
- public Bean1 bean1() {
- return new Bean1();
- }
-
- @Bean
- public Bean2 bean2() {
- return new Bean2();
- }
- }
-
- @Component
- static class Bean1 {
-
-
- public Bean1() {
- log("构造Bean1()");
- }
-
- @Autowired
- private Bean2 bean2;
-
- public Bean2 getBean2() {
- return bean2;
- }
- }
-
- @Component
- static class Bean2 {
-
- public Bean2() {
- log("构造Bean2()");
- }
- }
-
- }
1.继承了MessageSource,有了处理国际化资源的能力
context.getMessage("hi",null,locale.CHINA)//参数:翻译内容,配置,语言类型
2.继承了ResourcePatternResolver,有了根据通配符匹配多个资源的能力
context.getResource(classpath:application.properties)//参数:资源
3.继承了ApplicationEventPublisher,有了发布事件对象的能力
context.getEnvironment().getProperty("java_home")//环境变量名称
4.继承了EnvironmentCapable,有了读取、处理环境信息的能力,用于解耦
context.publishEvent(new UserRegisteredEvent(context));//参数:事件源
监听器(增加方法)
- //无返回值,名字随意,参数固定
- @EventListener
- public void aaa(UserRegisteredEvent event){
- log.debug("{}",event)
- }
applicationcontext间接继承了beanfactory,applicationcontext把beanfactory作为成员变量
applicationcontext的功能更多
