底层解惑-spring的IOC相关接口:BeanFactory与FactoryBean
2016-05-19 15:16
537 查看
一、区别
BeanFactory是个 Factory ,也就是 IOC 容器或对象工厂;
FactoryBean 是个 Bean,但是不是普通的bean,该bean是通过getobject()返回一个修饰的bean,而不是它本身,它的实现与设计模式中的工厂模式和修饰器模式类似。
二、代码
三、应用
可以在getObject里面实现很多自定义功能。例:如果使用传统方式配置下面Car 的 时, Car 的每个属性分别对应一个 元素标签。如果用FactoryBean 的方式实现就灵活点,下例通过逗号分割符的方式一次性的为 Car 的所有属性指定配置值:
BeanFactory是个 Factory ,也就是 IOC 容器或对象工厂;
FactoryBean 是个 Bean,但是不是普通的bean,该bean是通过getobject()返回一个修饰的bean,而不是它本身,它的实现与设计模式中的工厂模式和修饰器模式类似。
二、代码
package org.springframework.beans.factory; import org.springframework.beans.BeansException; public interface BeanFactory { String FACTORY_BEAN_PREFIX = "&"; Object getBean(String name) throws BeansException; <T> T getBean(String name, Class<T> requiredType) throws BeansException; <T> T getBean(Class<T> requiredType) throws BeansException; Object getBean(String name, Object... args) throws BeansException; boolean containsBean(String name); boolean isSingleton(String name) throws NoSuchBeanDefinitionException; boolean isPrototype(String name) throws NoSuchBeanDefinitionException; boolean isTypeMatch(String name, Class<?> targetType) throws NoSuchBeanDefinitionException; Class<?> getType(String name) throws NoSuchBeanDefinitionException; String[] getAliases(String name); }
package org.springframework.beans.factory; public interface FactoryBean<T> { T getObject() throws Exception; Class<?> getObjectType(); boolean isSingleton(); }
三、应用
可以在getObject里面实现很多自定义功能。例:如果使用传统方式配置下面Car 的 时, Car 的每个属性分别对应一个 元素标签。如果用FactoryBean 的方式实现就灵活点,下例通过逗号分割符的方式一次性的为 Car 的所有属性指定配置值:
public class ObjectMapperFactoryBean implements FactoryBean<ObjectMapper> { private ObjectMapper objectMapper = new ObjectMapper(); public ObjectMapperFactoryBean() { objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false) .configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true) .configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false) .configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false).getSerializationConfig() .setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); Set<String> fliterSet = new HashSet<String>(); FilterProvider filterProvider = new SimpleFilterProvider().addFilter("filter", SimpleBeanPropertyFilter.serializeAllExcept(fliterSet)); objectMapper.setFilters(filterProvider); } public ObjectMapper getObject() throws Exception { return objectMapper; } public Class<? extends ObjectMapper> getObjectType() { return ObjectMapper.class; } public boolean isSingleton() { return true; } }
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- Ruby设计模式编程之适配器模式实战攻略
- 实例讲解Ruby使用设计模式中的装饰器模式的方法
- 设计模式中的模板方法模式在Ruby中的应用实例两则
- Ruby设计模式编程中对外观模式的应用实例分析
- 实例解析Ruby设计模式编程中Strategy策略模式的使用
- Ruby中使用设计模式中的简单工厂模式和工厂方法模式
- Ruby使用设计模式中的代理模式与装饰模式的代码实例
- 详解组合模式的结构及其在Ruby设计模式编程中的运用
- C#编程中使用设计模式中的原型模式的实例讲解
- 使用设计模式中的工厂方法模式进行C#编程的示例讲解
- 实例解析C#设计模式编程中简单工厂模式的使用
- 详解C#设计模式编程中生成器模式的使用
- 深入解析C#设计模式编程中对建造者模式的运用