• ApplicationContextAware、ApplicationContext


    ApplicationContextAware

    ApplicationContextAware接口是Spring框架中的一个接口,用于获取ApplicationContext对象,从而可以在应用程序中访问Spring容器的功能。

    该接口定义了一个方法setApplicationContext(ApplicationContext applicationContext),当Spring容器初始化时,会自动调用该方法,并将ApplicationContext对象作为参数传入。

    下面是一个实现ApplicationContextAware接口的完整代码示例:

    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    
    public class MyBean implements ApplicationContextAware {
    
        private ApplicationContext applicationContext;
    
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            this.applicationContext = applicationContext;
        }
    
        public void doSomething() {
            // 使用ApplicationContext对象进行操作
            // 例如获取其他Bean对象
            OtherBean otherBean = applicationContext.getBean(OtherBean.class);
            otherBean.doSomethingElse();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在上面的示例中,MyBean类实现了ApplicationContextAware接口,并重写了setApplicationContext方法。在该方法中,将传入的ApplicationContext对象赋值给类的成员变量applicationContext。

    在doSomething方法中,可以使用applicationContext对象进行一些操作,例如获取其他Bean对象并调用其方法。

    通过实现ApplicationContextAware接口,可以在Spring应用程序中方便地获取ApplicationContext对象,从而实现更灵活的操作。


    ApplicationContext

    ApplicationContext是Spring框架中的一个重要接口,它是一个容器,负责管理Spring应用中的Bean对象。ApplicationContext提供了许多有用的功能,如Bean的生命周期管理、依赖注入、AOP等。

    获取ApplicationContext的方法有以下几种:

    1. ClassPathXmlApplicationContext:从classpath中加载配置文件,适用于web应用和非web应用。
    
    2. FileSystemXmlApplicationContext:从文件系统中加载配置文件,适用于非web应用。
    
    3. AnnotationConfigApplicationContext:基于注解的配置方式,适用于非web应用。
    
    4. WebApplicationContext:适用于web应用,可以通过ServletContext获取。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    ApplicationContext的常用方法和属性:

    1. getBean(String name):根据Bean的名称获取Bean对象。
    
    2. getBean(Class<T> requiredType):根据Bean的类型获取Bean对象。
    
    3. containsBean(String name):判断容器中是否包含指定名称的Bean4. getBeanDefinitionCount():获取容器中Bean的数量。
    
    5. getBeanDefinitionNames():获取容器中所有Bean的名称。
    
    6. getEnvironment():获取容器的环境配置。
    
    7. getMessage(String code, Object[] args, String defaultMessage, Locale locale):获取国际化消息。
    
    9. getBeanNamesForAnnotation(Class<? extends Annotation> annotationType) 获取所有被指定注解标记的bean的名称
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    示例代码:

    // 通过ClassPathXmlApplicationContext获取ApplicationContext
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    
    // 获取Bean对象
    UserService userService = context.getBean(UserService.class);
    
    // 判断容器中是否包含指定名称的Bean
    boolean contains = context.containsBean("userService");
    
    // 获取容器中Bean的数量
    int count = context.getBeanDefinitionCount();
    
    // 获取容器中所有Bean的名称
    String[] names = context.getBeanDefinitionNames();
    
    // 获取国际化消息
    String message = context.getMessage("hello", null, "default message", Locale.getDefault());
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    还有其它一些方法,如下所示:

    1. getAliases(String name):获取给定名称的所有别名。
    String[] aliases = applicationContext.getAliases("beanName");
    
    • 1
    1. getParent():获取父级应用上下文。
    ApplicationContext parentContext = applicationContext.getParent();
    
    • 1
    1. getDisplayName():获取应用上下文的显示名称。
    String displayName = applicationContext.getDisplayName();
    
    • 1

    4. publishEvent(ApplicationEvent event):发布应用事件。

    applicationContext.publishEvent(new CustomEvent(this, "custom message"));
    
    • 1
    1. getResource(String location):获取给定位置的资源。
    Resource resource = applicationContext.getResource("classpath:config.properties");
    
    • 1
    1. close():关闭应用上下文。
    applicationContext.close();
    
    • 1
    1. isActive():检查应用上下文是否处于活动状态。
    boolean isActive = applicationContext.isActive();
    
    • 1

    8.getBeanNamesForAnnotation(Class annotationType)
    getBeanNamesForAnnotation方法是ApplicationContext接口中的一个方法,用于获取所有被指定注解标记的bean的名称。其方法签名如下:

    String[] getBeanNamesForAnnotation(Class annotationType)

    参数annotationType表示要查找的注解类型。该方法返回一个String数组,其中每个元素表示一个被指定注解标记的bean的名称。

    例如,如果我们想要获取所有被@Component注解标记的bean的名称,可以使用以下代码:

    String[] beanNames = applicationContext.getBeanNamesForAnnotation(Component.class);

    这将返回一个包含所有被@Component注解标记的bean的名称的String数组。我们可以进一步使用这些bean名称来获取相应的bean实例。

  • 相关阅读:
    “芯星计划”启动仪式暨大学生半导体行业就业研讨会成功举办
    JavaScript获取文件的file对象数据(不通过input)
    06-JVM-监控及调优案例
    Nginx解决跨域问题的一些想法
    GPT-4o:未来语言模型的典范
    Midjourney视觉垫图
    vue3 + elementPlus实现select下拉框插入确定和取消按钮。
    Docker
    uart驱动框架及编程方法
    JWT技术实现用户token令牌管理(9月20号)
  • 原文地址:https://blog.csdn.net/weixin_42594143/article/details/133710967