spring注解驱动开发(七):spring自动装配实现Aware接口

自定义组件使用spring底层的组件(ApplicationContext)需要实现对应的Aware接口,在创建对象时对调用相关方法,以方法回调的方式将相关组件注入到自定义组件中。

EmbeddedValueResolverAware:解析表达式#{} ${}
BeanNameAware:当前bean的名字
ApplicationContextAware :获得当前上下文

代码示例:

public class MyBean implements EmbeddedValueResolverAware, BeanNameAware, ApplicationContextAware {
    private ApplicationContext  applicationContext;
    //ApplicationContextAwareProcessor   XxxAwareProcessor 具体实现后置处理器
    @Override
    public void setBeanName(String name) {
        System.out.println("当前bean的名字--》"+name);
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        System.out.println("ApplicationContextAware-->"+applicationContext);
        this.applicationContext = applicationContext;
    }

    @Override
    public void setEmbeddedValueResolver(StringValueResolver resolver) {
        String str = "Hello,word ${os.name},age is #{10*3}";
        String s = resolver.resolveStringValue(str);
        System.out.println(s);
    }
}

配置类代码:

@Configuration
@Import(MyBean.class)
public class MainConfig07 {
}

测试类以及控制台输出

public class Main {
    @Test
    public void test(){
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig07.class);
        MyBean bean = applicationContext.getBean(MyBean.class);
        System.out.println(bean);
        System.out.println(applicationContext);
    }
}
当前bean的名字--》org.gwsix.ch07.bean.MyBean
Hello,word Windows 10,age is 30
ApplicationContextAware-->org.springframework.context.annotation.AnnotationConfigApplicationContext@2d6a9952: startup date [Fri Mar 29 12:48:13 CST 2019]; root of context hierarchy
org.gwsix.ch07.bean.MyBean@708f5957
org.springframework.context.annotation.AnnotationConfigApplicationContext@2d6a9952: startup date [Fri Mar 29 12:48:13 CST 2019]; root of context hierarchy

 

posted @ 2019-03-28 09:26  i孤独行者  阅读(357)  评论(0)    收藏  举报