Spring中的ApplicationContextAware接口的使用

appContext_logo

最近在看项目代码时发现一个类在项目各个地方都能进行调用,仔细研究后发现这个类实现了ApplicationContextAware这个接口,这个接口可以很方便的获取到Spring的上下文applicationContext。现在就跟我来一起看看如何使用吧。


使用方法

我们先新建一个测试类AppCache,在这个类中我定义了一个静态的DictService属性。而DictService类我也提前写好了,里面只输出了一句话用作测试。

/**
 * <pre>
 * Description: 测试ApplicationContextAware接口
 * Copyright:   Copyright (c)2017
 * Author:      lllx
 * Version:     1.0
 * </pre>
 */
@Service
public class DictServiceImpl implements DictService {

    @Override
    public void sayHello() {
        System.out.println("Hello ApplicationContextAware");
    }
}

使用测试类AppCache实现这个接口,填写它的setApplicationContext方法。Spring容器在加载的时候会调用一次setApplicationContext,并将上下文ApplicationContext传递给这个方法。我们拿到上下文后就可以做很多事情了。这里我使用它来获取了DictService这个bean。然后创建了一个静态的sayHello测试方法调用了DictService中的sayHello。

/**
 * <pre>
 * Description: 测试ApplicationContextAware接口
 * Copyright:   Copyright (c)2017
 * Author:      lllx
 * Version:     1.0
 * </pre>
 */

public class AppCache implements ApplicationContextAware {

    private static DictService dictService;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        dictService = applicationContext.getBean(DictService.class);
    }

    public static void sayHello(){
        dictService.sayHello();
    }
}

接下来我们需要把测试类AppCache注入到Spring容器中,在Spring的配置文件中添加测试类的bean。

<!--继承ApplicationContextAware接口的类-->
<bean id="appController" class="top.catalinali.controller.AppCache"/>

我们新建一个Junit测试类,来调用自己定义的AppCache中的方法sayHello。

/**
 * <pre>
 * Description: 测试ApplicationContextAware接口
 * Copyright:   Copyright (c)2017
 * Author:      lllx
 * Version:     1.0
 * </pre>
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class AppTest {

    @Test
    public void TestApp(){
        AppCache.sayHello();
    }
}

测试结果

[外链图片转存失败(img-QKfy8FEP-1568191774416)(https://catalinali.oss-cn-beijing.aliyuncs.com/appContext_1.jpg)]
可以看到我们成功输出了Hello ApplicationContextAware这句话。用这样的方法,我们就可以在项目的各个位置来调用AppCache中的方法。除此之外我们也可以使用上下文进行一些别的事情,大家就可以自由发挥啦!

结语

其实我们进入ApplicationContextAware接口内部可以看到他只有一个抽象的setApplicationContext方法,

public interface ApplicationContextAware extends Aware {
    void setApplicationContext(ApplicationContext var1) throws BeansException;
}

并且他又继承了一个Aware接口。而且这个接口是空的

package org.springframework.beans.factory;

public interface Aware {

}

这就很有意思了,具体原因就留给大家来讨论吧。

本文作者: catalinaLi
版权声明: 原创文章,有问题请评论中留言。非商业转载请注明作者及出处。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值