# 使用注解方式实现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);
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

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

    @Resource(name = "userOracleDao")
    private IUserDao userDao;
或者
@Autowired
    private IUserDao userDao;
1
2
3
4
5

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

# 导航,上一页,下一页

14自动装配与Autowired
16Resource和Autowired注解的区别

# 支持我-微信扫一扫-加入微信公众号

Aseven公众号

# 赞赏作者

赞赏作者