Spring IOC 三种配置方式

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配置直观,特别是对于初学者来说。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值