Spring9——通過用Aware介面使用Spring底層元件、環境切換
阿新 • • 發佈:2020-06-28
通過用Aware介面使用Spring底層元件
能夠供我們使用的元件,都是Aware的子介面。
ApplicationContextAware:實現步驟:
(1)實現ApplicationContextAware;
(2)重寫其中的方法,都包含一個物件,將該物件賦值到屬性中即可。
執行時間:在main函式中new IOC容器,先執行ApplicaitonContext實現類中的方法,通過該方法傳入IOC容器供我們自己使用,然後將該容器通過new 返回給使用者。
BeanNameAware:
@Component("myComponent")環境切換 Spring:切換環境 @Profile 啟用方式一: [email protected]環境名 啟用方式二: 硬編碼。 錯誤寫法:
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;
} @Overridepublic void setBeanName(String name) {
System.out.println("當前bean的name"+name);
this.beanName=name;
}
}
ApplicationContext context=new AnnotationConfigApplicationContext(MyConfig.class);ConfigurableEnvironment environment= (ConfigurableEnvironment) context.getEnvironment();
environment.setActiveProfiles("myBanana");
原因:其中AnnotationConfigApplicationContext有一個重新整理refresh()操作,會將我們設定的一些引數還原。
流程調整:未啟用——>啟用 (重新整理點:配置類的編寫處)——>重新整理
ApplicationContext context=new AnnotationConfigApplicationContext();
ConfigurableEnvironment environment= (ConfigurableEnvironment) context.getEnvironment();
environment.setActiveProfiles("myApple"); //儲存點
((AnnotationConfigApplicationContext)context).register(MyConfig.class);
((AnnotationConfigApplicationContext) context).refresh();
IOC容器使用時必須進行重新整理:有參構造,自動重新整理;無參構造,手動重新整理。