**
1 给容器中注册组件的三种方式:**
1 包扫描注解 service等等
2 @Bean 导入第三方包里面的组件
3 @Import
快速导入组件,只需要将类的class文件写入
@ImportSelector
可以实现此类,重写printBeans方法,此方法的返回值就是
导入到容器中的组件全类名
@ImportBeanDefinitionRegistrar
继承此类,实现registerBeanDefinitions方法
该方法的两个成员变量:
AnnotationMetadata 返回所有已注册容器中的信息
BeanDefinitionRegistry:BeanDefinition注册类
2 bean的生命周期
-
指定初始化和销毁方法
通过@Bean注解指定init-method和destroy-method(初始化跟销毁方法是自己创建在要加入容器类中的内部) 构造方法(对象创建) 单实例:在容器启动(而不是容器创建时)的时候创建对象 多实例:在每次获取的时候创建对象 初始化:构造方法完成后,调用初始化方法(单例) 销毁:当容器关闭时销毁(单例) 多实例初始化是获取对象时初始化,销毁方法不会被容器主动调用
-
通过让bean实现InitializingBean(定义初始化逻辑)和DisposableBean(定义销毁逻辑)
-
使用JSR250 之后的注解(这两个注解都是方法级的)
@PostConstruct:在Bean创建完成并且属性赋值完成,来执行初始化
@PreDestroy:在容器销毁bean之前,通知我们进行清理工作 -
实现BeanPostProcessor接口:bean的后置处理器(实现完成后需要将其加入到容器中)
在bean初始化前后做某些处理 postProcessBeforeInitialization 在任意初始化(包括自定义的种种)之前做某些事情 postProcessAfterInitialization 在任意初始化(包括自定义的种种)之后做某些事情