spring 的factoryBean 使用

当某些实例化过程过于繁琐,或某些第三方库不能直接注册到spring容器的时候,可以实现org.springframeworker.beans.factory.FactoryBean接口,给出自己的实例化逻辑代码,当然使用自定义工厂类方法也可以,不过FactoryBean是spring提供的对付这种情况的“制式装备”

案例:

1.引入datetime插件

<!-- datetime 插件-->
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.9.8</version>
        </dependency>
    </dependencies>

2.编写NextDayDateDisplayer的类定义

import lombok.Data;
import net.sf.jsqlparser.expression.DateTimeLiteralExpression;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

@Data
@Component
public class NextDaydateDisplayer {

    @Qualifier("nextDayDate")
    @Autowired
    private DateTime nextDayDate;
}

3.编写FactoryBean的实现类NextDayDateFactoryBean

import org.joda.time.DateTime;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component;

@Component("nextDayDate")
public class NextDayDateFactoryBean implements FactoryBean{


    @Nullable
    @Override
    public Object getObject() throws Exception {
        return new DateTime().plusDays(1);
    }

    @Nullable
    @Override
    public Class<?> getObjectType() {
        return DateTime.class;
    }
}

4.测试FactoryBean的注册到容器的使用

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;

@ComponentScan("com.common.omads.test.factorybeantest")
public class Clinet {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Clinet.class);
        NextDaydateDisplayer bean = context.getBean(NextDaydateDisplayer.class);
        System.out.println(bean.getNextDayDate());
    }
}

4.执行结果打印

2021-06-09T14:19:51.765+08:00

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值