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()操作,会将我们设置的一些参数还原。
流程调整:未激活——>激活 (刷新点:配置类的编写处)——>刷新
ApplicationContext context=new AnnotationConfigApplicationContext(); ConfigurableEnvironment environment= (ConfigurableEnvironment) context.getEnvironment(); environment.setActiveProfiles("myApple"); //保存点 ((AnnotationConfigApplicationContext)context).register(MyConfig.class); ((AnnotationConfigApplicationContext) context).refresh();
IOC容器使用时必须进行刷新:有参构造,自动刷新;无参构造,手动刷新。
版权声明:本文为ghlz原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。