美文网首页
FactoryBean实现自定义bean实例化

FactoryBean实现自定义bean实例化

作者: simoscode | 来源:发表于2018-05-09 15:50 被阅读34次

1背景

使用Spring时,通常bean的实例化都比较简单,所以常常使用Spring IoC的默认处理.如果bean的实例化比较复杂,比如需要从网络或者本地配置中读取信息等获取信息完成实例化,直接在bean对应class的默认构造函数处理显的不够优雅,bean本身的功能耦合了其他非业务相关的功能.使用一个自定义bean工厂,把bean实例化组装都交给工厂,工厂实例化bean后放到容器里头,这是一个不错的选择.

2使用FactoryBean实现

自己的工厂对象实现org.springframework.beans.factory.FactoryBean接口就能完成这个功能,这个是Spring IoC提供的实例化扩展接口,让我们通过这个接口实现自己bean实例化需求.在我们的样例代码中,使用FactoryBean实例化一个DateFormat,并返回.具体代码如下:

package com.simos.controller;

import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.ZoneId;
import java.util.TimeZone;

/**
 * Created by l2h on 18-5-9.
 * Desc: 日期格式化bean的FactoryBean
 * @author l2h
 */

public class DateFormatFactoryBean implements FactoryBean<DateFormat>,InitializingBean{
private DateFormat dateFormat;

@Override
public void afterPropertiesSet() throws Exception {
    dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    dateFormat.setTimeZone(TimeZone.getTimeZone(ZoneId.SHORT_IDS.get("CTT")));
}

@Override
public DateFormat getObject() throws Exception {
    return dateFormat;
}

@Override
public Class<?> getObjectType() {
    return dateFormat.getClass();
}

@Override
public boolean isSingleton() {
    return true;
}
}

这样,我们在其他地方就可以直接使用DateFormatbean了像容器自身实例化那些bean一样.如下:

/**
 * Created by l2h on 18-4-9.
 * Desc: hello world
 * @author l2h
 */
@RestController
public class HelloController {
@Autowired
DateFormat dateFormat;
@RequestMapping(value = "/hello",method = RequestMethod.GET)
public String hello(){
    System.out.println(dateFormat.format(new Date()));
    return "hello world!";
}
}

3小结

Spring IoC提供很多接口,让开发者根据需要参与容器创建,初始化,刷新,销毁的各个过程.

相关文章

  • 【Spring源码】 FactoryBean接口

    容器初始化阶段 实例化原始bean 启动容器的时候,如果当前bean 实现了FactoryBean,则先实例化将n...

  • FactoryBean

    FactoryBean是spring框架定义的一个接口. 用于自定义bean的整个实例化过程; 说到实例化,默认...

  • Spring(bean)

    bean 实例化 两种 方式 . 1构造器实例化 2实现FactoryBean 接口实例化 1、构造器实例化 一般...

  • FactoryBean实现自定义bean实例化

    1背景 使用Spring时,通常bean的实例化都比较简单,所以常常使用Spring IoC的默认处理.如果bea...

  • Bean的四种创建方式

    第一种 ---- FactoryBean FactoryBean === 工厂Bean(可以生产Bean) 实现一...

  • Spring - FactoryBean

    1,FactoryBean介绍 1)定义如果一个bean实现了FactoryBean接口,它被作为工厂bean去暴...

  • Spring-IOC-FactoryBean检测与获取Bean

    主要讲解getObjectForInstance方法,对FactoryBean验证,并获取需要的Bean实例。 无...

  • FactoryBean笔记

    情况下,Spring通过反射机制利用bean的class属性来指定实现类实例化bean. 在某些情况下,实例化be...

  • bean生命周期以及作用域

    bean生命周期: 简单点说就是:bean的实例化–>bean的初始化–>bean的使用–>bean的销毁 实例化...

  • Spring Bean

    Bean 生命周期 实例化,new 对Bean进行配置 -- IOC注入 如果实现BeanNameAware接口,...

网友评论

      本文标题:FactoryBean实现自定义bean实例化

      本文链接:https://www.haomeiwen.com/subject/uzanrftx.html