spring(五):spring中Aware接口的使用


spring中自定義組件需要使用spring的底層組件時,可以通過自定義組件實現相關XxxAware接口,重寫其中的方法進而實現

例如:自定義一個組件,該組件中需要使用ApplicationContext、BeanFactory,那么我們就可以通過實現ApplicationContextAware、BeanFactoryAware接口實現

ApplicationContextAware

public class MyAware implements ApplicationContextAware {
    private ApplicationContext applicationContext;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        System.out.println("傳入的IOC容器applicationContext = [" + applicationContext + "]");
        this.applicationContext = applicationContext;
    }
}
@Configuration
public class AwareConfig {
    @Bean
    public MyAware myAware(){
        return new MyAware();
    }
}
public class TestAware {
    @Test
    public void testM(){
        ApplicationContext context = new AnnotationConfigApplicationContext(AwareConfig.class);
        System.out.println("context = " + context);
    }
}

結果
傳入的IOC容器applicationContext = [org.springframework.context.annotation.AnnotationConfigApplicationContext@2ff5659e: startup date [Wed May 29 14:00:42 GMT+08:00 2019]; root of context hierarchy]
context = org.springframework.context.annotation.AnnotationConfigApplicationContext@2ff5659e: startup date [Wed May 29 14:00:42 GMT+08:00 2019]; root of context hierarchy

BeanNameAware

public class MyAware implements BeanNameAware{

    @Override
    public void setBeanName(String name) {
        System.out.println("name = [" + name + "]");
    }
}

結果
name = [myAware]
context = org.springframework.context.annotation.AnnotationConfigApplicationContext@2ff5659e: startup date [Wed May 29 14:07:16 GMT+08:00 2019]; root of context hierarchy

EmbeddedValueResolverAware

public class MyAware implements EmbeddedValueResolverAware{

    @Override
    public void setEmbeddedValueResolver(StringValueResolver stringValueResolver) {
        String value = stringValueResolver.resolveStringValue("當前操作系統:${os.name},10-9=#{10-9}");
        System.out.println("value = " + value);
    }
}

結果
value = 當前操作系統:Windows 10,10-9=1
context = org.springframework.context.annotation.AnnotationConfigApplicationContext@2ff5659e: startup date [Wed May 29 14:13:11 GMT+08:00 2019]; root of context hierarchy

其它XxxAware用法類似

通過Aware可以把spring底層組件注入到自定義的bean中,再用相應的processor處理器處理

ApplicationContextAware是利用ApplicationContextAwareProcessor來處理的,XxxAware也有相應的processor進行處理,其實就是相關后置處理器完成處理工作

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM