Spring 中的ApplicationContextAware 和 BeanNameAware 抽象

        当 Spring 容器创建对象时,如果实现了 ApplicationContextAware 接口,那么这个实例会持有 ApplicationContext 的引用。 ApplicationContextAware 接口的定义如下:

public interface ApplicationContextAware {

    void setApplicationContext(ApplicationContext applicationContext) throws BeansException;
}

        因此,通过持有 ApplicationContext 引用或者把引用转化为 ApplicationContext 的子类(比如,ConfigurableApplicationContext,它具备额外的功能),beans 可以使用编程方式来操作 ApplicationContext 容器。其中一个用途是通过容器获取其他 bean 的引用,这个用途在某些场景下非常有用。但是,通常情况下,不建议这样做,也因该避免这样做。因为这样会使得代码和 Spring 框架进行耦合,并且不遵循控制反转风格,在控制反转风格中,依赖项作为属性提供给 bean。ApplicationContext 的还拥有其他的方法提供对文件资源、发布应用程序事件和MessageSource 的访问。详细情况,点击这里// 获取非单例 bean 的时候用到了 ApplicationContext

        自动装配是获取 ApplicationContext 的另一种方式。传统的构造函数和 byType 自动装配模式可以分别为构造函数参数或 setter 方法参数提供类型为 ApplicationContext 的依赖项。同时,使用基于注解的方式,如果在 ApplicationContext 类型相关的字段、构造器或者方法上带有 @Autowired 注解,那么 ApplicationContext 容器会自动进行装配。// 通过自动装配获取 ApplicationContext 容器

        如果一个类实现了 org.springframework.beans.factory.BeanNameAware 接口,那么这个类持有了该 bean 定义中定义的名称的引用。BeanNameAware  接口的定义如下:

public interface BeanNameAware {

    void setBeanName(String name) throws BeansException;
}

        这些函数的回调会在填充普通 bean 属性之后调用,但会在初始化回调函数之前调用,比如 InitializingBean.afterPropertiesSet() 或者自定义的 init-method 方法之前。

        除了 ApplicationContextAware 和 BeanNameAware,Spring 还提供了很多 aware 的回调接口,可以让实现这些接口的 bean 能够访问一些基础的依赖项。通常来说,aware 接口的名称就指示了依赖项的类型。更多 aware 接口,点击这里

        请再次注意,使用这些接口,你的代码将与 Spring API 进行耦合,并且不遵循控制反转风格。因此,我们建议将它用于需要对容器中基础依赖项进行代码访问的 beans。

        // aware 类接口提供对底层依赖项的访问支持。可以修改和操作一些底层属性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

swadian2008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值