这一行的代码意思是初始化子类的其他bean,方法是空的,可以在子类中,
自定义处理其他业务逻辑
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.12.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.12.RELEASE</version>
</dependency>
</dependencies>
创建一个子类,继承AnnotationConfigApplicationContext
在这里自定义给容器中注册一些组件
public class A extends AnnotationConfigApplicationContext {
public A(Class<?>... componentClasses){
super();
register(componentClasses);
refresh();
}
/**
* 在初始化特殊bean时调用,在实例化singleton之前调用
* @throws BeansException
*/
@Override
protected void onRefresh() throws BeansException {
//获取bean工厂
ConfigurableListableBeanFactory beanFactory = this.getBeanFactory();
//给容器中注册一个自定义的单实例bean
beanFactory.registerSingleton("ddd","123");
System.out.println("子类刷新容器");
}
}
//扫描包 使得 使用@Component注解生效
@ComponentScan("com.dmg")
@Configuration
public class TestConfig {
}
public class Test {
public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext=new A(TestConfig.class);
//获取bean信息
System.out.println(applicationContext.getBean("ddd"));
}
}
当执行到onRefresh();方法时,本身是空的,留给子类重写
因为我们已经重写了这个方法,当执行进来的时候,就会进入我们的子类