8、Spring之基于注解的自动装配

这篇具有很好参考价值的文章主要介绍了8、Spring之基于注解的自动装配。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

8.1、场景模拟

8.1.1、UserDao接口及实现类

8、Spring之基于注解的自动装配

package org.rain.spring.dao;

/**
 * @author liaojy
 * @date 2023/8/5 - 18:32
 */
public interface UserDao {

    void saveUser();

}

8、Spring之基于注解的自动装配

package org.rain.spring.dao.impl;

import org.rain.spring.dao.UserDao;
import org.springframework.stereotype.Repository;

/**
 * @author liaojy
 * @date 2023/8/5 - 18:33
 */
@Repository
public class UserDaoImpl implements UserDao {
    public void saveUser() {
        System.out.println("保存成功");
    }
}

8.1.2、UserService接口及实现类

8、Spring之基于注解的自动装配

package org.rain.spring.service;

/**
 * @author liaojy
 * @date 2023/8/5 - 18:35
 */
public interface UserService {

    void saveUser();

}

8、Spring之基于注解的自动装配

package org.rain.spring.service.impl;

import org.rain.spring.dao.UserDao;
import org.rain.spring.service.UserService;
import org.springframework.stereotype.Service;

/**
 * @author liaojy
 * @date 2023/8/5 - 18:36
 */
@Service
public class UserServiceImpl implements UserService {

    private UserDao userDao;

    public void saveUser() {
        userDao.saveUser();
    }

}

8.1.3、UserController

8、Spring之基于注解的自动装配

package org.rain.spring.controller;

import org.rain.spring.service.UserService;
import org.springframework.stereotype.Controller;

/**
 * @author liaojy
 * @date 2023/8/5 - 18:38
 */
@Controller("myUserController")
public class UserController {

    private UserService userService;

    public void saveUser(){
        userService.saveUser();
    }

}

8.1.4、bean配置

8、Spring之基于注解的自动装配

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!--
        对指定的package进行扫描,将使用组件注解的类的对象,交给spring的ioc容器来管理
    -->
    <context:component-scan base-package="org.rain.spring"></context:component-scan>

</beans>

8.1.5、测试

8、Spring之基于注解的自动装配

由控制台日志可知,组件注解+组件扫描,存在尚未实现依赖注入的问题

    @Test
    public void testAutowireByAnnotation(){

        ApplicationContext ioc = new ClassPathXmlApplicationContext("spring-ioc-annotation.xml");
        UserController userController = ioc.getBean(UserController.class);
        userController.saveUser();

    }

8.2、@Autowired注解

@Autowired:实现自动装配功能的注解,其能够标识的位置有三处

8.2.1、方式一:标识在成员变量上(常用)

8、Spring之基于注解的自动装配

    @Autowired
    private UserDao userDao;

8、Spring之基于注解的自动装配

    @Autowired
    private UserService userService;

8、Spring之基于注解的自动装配

8.2.2、方式二:标识在setter方法上

8、Spring之基于注解的自动装配

    private UserDao userDao;

    @Autowired
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

8、Spring之基于注解的自动装配

    private UserService userService;

    @Autowired
    public void setUserService(UserService userService) {
        this.userService = userService;
    }

8、Spring之基于注解的自动装配

8.2.3、方式三:标识在有参构造方法上

8、Spring之基于注解的自动装配

    private UserDao userDao;

    @Autowired
    public UserServiceImpl(UserDao userDao) {
        this.userDao = userDao;
    }

8、Spring之基于注解的自动装配

    private UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

8、Spring之基于注解的自动装配

8.3、@Autowired的工作流程

  • 默认通过byType的方式,在IOC容器中匹配类型相同的bean,为属性赋值

  • 如果有多个类型匹配的bean,则自动转换为通过byName的方式,在IOC容器中匹配id和属性名相同的bean,为属性赋值

  • 如果有多个类型匹配的bean,且在IOC容器中没有找到id和属性名相同的bean;
    则可以使用@Qualifier注解指定某个bean的id,将这个bean赋值给属性

8、Spring之基于注解的自动装配

如果有多个类型匹配的bean,且在IOC容器中没有找到id和属性名相同的bean,也没有使用@Qualifier注解指定将某个bean赋值给属性;则会抛出异常NoUniqueBeanDefinitionException

    @Autowired
    @Qualifier("myUserService")
    private UserService userService;

8.4、@Autowired的注意事项

在@Autowired注解中有一个属性required,默认值为true,意思是必要完成自动装配

如果在IOC容器中没有匹配的bean,就会抛出异常NoSuchBeanDefinitionException

为此可以将required属性的值设置为false,这样能装配就装配,不能装配就使用默认值

8、Spring之基于注解的自动装配

一般可以通过排查组件注解、组件扫描和@Qualifier注解,定位出为什么在IOC容器中没有匹配的bean文章来源地址https://www.toymoban.com/news/detail-628806.html

    @Autowired(required = false)
    private UserService userService;

