底层解惑-spring的IOC相关接口:BeanFactory与FactoryBean

一、区别
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;
   &nbsp;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;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值