Spring IOC 三种配置方式详解

 更新时间:2024年05月11日 09:53:06   作者:黑影白  
这篇文章主要介绍了Spring IOC 三种配置方式,基于xml配置方式组件管理,基于注解方式管理和配置类方式管理,这三种方式,通过图文讲解的非常详细,需要的朋友可以参考下

1 基于xml配置方式组件管理

1. 所有内容写到xml格式配置文件中

2. 声明bean通过<bean标签

3. <bean标签包含基本信息(id,class)和属性信息 <property name value / ref

4. 引入外部的properties文件可以通过<context:property-placeholder

<property> 是在 Spring XML 配置文件中用来设置 bean 的属性值的元素。在上下文中,它通常作为 <bean> 元素的子元素出现。通过 <property> 元素可以设置 bean 的属性,使得 Spring 容器在创建 bean 实例时可以自动将这些属性值注入到 bean 中。

例如,在上面提到的配置中,使用了 <property> 元素设置了数据源的 URL、驱动类名、用户名和密码等属性值。其基本结构如下:

id 属性指定了 bean 的唯一标识符。

class 属性指定了 bean 的类型。

<property> 元素用于设置 bean 的属性值,name 属性指定了属性名,value 属性指定了属性值。

使用 <property> 元素可以完成对各种类型属性的设置,例如基本数据类型、引用类型(如其他 bean)、集合类型等。

5. IoC具体容器实现选择ClassPathXmlApplicationContext对象

在 Spring 中,IoC 容器是负责实例化、配置和组装 bean 的核心容器。ClassPathXmlApplicationContext 是 Spring 提供的 IoC 容器实现之一,它从类路径下的 XML 配置文件中读取配置信息,并根据配置创建相应的 bean 实例

如图:

实现方式:

  • 优点:XML配置方式提供了清晰的、结构化的方式来描述Bean之间的依赖关系。它非常适合大型项目,其中可能有数百个Bean需要配置。此外,XML配置提供了良好的可读性和可维护性,因为所有的配置都集中在一个或多个XML文件中。
  • 缺点:XML配置可能会变得相当冗长和复杂,特别是当项目中的Bean数量增加时。此外,XML配置是静态的,这意味着在运行时更改配置可能会比较困难。

2 基于注解方式管理

1. 注解负责标记IoC的类和进行属性装配

2. xml文件依然需要,需要通过<context:component-scan标签指定注解范围

3. 标记IoC注解:@Component,@Service,@Controller,@Repository 

  1. @Component
    • 这是最通用的Spring组件注解,标识一个类为Spring组件。被@Component注解的类将会作为候选组件被Spring的上下文进行扫描和自动配置。
    • 它不携带任何特殊的语义信息,仅仅表明该类是一个Spring组件。
  2. @Service
    • 用于标识业务逻辑层的组件(如服务类)。
    • @Service@Component的一个特殊化版本,它提供了更加明确的语义,表明这个类是一个服务组件。
    • 通常,服务层负责实现业务逻辑,调用数据访问层(由@Repository标识的组件)来获取数据,并可能将结果传递给表示层(由@Controller标识的组件)。
  3. @Controller
    • 用于标识Web应用中的控制器组件。
    • @Controller@Component的一个特殊化版本,用于处理HTTP请求,通常与Spring MVC一起使用。
    • 在控制器中,你可以定义方法来处理特定的HTTP请求,并返回视图名称或响应体。
  4. @Repository
    • 用于标识数据访问层的组件(如DAO类)。
    • @Repository@Component的一个特殊化版本,它提供了更加明确的语义,表明这个类是一个数据访问组件。
    • 在数据访问层,你可以定义方法来访问数据库、执行CRUD操作等。
    • Spring提供了额外的异常转换功能,可以将来自数据访问层的异常转换为DataAccessException类型的异常,这使得开发者可以更容易地处理这些异常。

4. 标记DI注解:@Autowired @Qualifier @Resource @Value

  1. @Autowired
    • @Autowired 是Spring提供的一个注解,用于自动装配bean。它可以自动装配构造器、setter方法或字段。当Spring容器在创建bean时,如果bean中包含了使用@Autowired注解的属性或方法,Spring容器将自动查找匹配的bean进行注入。
    • 如果存在多个相同类型的bean,Spring将不知道要注入哪一个,这时就需要使用@Qualifier注解来指定要注入的bean的名称。
    • 默认情况下,@Autowired是必需的(即如果找不到匹配的bean,则会抛出异常)。但是,你可以通过@Autowired(required = false)来指定注入是可选的。
  2. @Qualifier
    • @Qualifier 通常与@Autowired一起使用,用于消除多个相同类型bean的歧义。当Spring容器中存在多个相同类型的bean时,你可以使用@Qualifier注解来指定要注入的bean的名称。
    • @Qualifier可以用在方法、字段或构造器参数的上面,但最常见的用法是结合@Autowired一起使用在字段或setter方法上。
  3. @Resource
    • @Resource 是Java EE提供的注解,用于注入资源,如JavaBean、数据源等。在Spring中,它也可以用于自动装配bean。
    • @Resource可以指定要注入的bean的名称(通过name属性)或类型(通过type属性)。如果同时指定了nametype,Spring将首先按name查找,然后按type查找。
    • @Resource的一个优点是,即使没有匹配的bean,它也不会抛出异常(这取决于@Resource的具体用法和配置)。
  4. @Value
    • @Value 注解用于注入SpEL(Spring Expression Language)表达式、属性文件中的值或字面量值。
    • 你可以使用@Value来注入基本类型、字符串、其他bean的属性或SpEL表达式的结果。
    • 例如,你可以使用@Value("${some.property}")来注入属性文件中的值,或者使用@Value("#{someBean.someProperty}")来注入其他bean的属性值。

