[Java] Spring 的 XXAware、XXCapable 接口规范

千千寰宇 / 2024-10-11 / 原文

Aware/感知接口声明 : 基于 set 方法 从外部获取 目标对象

  • XXXAware 在Spring里表示对XXX可以感知

通俗点解释就是:如果在某个类里边想要使用spring的一些东西,就可以通过实现XXXAware接口告诉Spring, Spring看到后就会给你送过来,而接收的方式是通过实现接口唯一的方法setXXX。

这里可以有一个概念,就是所有接口定义set方法并让你来实现set方法的都是可以获取到某一个对象,它一定是在某个框架的某个地方调用了这个方法,然后把想要的对象给 set 进来了

  • 案例 : XXXClass 继承 ApplicationContextAware 或 EnvironmentAware 接口

比如,一个类需要使用当前的 ApplicaitonContext 或者 Environment
可以实现 ApplicationContextAware 接口,然后实现 setApplicaitonContext() ,就可以得到 ApplcationContext
可以实现 EnvironmentAware 接口,然后实现 setEnvironment() ,就可以得到 Environment

import org.springframework.context.EnvironmentAware;
import org.springframework.core.env.Environment;

@Component
public class GetEnvDemoBean implements EnvironmentAware {
	private Environment environment;
	
    @Override
    public void setEnvironment(Environment environment) {
	    this.environment = environment; //从外部获取到 environment 对象
        System.out.println("【EnvironmentAware】Bean 所在环境是:" + environment);
    }
}

Capable/能力声明接口 : 基于 get 方法 对外部提供 目标对象

  • XXXCapable,顾名思义,就是具有某种能力

同样,这里的 Capable 也可以这么理解:就是所有接口定义get方法并让你来实现get方法的都是可以提供一个对象,它一定是在某个框架的某个地方调用了该方法,从你这个提供者这里 get 了某个对象。

  • 案例: ApplicationContext 继承了 EnvironmentCapable 接口
  • 说明了 能够从 ApplicationContext 获取 Environment
  • EnvironmentCapable,顾名思义,就是当前具有 Environment 的能力,也就是可以提供 Environment.所以 EnvironmentCapable 唯一的方法就是 Environment getEnvironment();

用于实现 EnvironmentCapable 接口的类,就是告诉Spring它可以提供 Environment ,当Spring需要Environment 的时候就会调用其 getEnvironment 方法跟它要。

例如: (new ClassPathXmlApplicationContext("bean.xml") ).getEnvironment().getProperty("key");

X 参考文献

  • Spring中的Aware和Capable - CSDN
  • 【Spring(十二)】EnvironmentCapable - 51CTO