Spring 使用xml注入和注解注入

13 篇文章 0 订阅

使用xml注入属性值的时候,该属性必须要有set方法。
使用注解注入属性值的时候,该属性可以没有set方法。

为什么注解@Autowired注入属性的时候,可以没有set方法呢?
既然是注解,那么肯定有对注解@Autowired的解析。
触发解析:
Spring容器在每个Bean实例化之后,调用AutowiredAnnotationBeanPostProcessor的postProcessMergedBeanDefinition方法。
Spring在每个Bean实例化的时候,调用populateBean进行属性注入的时候,即调用postProcessPropertyValues方法。
具体代码就不深究了,其中有一段主要代码

没有set方法,field.set(bean,value);能对属性设值吗?
我们来做个验证:
User类的test属性没有set方法

public class User {
	
	private String test;

	@Override
	public String toString() {
		return "User [test=" + test + "]";
	}
	
}
	public static void main(String[] args) throws Exception {
		
			User user = new User();
			Class clazz = User.class;
			Field field = clazz.getDeclaredField("test");
			field.setAccessible(true);
			field.set(user, "qqq");
			
			System.out.println(user);
	    }

结果:没有set方法,field.set(bean,value);能对属性设值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值