Spring-Autowire&FactoryBean

autowire

autowire 即自动注入的意思,通过使用 autowire 特性,我们就不用再显示的配置 bean 之间的依赖了。把依赖的发现和注入都交给 Spring 去处理,省时又省力。autowire 几个可选项,比如 byName、byType 和 constructor 等。autowire 是一个常用特性,相信大家都比较熟悉了,所以本节我们就 byName 为例,快速结束 autowire 特性的介绍。

当 bean 配置中的 autowire = byName 时,Spring 会首先通过反射获取该 bean 所依赖 bean 的名字(beanName),然后再通过调用 BeanFactory.getName(beanName) 方法即可获取对应的依赖实例。autowire = byName 原理大致就是这样,接下来我们来演示一下。

@Data
public class TestA {
    private TestB testB;
    private  TestC testC;

}

public class TestB {
}
public class TestC {
}
<bean name="testA" class="kl.idaas.feature.template.id.base.aspect.TestA" autowire="byName">
</bean>

<bean name="testADefault" class="kl.idaas.feature.template.id.base.aspect.TestA">
  <property name="testB" ref="testB"/>
  <property name="testC" ref="testC"/>
</bean>

对于使用byName方式在,创建bean进行属性填充时populateBean,执行如下逻辑。
在这里插入图片描述

对于testADefault配置,最后执行如下逻辑:

在这里插入图片描述

FactoryBean

FactoryBean?看起来是不是很像 BeanFactory 孪生兄弟。不错,他们看起来很像,但是他们是不一样的。FactoryBean 是一种工厂 bean,与普通的 bean 不一样,FactoryBean 是一种可以产生 bean 的 bean,好吧说起来很绕嘴。FactoryBean 是一个接口,我们可以实现这个接口

@Data
public class Hello {
    private String content;
}
public class HelloFactoryBean implements FactoryBean<Hello> {
    @Override
    public Hello getObject() throws Exception {
        Hello hello = new Hello();
        hello.setContent("拉拉");
        return hello;
    }

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

<bean id="helloFactory" class="kl.idaas.feature.template.id.base.aspect.HelloFactoryBean"/>

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

由测试结果可以看到,当我们调用 getBean(“helloFactory”) 时,ApplicationContext 会返回一个 Hello 对象,该对象是 HelloFactoryBean 的 getObject 方法所创建的。如果我们想获取 HelloFactoryBean 本身,则可以在 helloFactory 前加上一个前缀&,即&helloFactory

请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值