java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Spring IOC配置

Spring IOC 三种配置方式详解

作者:黑影白

这篇文章主要介绍了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 实例

如图:

实现方式:

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对象

如图:

调用:

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对象

配置类:

调用:

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

您可能感兴趣的文章:
阅读全文