zoukankan      html  css  js  c++  java
  • Spring注解@Resource和@Autowired的区别

    @Resource和@Autowired都是用来做bean的依赖注入的,两者都可以写在字段和setter方法上。

    java为我们提供了 javax.annotation.Resource这个注解。

    spring框架提供了org.springframework.beans.factory.annotation.Autowired。

    @Autowire 默认按照类型装配,默认情况下它要求依赖对象必须存在如果允许为null,可以设置它required属性为false,如果我们想使用按照名称装配,可 以结合@Qualifier注解一起使用

    public class UserServiceImpl {
        // 下面两种@Autowired选用一种即可
    
        // 1.用于字段上
        @Autowired
        private UserDao userDao; 
        
        // 2.用于setter方法上
        @Autowired
        public void setUserDao(UserDao userDao) { 
            this.userDao = userDao;
        }
    }
    
    
    public class UserServiceImpl {
        @Autowired
        @Qualifier("userDao")
        private UserDao userDao; 
    }

    @Resource默认按照名称自动注入,有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。

    public class USerServiceImpl {
    
        // 下面两种@Resource只要使用一种即可
        // 1.用于字段上
        @Resource(name="userDao")
        //@Resource(type=UserDao.class)
        private UserDao userDao; 
    
        // 2.用于属性的setter方法上
        @Resource(name="userDao")
        public void setUserDao(UserDao userDao) { 
            this.userDao = userDao;
        }
    }

    两种方式在实际开发中并没有多大的区别,喜欢用那种都可以~

  • 相关阅读:
    圣战 [奇环, 树上差分]
    花火之声不闻于耳 [线段树]
    SP2878 KNIGHTS
    P5300 [GXOI/GZOI2019]与或和 [单调栈]
    Speike [线段树, 动态规划]
    Jerry [动态规划]
    JSON对象
    正则书写
    flex布局实践
    数组对象的深拷贝与浅拷贝
  • 原文地址:https://www.cnblogs.com/cralor/p/9177255.html
Copyright © 2011-2022 走看看