5. IoC具体容器实现选择ClassPathXmlApplicationContext对象

如图:

调用:

  • 优点:注解配置方式将配置信息直接嵌入到Java代码中,使得代码和配置更加紧密地结合在一起。这减少了配置文件的数量,使得项目更加简洁。此外,注解配置支持在运行时动态地修改配置,这增加了灵活性。
  • 缺点:过度使用注解可能会导致代码混乱和难以维护。此外,注解配置不如XML配置直观,可能需要更多的时间来学习和理解。

3 配置类方式管理

1. 完全注解方式指的是去掉xml文件,使用配置类 + 注解实现

2. xml文件替换成使用@Configuration注解标记的类

3. 标记IoC注解:@Component,@Service,@Controller,@Repository 

4. 标记DI注解:@Autowired @Qualifier @Resource @Value

5. <context:component-scan标签指定注解范围使用@ComponentScan(basePackages ={"com.atguigu.components"})替代

6. <context:property-placeholder引入外部配置文件使用@PropertySource({"classpath:application.properties","classpath:jdbc.properties"})替代

7. <bean 标签使用@Bean注解和方法实现

8. IoC具体容器实现选择AnnotationConfigApplicationContext对象

配置类:

调用:

  • 优点:JavaConfig配置方式使用Java类来定义Bean及其依赖关系,这使得配置更加类型安全,并且易于使用IDE的功能(如自动补全和重构)。此外,JavaConfig配置支持在运行时动态地修改配置,并且可以与XML和注解配置混合使用。
  • 缺点:JavaConfig配置需要编写额外的Java代码来定义Bean和依赖关系,这可能会增加项目的复杂性。此外,JavaConfig配置可能不如XML配置直观,特别是对于初学者来说。

以上就是Spring IOC 三种配置方式详解的详细内容,更多关于Spring IOC配置的资料请关注脚本之家其它相关文章!

相关文章

  • Spring MVC文件配置以及参数传递示例详解

    Spring MVC文件配置以及参数传递示例详解

    这篇文章主要给大家介绍了关于Spring MVC文件配置以及参数传递的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • IDEA中maven依赖报红的问题解决办法

    IDEA中maven依赖报红的问题解决办法

    这篇文章主要给大家介绍了关于IDEA中maven依赖报红的问题解决办法,在使用IDEA过程中,经常会出现maven依赖报红的问题,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • Maven配置仓库、阿里云镜像、环境变量(史上最全)

    Maven配置仓库、阿里云镜像、环境变量(史上最全)

    本文主要介绍了Maven配置仓库、阿里云镜像、环境变量,文中通过图文示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • RabbitMQ消息队列中的Channel信道参数详解

    RabbitMQ消息队列中的Channel信道参数详解

    这篇文章主要介绍了RabbitMQ消息队列中的Channel信道参数详解,信道是生产消费者与rabbit通信的渠道,生产者publish或者消费者消费一个队列都是需要通过信道来通信的,信道是建立在TCP上面的虚拟链接,需要的朋友可以参考下
    2023-08-08
  • java连接mysql数据库实现单条插入和批量插入

    java连接mysql数据库实现单条插入和批量插入

    这篇文章主要为大家详细介绍了java连接mysql数据库实现单条插入和批量插入,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • springboot2.x集成swagger的方法示例

    springboot2.x集成swagger的方法示例

    这篇文章主要介绍了springboot2.x集成swagger的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • java使用泛型实现栈结构示例分享

    java使用泛型实现栈结构示例分享

    泛型是Java SE5.0的重要特性,使用泛型编程可以使代码获得最大的重用。由于在使用泛型时要指明泛型的具体类型,这样就避免了类型转换。本实例将使用泛型来实现一个栈结构,并对其进行测试
    2014-03-03
  • 纯注解版spring与mybatis的整合过程

    纯注解版spring与mybatis的整合过程

    这篇文章主要介绍了纯注解版spring与mybatis的整合过程,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • mybatis批量添加,批量更新之前如何判断是否已经存在

    mybatis批量添加,批量更新之前如何判断是否已经存在

    这篇文章主要介绍了mybatis批量添加,批量更新之前如何判断是否已经存在,具有很好的参考价值,希望对的有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • java导出csv格式文件的方法

    java导出csv格式文件的方法

    这篇文章主要为大家详细介绍了java导出csv格式文件的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12

最新评论