FactoryBean
Spring3.0开发,FactoryBean开始支持泛型,接口声明改为FactoryBean的形式。
T getObject() throws Exception;
Class<?> getObjectType();
boolean isSingleton();
- 返回由FactoryBean创建的Bean实例。如果isSingleton()返回true,则该实例会放到Spring容器的单实例缓存池中。
- 确认由FactoryBean创建的Bean的作用域是Singleton还是prototye
- 返回FactoryBean创建Bean的类型
有FactoryBean的好处:
一般情况下,Spring通过反射机制利用<bean>
属性的class属性执行实现类实例化Bean。在某些情况下,实例化Bean的过程比较复杂,配置方法的灵活性受限制。这是Spring为此提供了一个FactoryBean工程类接口,用户可以通过实现该工厂类接口定制实例化Bean逻辑。
InitializingBean
实现InitializingBean接口的作用
afterPropertiesSet 和init-method之间的执行顺序是afterPropertiesSet 先执行,init-method 后执行。从BeanPostProcessor的作用,可以看出最先执行的是postProcessBeforeInitialization,然后是afterPropertiesSet,然后是init-method,然后是postProcessAfterInitialization
初始化JedisCluster Bean
private static JedisCluster jedisCluster = ((JedisCluster)SpringContextHolder.getBean("jedisCluster"));
好处
- 完成Jedis初始化时有端口的校验逻辑
- 利用了Spring天然的单例模式Singleton,在容器启动的时候实例化Singleton的Bean