Spring9——通過用Aware接口使用Spring底層組件、環境切換
- 2020 年 6 月 28 日
- 筆記
- 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()操作,會將我們設置的一些參數還原。
流程調整:未激活——>激活 (刷新點:配置類的編寫處)——>刷新
ApplicationContext context=new AnnotationConfigApplicationContext(); ConfigurableEnvironment environment= (ConfigurableEnvironment) context.getEnvironment(); environment.setActiveProfiles("myApple"); //保存點 ((AnnotationConfigApplicationContext)context).register(MyConfig.class); ((AnnotationConfigApplicationContext) context).refresh();
IOC容器使用時必須進行刷新:有參構造,自動刷新;無參構造,手動刷新。