【spring】AnnotationConfigApplicationContext 类学习

AnnotationConfigApplicationContext 介绍

AnnotationConfigApplicationContext 是 Spring 框架中的一个类,用于创建基于注解的 Spring 应用上下文。它继承自 AbstractApplicationContext 类,并实现了 ConfigurableApplicationContext 接口。

使用 AnnotationConfigApplicationContext 创建 Spring 应用上下文时,需要指定一个或多个配置类。,开发者可以直接在 Java 类中使用注解如 @Configuration@Bean 等来声明和配置 Bean。

AnnotationConfigApplicationContext 属于 Spring 的 Java 配置支持模块,用于以纯 Java 注解的方式来替代 XML 配置文件来创建和管理 Spring 容器上下文。

ApplicationContext的三种加载应用上下文的方式:

  • AnnotationConfigApplicationContext
  • ClassPathXmlApplicationContext
  • FileSystemXmlApplicationContext

AnnotationConfigApplicationContext 属于其中的一种。

AnnotationConfigApplicationContext 构造方法

它有四种构造方法:

  • public AnnotationConfigApplicationContext()
  • public AnnotationConfigApplicationContext(DefaultListableBeanFactory beanFactory)
  • public AnnotationConfigApplicationContext(Class<?>... componentClasses)
  • public AnnotationConfigApplicationContext(String... basePackages)
public AnnotationConfigApplicationContext()

进行读取器和扫描器的初始化,在实例化前会调用父类的构造方法给BeanFactory赋值为DefaultListableBeanFactory。

此构造方法创建一个空的 AnnotationConfigApplicationContext 实例,不预先加载任何配置类或执行自动扫描。后续需要调用 register(Class<?>...) 方法手动注册配置类,或者调用 scan(String...) 方法指定要扫描的包路径以查找注解配置类。

示例代码

AnnotationConfigApplicationContext 是一个空的上下文,但是仍然可以通过 register() 方法手动注册配置类或基础包。Main 类中创建了一个 AnnotationConfigApplicationContext 对象,并通过 register() 方法手动注册了 AppConfig 配置类。这样,AppConfig 中的配置就会被应用到 Spring 应用上下文中。

public class Main {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
        context.register(AppConfig.class);
        context.refresh();
        // 获取 Bean 并使用
        context.close();
    }
}

public AnnotationConfigApplicationContext(DefaultListableBeanFactory beanFactory)

通过此构造方法,可以直接传递一组配置类作为参数,在创建上下文时就立即加载和解析这些配置类。配置类上通常会有 @Configuration 注解,里面包含了通过 @Bean 注解的方法定义的 Bean 定义。

示例代码

AnnotationConfigApplicationContext 接受了一个已存在的 DefaultListableBeanFactory 实例,但是仍然可以通过 register() 方法手动注册配置类或基础包。在下面的代码中,Main 类中创建了一个 DefaultListableBeanFactory 实例,并通过 AnnotationConfigApplicationContext 的构造方法将其传递给 Spring 应用上下文。然后,通过 register() 方法手动注册了 AppConfig 配置类。这样,AppConfig 中的配置就会被应用到 Spring 应用上下文中。

public class Main {
    public static void main(String[] args) {
        DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(beanFactory);
        context.register(AppConfig.class);
        context.refresh();
        // 获取 Bean 并使用
        context.close();
    }
}
public AnnotationConfigApplicationContext(Class<?>... componentClasses)

此构造方法,可以直接传递一组配置类作为参数,在创建上下文时就立即加载和解析这些配置类。配置类上通常会有 @Configuration 注解,里面包含了通过 @Bean 注解的方法定义的 Bean 定义。

示例代码
@Configuration
public class AppConfig {
    // 配置类代码
}


public class Main {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        // 获取 Bean 并使用
        context.close();
    }
}

public AnnotationConfigApplicationContext(String... basePackages)

这个构造方法接收一个字符串数组类型的参数 basePackages,允许你在创建 AnnotationConfigApplicationContext 实例的同时指定一组基础包名。Spring 容器将会扫描这些包下的类,寻找那些标记了 @Component@Configuration@Service@Repository@Controller 等注解的类,并将它们自动注册为 Spring 容器管理的 Bean。

通过这种方式,你可以快速地启动一个基于注解的 Spring 容器,无需显式地注册每个配置类或组件类。当调用 refresh() 方法后,Spring 容器将在指定的基础包下进行类扫描,按照注解信息生成 Bean 定义,并进一步初始化和管理这些 Bean。

示例代码
public class Main {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("com.yang.SpringTest.config1", "com.yang.SpringTest.config2");
        // 获取 Bean 并使用
        context.close();
    }
}

AnnotationConfigApplicationContext 命周期

命周期包括以下几个阶段:

  1. 创建阶段:在创建 AnnotationConfigApplicationContext 对象时,会创建一个空的 DefaultListableBeanFactory 实例,并将其作为 Spring 应用上下文的核心 Bean 工厂。

  2. 配置阶段:在配置阶段,可以通过 register() 方法手动注册配置类或基础包,也可以通过构造方法指定配置类或基础包。Spring 应用上下文会解析这些配置类或基础包,并将其中的配置应用到 Bean 工厂中。

  3. 初始化阶段:在初始化阶段,Spring 应用上下文会创建所有的 Bean,并将其注册到 Bean 工厂中。同时,Spring 应用上下文还会执行 Bean 的初始化操作,例如调用 @PostConstruct 注解的方法。

  4. 使用阶段:在 Spring 应用上下文初始化完成后,可以通过 getBean() 方法获取 Bean 并使用。

  5. 销毁阶段:在使用完 Spring 应用上下文后,可以通过 close() 方法关闭 Spring 应用上下文。在关闭 Spring 应用上下文时,Spring 应用上下文会执行 Bean 的销毁操作,例如调用 @PreDestroy 注解的方法。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值