Spring框架常用各类钩子函数汇总
简述
Spring作为优秀的企业级框架,在设计上针对Bean的生命周期各个阶段预留需要了许多hook,通过这些hook可以帮助快速实现自定义的框架设计,动态加载Bean,管理容器等功能,提供了快速扩展的能力。为简化开发环境的搭建,下面的示例采用了基于SpringBoot框架验证各个接口。具体示例代码由此获得。
1.Aware类接口
Aware类接口主要是在容器管理Bean的生命周期过程中,在各个阶段执行以后留下的回调接口,其一些常见接口有ApplicationContextAware、BeanFactoryAware、BeanNameAware、EnvironmentAware、ClassLoaderAware、ImportAware等,都继承了Aware接口。
1.1 ApplicationContextAware
ApplicationContextAware主要用于获取容器的上下文,可以对ApplicationContext进行修改,示例:
public class ApplicationContextAwareTest implements ApplicationContextAware {
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
System.out.println("---------ApplicationContext回调--------------");
System.out.println(applicationContext.getBean("factoryBeanTest"));
}
}
将该实现类注入到Spring容器中即可获取ApplicationContext。
1.2 BeanFactoryAware
BeanFactory是工厂类,用于获取Bean示例。BeanFactoryAware主要用于获取BeanFactory示例,进而获取Bean。
public class BeanFactoryAwareTest implements BeanFactoryAware {
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
System.out.println("BeanFactory回调");
System.out.println(beanFactory);
}
}
将该实现类注入到Spring容器中即可。
1.3 BeanNameAware
通过BeanNameAware实现类可以获取当前类自己的Bean的名字。
public class BeanNameAwareTest implements BeanNameAware {
@Override
public void setBeanName(String s) {
System.out.println("BeanName回调");
System.out.println(s);
}
}
将该实现类注入到Spring容器中即可。
1.4 EnvironmentAware
通过实现EnvironmentAware接口,可以获取Environment对象,操作里面的外部属性配置。
public class EnvironmentAwareTest implements EnvironmentAware {
@Override
public void setEnvironment(Environment environment) {
System.out.println("Environment回调");
System.out.println(environment);
}
}
将该实现类注入到Spring容器中即可。
1.5 ClassLoaderAware
通过实现ClassLoaderAware接口,可以回调当前类的ClassLoader。
public class ClassLoaderAwareTest implements BeanClassLoaderAware {
@Override
public void setBeanClassLoader(ClassLoader classLoader) {
System.out.println("classLoader回调");
System.out.println(classLoader);
}
}</