Spring Aware 接口

Spring Aware

Spring Aware的目的是为了让Bean获得Spring容器的服务。

Spring提供的所有Aware接口

常用的Aware接口

BeanNameAware 获得到容器中Bean的名称
BeanFactoryAware 获得当前bean Factory,从而调用容器的服务
ApplicationContextAware 获得当前的application context从而调用容器的服务
MessageSourceAware 得到message source从而得到文本信息
ApplicationEventPublisherAware 应用时间发布器,用于发布事件
ResourceLoaderAware 获取资源加载器,可以获得外部资源文件
EnvironmentAware 获取环境相关信息(包含设置的环境变量)
EmbeddedValueResolverAware 获取Spring提供的嵌入式解析器,可以解析Spring EL表达式

例子自定义Bean实现部分Aware接口获得Spring提供的相关服务:

/**
 * Spring提供了很多Aware的接口实现类,可以通过实现这些接口实现类,来Spring的提供的服务
 */
@Component
public class LbSpringAware implements ApplicationContextAware, BeanNameAware, EmbeddedValueResolverAware {
    private ApplicationContext applicationContext;
    /**
     * BeanNameAware 提供获取Bean的名称
     * @param s
     */
    public void setBeanName(String s) {
        System.out.println("Bean的Id为:"+s);
    }

    /**
     * ApplicationContextAware:可以获得Spring的上下文
     * @param applicationContext
     */
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
        System.out.println("LbSpringAware-applicationContext:"+applicationContext);
    }

    /**
     * EmbeddedValueResolverAware:可以获得Spring提供解析EL表达式的解析器
     * @param stringValueResolver
     */
    public void setEmbeddedValueResolver(StringValueResolver stringValueResolver) {
        String result = stringValueResolver.resolveStringValue("os.name=${os.name},5+5=#{5+5}");
        System.out.println("LbSpringAware解析EL表达式os.name=${os.name},5+5=#{5+5}的结果为:"+result);
    }

    public ApplicationContext getApplicationContext() {
        return applicationContext;
    }
}

@Configuration
@ComponentScan(value = {"com.lb.spring.day5.part17"})
public class MyConfigration17 {
}

public class Part17Test {
    @Test
    public void test() throws Exception {
        AnnotationConfigApplicationContext app = new AnnotationConfigApplicationContext(MyConfigration17.class);
        System.out.println(app);
        LbSpringAware lbSpringAware = app.getBean(LbSpringAware.class);
        System.out.println(lbSpringAware.getApplicationContext());
        System.out.println("IOC 容器初始化完成....");
    }
}

 结果:从结果可以发现,通过相关的Aware接口获得当前Bean的id,并且解析了EL表达式,获得ApplicaitonContext和加载配置的注解AppicationContext为同一个对象

Bean的Id为:lbSpringAware
LbSpringAware解析EL表达式os.name=${os.name},5+5=#{5+5}的结果为:os.name=Windows 7,5+5=10
LbSpringAware-applicationContext:org.springframework.context.annotation.AnnotationConfigApplicationContext@2471cca7: startup date [Thu Aug 27 16:10:26 CST 2020]; root of context hierarchy
org.springframework.context.annotation.AnnotationConfigApplicationContext@2471cca7: startup date [Thu Aug 27 16:10:26 CST 2020]; root of context hierarchy
org.springframework.context.annotation.AnnotationConfigApplicationContext@2471cca7: startup date [Thu Aug 27 16:10:26 CST 2020]; root of context hierarchy
IOC 容器初始化完成....


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值