Spring中Bean的生命周期是怎样的?spring中XXXAware接口的作用?java底层序列化步骤?使用 protobuf 进行数据序列化?线程池的执行流程
spring中XXXAware接口的作用
Aware接口,是Spring中的一个根接口。Aware的中文含义,是“意识到,察觉到,发觉,发现”,所以该接口的目的,通过实现Aware的子接口,让类添加发觉信息的能力。
常见的Aware直接实现类:
ApplicationContextAware
实现该接口,可以访问Spring容器中缓存的的其他Bean。
获取的ApplicationContext,ApplicationContext接口继承了MessageSource, ApplicationEventPublisher, ResourcePatternResolver,可以实现 {@link ResourceLoaderAware},
{@link ApplicationEventPublisherAware} or {@link MessageSourceAware} 的功能。
//TODO file resources 相关
//TODO BeanFactoryPostProcessor
EnvironmentAware
实现该接口,项目启动时,可以获取环境变量配置。
BeanFactoryAware
获取加载该Bean的Bean工厂,可以动态加载Bean.
//TODO BeanFactory和ApplicationContext的区别
ApplicationEventPublisherAware
可以i获取ApplicationEventPublisher,ApplicationEventPublisher可以用来发布事件,结合ApplicationListener来共同使用,下文在介绍ApplicationListener时会详细提到。这个对象也可以通过spring注入的方式来获得
ResourceLoaderAware
可以获取ResourceLoader,ResourceLoader可以获取classpath内所有的资源对象。
BeanNameAware
注入Bean的名字。
ServletContextAware
可以获得ServletContext,ServletContext被称为域对象,是一个全局存储信息的空间。
服务器会为每一个工程创建一个ServletContext对象,工程内所有Servlet都会共享这个Servlet上下文。
应用被移除或服务器关闭时,才会被销毁,可以在整个应用过程中共享数据变量。
setAttribute(String name,Object value); 添加一个域属性
getAttribute(String name) 获取域属性
removeAttribute(String name) 删除域属性
ServletContext接口的初始化参数允许servlet访问与web应用相关的上下文初始化参数,这些由应用开发人员在部署描述符中指定:
getInitParameter
getInitParameterNames
java底层序列化步骤
使用 protobuf 进行数据序列化