SpringBoot——@Autowired注解的作用

@Controller
public class HomeController {
    @Autowired
    NewsService newsService;

    @Autowired
    UserService userService;

    @Autowired
    HostHolder hostHolder;

    private List getNews(int userId, int offset, int limit) {
        List newsList = newsService.getLatestNews(userId, offset, limit);

        List vos = new ArrayList<>();
        for (News news : newsList) {
            ViewObject vo = new ViewObject();
            vo.set("news", news);
            vo.set("user", userService.getUser(news.getUserId()));
            vos.add(vo);
        }
        return vos;
    }

autowired有4种模式,byName、byType、constructor、autodectect

其中@Autowired注解是使用byType方式的

byType方式是根据属性类型在容器中寻找bean类

@Autowired
NewsService newsService;

规则如下:

1.Spring先去容器中寻找NewsSevice类型的bean(先不扫描newsService字段)

2.若找不到一个bean,会抛出异常

3.若找到一个NewsSevice类型的bean,自动匹配,并把bean装配到newsService中

4.若NewsService类型的bean有多个,则扫描后面newsService字段进行名字匹配,匹配成功后将bean装配到newsService中

 

特例:

1.

@Autowired
@Qualifier("userJdbcImps")
private UserRepository userRepository;

若有多个UserRepository 类型的bean,可以指定bean的名称,名称为userJdbcImps,装配到userRepository中

 

2.

@Autowired(required = false)
NewsService newsService;

若找不到bean时不会抛出异常

你可能感兴趣的:(SpringBoot——@Autowired注解的作用)