• Spring基础01 @Autowired和@Resource的区别


    总结

    @Autowired:先byType再byName
    @Resource:先byName再byType(当指定@Resource name属性时,只会byName)
    @Autowired是spring的注解
    @Resource是Java提供的注解
    

    说明

    @Autowired的注入逻辑如下
    
    找到所有类型符合的bean
    如果没有类型符合的bean,则看@Autowired的required属性是否为true,是则抛出异常,否则返回null
    如果只有一个,则将这个bean注入
    如果有多个bean 4.1 选择其中带有Primary注解的bean,如果只有一个直接注入,如果有多个bean带有Primary注解则报错,如果不存在就下一步 4.2 选择其中优先级最高的bean(优先级使用javax.annotation.Priority表明),如果只有一个直接注入,如果有多个bean的优先级并列最高则报错,如果不存在就下一步 4.3 选择beanName和当前要注入的属性名相同的bean进行注入,有则注入,没有则报错
    
    @Resource的注入逻辑如下
    如果@Resource指定了name,则只会按照name进行查找,当找不到时抛出异常,找到将bean注入
    如果@Resource没有指定name,则把属性名作为名字进行查找,找到将bean注入,当按照名字查找不到时,按照类型进行查找
    

    举例

    public interface Human {
    	String runMarathon();
    }
    
    @Service
    public class Man implements Human {
    	public String runMarathon() {return "A man run marathon";}
    }
    
    @Service
    public class Woman implements Human {
    	public String runMarathon() {return "An woman run marathon";}
    }
    

    @Autowired

    @Service
    @Primary
    public class Man implements Human {
    	public String runMarathon() {return "A man run marathon";}
    }
    
    @Autowired
    @Qualifier("woman")
    	private Human human;
    }
    
    

    @Resource

    # 使用
    @Resource(name="woman")
    private Human human;
    
    通过知识/经验的分享,节省开发者的时间.
  • 相关阅读:
    用户描述
    课堂练习
    一阶段11.21
    一阶段11.20
    一阶段 11.19
    自己动手写spring(五) bean的生命周期管理
    自己动手写spring(四) 整合xml与注解方式
    自己动手写spring(三) 支持注解方式
    自己动手写spring(二) 创建一个bean工厂
    自己动手写spring(一) 使用digester
  • 原文地址:https://www.cnblogs.com/ysloong/p/15565410.html
Copyright © 2020-2023  润新知