Spring9——經過用Aware接口使用Spring底層組件、環境切換

經過用Aware接口使用Spring底層組件
可以供咱們使用的組件,都是Aware的子接口。
ApplicationContextAware:實現步驟:
            (1)實現ApplicationContextAware;
            (2)重寫其中的方法,都包含一個對象,將該對象賦值到屬性中便可。
執行時間:在main函數中new IOC容器,先執行ApplicaitonContext實現類中的方法,經過該方法傳入IOC容器供咱們本身使用,而後將該容器經過new 返回給用戶。
BeanNameAware:
@Component("myComponent")
public class MyComponent implements ApplicationContextAware,BeanNameAware{
    private ApplicationContext applicationContext;
    private String beanName;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        System.out.println("000000"+applicationContext);
        this.applicationContext=applicationContext;
    }

    @Override
    public void setBeanName(String name) {
        System.out.println("當前bean的name"+name);
        this.beanName=name;
    }
}

 

環境切換
        Spring:切換環境
        @Profile
激活方式一:
        -Dspring.profiles.active=@Profile環境名

激活方式二:
        硬編碼。
錯誤寫法:
ApplicationContext context=new AnnotationConfigApplicationContext(MyConfig.class);
ConfigurableEnvironment environment= (ConfigurableEnvironment) context.getEnvironment();
environment.setActiveProfiles("myBanana");

緣由:其中AnnotationConfigApplicationContext 有一個刷新refresh()操做,會將咱們設置的一些參數還原。java

 

流程調整:未激活——>激活   (刷新點:配置類的編寫處)——>刷新spring

ApplicationContext context=new AnnotationConfigApplicationContext();
ConfigurableEnvironment environment= (ConfigurableEnvironment) context.getEnvironment();
environment.setActiveProfiles("myApple");

//保存點
((AnnotationConfigApplicationContext)context).register(MyConfig.class);
((AnnotationConfigApplicationContext) context).refresh();

IOC容器使用時必須進行刷新:有參構造,自動刷新;無參構造,手動刷新。 app

相關文章
相關標籤/搜索