Spring bean属性注入方式解析

Spring bean属性注入方式解析
摘要由CSDN通过智能技术生成

目录

一、Spring 注入属性的方式

1.1 通过名称注入(Autowire.BY_NAME,默认Autowire.NO)

 1.2 通过类型(Autowire.BY_TYPE)注入

 1.3 通过@Autowired注入


一、Spring 注入属性的方式

1.1 通过名称注入(Autowire.BY_NAME,默认Autowire.NO)

@Component
public class Apple {
}


@Configuration
public class ByNameAutowaire {
	//找对应Apple的set方法
	@Bean(autowire = Autowire.BY_NAME)
	public Fruit fruit(){
		return new Fruit();
	}
}


public class Fruit {
	private Apple apple;

	public Apple getApple() {
		return apple;
	}

	public void setApple(Apple apple) {
		this.apple = apple;
	}
}

 在Fruit中注入Apple属性,使用byName的方式,必须在Fruit中有对应的set()方法,在进行属性注入时,找的是set方法对应的bean的名字(比如setApple()方法找的就是apple这个bean对象)。在此时并没有进行属性的注入,而是将它放进了newPvs中,后续进行赋值。在找方法时需要如下的条件才满足(unsatisfiedNonSimpleProperties):

        1. 必须要有set方法

        2.   pvs中不存在

        3. 不是简单类型(CharSequence、Enum、Number、Date、Locale、URI、URL)

所以,以上几种类型使用@Bean(autowire = Autowire.BY_NAME)不会注入

	protected void autowireByName(
			String beanName, AbstractBeanDefinition mbd, BeanWrapper bw, MutablePropertyValues pvs) {
		//从我们的bean定义中解析出我们的所有属性对象
		String[] propertyNames = unsatisfiedNonSimpleProperties(mbd, bw);
		//循环我们当前bean的属性
		for (String propertyName : propertyNames) {
			if (containsBean(propertyName)) {
				//显示的调用getBean所有属性的名称bean显示调用BeanFactory
				Object bean = getBean(propertyName);
				//把我们依赖的属性添加到pvs中
				pvs.add(propertyName, bean);
				//注册当前bean和属性依赖bean的依赖关系
				registerDependentBean(propertyName, beanName);
				if (logger.isDebugEnabled()) {
					logger.debug("Added autowiring by name from bean name '" + beanName +
							"' via property '&#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值