15-@Resource注解按名称装配

使用注解方式实现Spring IoC

回到spring导航页

两类自动装配注解

分类 注解 说明
按类型装配 @Autowired 按容器内对象类型动态注入属性,由Spring机构提供
@Inject 基于JSR-330(Dependency Injection for java)标准,其他同@Autowired,但不支持required属性
按名称装配 @Named 与@Inject配合使用,JSR-330规范,按属性名自动装配属性
@Resource 基于JSR-250规范,优先按名称、再按类型智能匹配

15-@Resource注解按名称装配

@Resource装配规则

  1. @Resource设置name属性,则按name在IoC容器中将bean注入
  2. @Resource未设置name属性
    2.1 以属性名作为bean name在IoC容器中匹配bean,如有匹配则注入
    2.2 按属性名未匹配,则按类型进行匹配,同@Autowired,需加入@Primary解决类型冲突

    使用建议
    在使用@Resource对象时推荐设置name或保证属性名与bean名称一致
package com.torey.spring.ioc.service;

import com.torey.spring.ioc.dao.IUserDao;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * @Author http://torey611.gitee.io/li-tao-feng/
 * @Email torey6061@qq.com
 * @Date 2021/5/1 7:27
 * @描述:
 */
@Service
public class DepartmentService {
    /**
     * 1. @Resource设置name属性,则按name在IoC容器中将bean注入
     * 2. @Resource未设置name属性
     * 2.1 以属性名作为bean name在IoC容器中匹配bean,如有匹配则注入
     * 2.2 按属性名未匹配,则按类型进行匹配,同@Autowired,需加入@Primary解决类型冲突
     * 使用建议:在使用@Resource对象时推荐设置name或保证属性名与bean名称一致
     */

//    @Resource
//    private IUserDao userDao;
//    @Resource
//    private IUserDao userOracleDao;

    @Resource(name = "userOracleDao")
    private IUserDao userDao;

    public void getById(Long id){
        System.out.println(this.getClass().getName() + ".getById()");
        userDao.getById(id);
    }
}

按属性注入时,字段是private,是如何赋值的

    @Resource(name = "userOracleDao")
    private IUserDao userDao;
或者
@Autowired
    private IUserDao userDao;

答:IoC反射给属性赋值时,会先将private修改成public,赋值完毕后,再public将修改成private

导航,上一页,下一页

14自动装配与Autowired

16Resource和Autowired注解的区别

赞赏作者

15-@Resource注解按名称装配
上一篇:Spring注解的使用


下一篇:SpringIOC框架简单实现(注解实现)