到了这里,关于8、Spring之基于注解的自动装配的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • @SpringBootApplication注解的理解——如何排除自动装配 & 分布式情况下如何自动加载 & nacos是怎么被发现的

    spring作为主流的 Java Web 开发的开源框架,是Java 世界最为成功的框架,持续不断深入认识spring框架是Java程序员不变的追求。 本篇博客介绍SpringBootApplicant注解的自动加载相关内容 其他相关的Spring博客文章列表如下: Spring基础(核心容器)——从配置文件到注解开发 创建对象

    2024年02月07日
    浏览(33)
  • SpringBoot源码解读与原理分析(六)WebMvc场景的自动装配

    了解了SpringBoot的自动装配机制之后,研究一个常见且实用的场景:当项目整合SpringWebMvc后SpringBoot的自动装配都做了什么? 2.6.1 WebMvcAutoConfiguration 引入spring-boot-starter-web依赖后,SpringBoot会进行WebMvc的自动装配,处理的核心是一个叫WebMvcAutoConfiguration的自动配置类。 由以上源码

    2024年02月21日
    浏览(37)
  • 关于在 springboot 中使用 @Autowired 注解来对 TemplateEngine 进行自动装配时,无法注入的问题。

    本文是基于江南一点雨的 Spring Boot+Vue 系列视频教程第 三 章的第三节,详情参考Spring Boot+Vue系列视频教程 在观看学习这一节时,发现当进行手动渲染 Thymeleaf 模板时,通过 @Autowired 注解来对 TemplateEngine 进行自动装配时,发现 idea 对其显示 No beans of \\\'TemplateEngine \\\' type of found。

    2024年02月02日
    浏览(34)
  • spring自动装配原理

    为了搞明白自动装配原理,需要知道spring容器管理bean的生命周期 分为四步: 1、实例化 读取spring配置文件 通过反射进行bean的实例化(eg:通过BeanFactory实例化) 2、属性赋值 解析 自动装配 (byName、byType、constractor、default)DI的体现 循环依赖 3、初始化 调用XXXAware回调方法

    2024年02月02日
    浏览(28)
  • Spring Boot自动装配

    自动装配是 Spring Boot 最核心的功能之一,第三方可以基于这个特性非常方便的和 Spring 做整合,实现自己的 Starter,做到开箱即用。 Java 早期并不支持注解,所以那会儿 Spring 只能通过 xml 的形式来配置。早期项目里要引入一个功能模块,首先我们要引入 SDK,然后在 xml 里配置

    2024年01月23日
    浏览(32)
  • Spring Boot 自动装配原理

    Java面试题目录 Spring Boot自动装配原理   Spring Boot启动类上的 @SpringBootApplication 注解中包含 @EnableAutoConfiguration 注解,表示开启自动装配。在@EnableAutoConfiguration注解中使用@Import注解引入 AutoConfigurationImportSelector 组件,此类中通过 SpringFactoriesLoader.loadFactoryNames() 方法来扫描所有

    2024年01月25日
    浏览(32)
  • spring boot的自动装配原理

    作者: 逍遥Sean 简介:一个主修Java的Web网站游戏服务器后端开发者 主页:https://blog.csdn.net/Ureliable 觉得博主文章不错的话,可以三连支持一下~ 如有需要我的支持,请私信或评论留言! Spring Boot是一个开源的Java框架,可以帮助开发者快速构建基于Spring的应用程序。Spring Boo

    2024年02月10日
    浏览(29)
  • Spring Boot自动装配原理(易懂)

    熟练使用Spring Boot那么自动装配原理的掌握是必不可少的 Spring Boot的自动装配实际上是从 META-INF/spring.factories 文件中获取到对应的需要进行自动装配的类,并生成相应的Bean对象,然后将它们交给Spring容器进行管理 启动类的@SpringBootAppliation注解是一个组合注解,由以下3个注解组

    2024年02月16日
    浏览(32)
  • spring中的Bean的自动装配

    自动装配是使用spring满足bean依赖的一种方法 spring会在应用上下文中为某个bean寻找其依赖的bean 在xml中显式配置;(bean标签和property标签) 在java中显式配置;(get,set方法) 隐式的bean发现机制和自动装配。(自动装配) Spring的自动装配需要从两个角度来实现,或者说是两个

    2024年02月15日
    浏览(30)
  • 深入了解Spring Boot自动装配

    Spring Boot的自动装配是一项强大的功能,能够简化应用程序的配置和开发过程。让我们通过一系列详细的例子来深入了解这一特性。 在Spring Boot中,自动装配是指框架根据应用程序的依赖关系,自动配置和装配相应的Bean,而无需手动设置。这使得开发者可以更专注于业务逻辑

    2024年01月23日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包