@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; } }
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