• 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实例。

  • 相关阅读:
    【完美世界】石昊身上宝术至尊骨、上苍之手和轮回宝术哪个最强
    【TS】object类型
    Go语言学习笔记-A Tour of Go 练习笔记-rot13Reader
    ROS知识点——生成点云,发布、订阅ROS点云话题
    Google Earth Engine(GEE)——Kmeans聚类快速进行土地分类(双for循环快速调参)
    Python-自动化绘制股票价格通道线
    基于springboot的汽车销售系统,汽车商城管理系统,附源码+数据库+论文+开题报告,包远程安装调试
    解析 Python requests 库 POST 请求中的参数顺序问题
    474. 一和零
    syslog快速开始
  • 原文地址:https://blog.csdn.net/weixin_42594143/article/details/133710967