Spring框架中Bean的各种加载方式详解

 更新时间:2023年08月01日 09:01:30   作者:IT小辉同学  
这篇文章主要介绍了Spring框架中Bean的各种加载方式详解,在Java中,"Bean"通常指的是由Spring框架管理的对象实例,Spring提供了多种方式来加载Bean,以满足不同的需求和场景,需要的朋友可以参考下

Bean的各种加载方式

在Java中,"Bean"通常指的是由Spring框架管理的对象实例。Spring提供了多种方式来加载Bean,以满足不同的需求和场景。

1.基于XML配置的加载

这是Spring早期版本中最常见的加载方式。通过在XML配置文件中定义Bean的声明和依赖关系,Spring可以在应用程序启动时读取并实例化这些Bean。

XML配置文件通常使用<bean>标签来声明Bean,并使用属性或构造函数参数来设置Bean的属性值和依赖关系。

示例:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="userService" class="com.example.UserService">
        <property name="userRepository" ref="userRepository"/>
    </bean>
    <bean id="userRepository" class="com.example.UserRepository"/>
</beans>

2.基于Java配置的加载

Spring提供了基于Java的配置方式,通过Java类代替XML文件来定义Bean。这种方式使用@Configuration注解标记一个类,并在该类中使用@Bean注解声明Bean的实例化和依赖关系。

示例:

@Configuration
public class AppConfig {
    @Bean
    public UserService userService() {
        return new UserService(userRepository());
    }
    @Bean
    public UserRepository userRepository() {
        return new UserRepository();
    }
}

3.基于注解的加载

使用注解来标记Bean类和依赖关系,这种方式称为基于注解的Bean加载。

Spring提供了各种注解,如@Component@Service@Repository等,用于标记不同类型的Bean。

同时,可以使用@Autowired注解自动注入依赖关系。

示例:

@Service
public class UserService {
    private UserRepository userRepository;
    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}

4.基于扫描的加载

在基于注解的加载方式中,还可以使用@ComponentScan注解来指定要扫描的包,Spring会自动扫描这些包并识别带有特定注解的类,将它们作为Bean注册到应用程序上下文中。

示例:

@Configuration
@ComponentScan("com.example")
public class AppConfig {
    // Bean declarations are not required here if using component scanning
}

5.基于XML和注解的混合加载

在一些场景下,可能会同时使用XML配置和注解来加载Bean。这种混合方式允许在XML文件中声明一些Bean,同时使用注解来标记其他Bean和依赖关系。

示例:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="userService" class="com.example.UserService"/>
</beans>
@Service
public class UserRepository {
    // ...
}

这些是Spring中常见的Bean加载方式。根据具体需求和项目结构,可以选择适合的加载方式。

概念区分

我们会隐约感觉到,似乎@Configuration@Component是同一个东西呀,似乎没有什么区别,这里我们稍微做一个区分,加深理解,同时也解开心中疑惑!

@Configuration@Component是Spring框架中两个重要的注解,它们之间有一些区别,主要体现在它们的作用和用途上:

@Configuration

@Configuration注解用于标记Java类,表明这个类是一个配置类,其中定义了一个或多个Spring Bean的定义。

配置类中通常使用@Bean注解声明Bean的实例化和依赖关系。

@Configuration类可以看作是对XML配置文件的替代,通过Java代码来配置应用程序的组件。

关键点:

  • @Configuration用于定义配置类,Spring容器会解析这个类,并将其中声明的Bean注册到容器中。
  • @Bean注解用于在配置类中声明Bean的实例化,方法名即为Bean的名称,返回值即为Bean的实例。
  • 配置类中可以包含其他Java配置元素,如条件化配置,Bean的初始化等。

示例:

@Configuration
public class AppConfig {
    @Bean
    public UserService userService() {
        return new UserService(userRepository());
    }
    @Bean
    public UserRepository userRepository() {
        return new UserRepository();
    }
}

@Component

@Component注解是Spring中最通用的注解之一,用于标记一个类为Spring Bean。

Spring容器会自动扫描指定包及其子包下的所有类,识别标记了@Component以及其派生注解(如@Service@Repository@Controller等)的类,并将其实例化为Bean。

关键点:

  • @Component用于标记普通的Spring Bean类,这些类可能是服务、存储库、控制器或其他组件。
  • @Component可以被用于自动装配(依赖注入)等场景,而无需在配置类中显式声明Bean的定义。

示例:

@Component
public class UserRepository {
    // ...
}

区别:

  • 主要作用:@Configuration用于定义配置类和Bean的声明,而@Component用于标记普通的Bean类。
  • 使用场景:@Configuration通常用于创建Spring的配置类,用Java代码取代XML配置;而@Component用于标记普通的Bean,让它们被Spring容器管理。
  • 扫描方式:@Configuration不会被自动扫描,必须显式引入到配置中;而@Component及其派生注解会被Spring容器自动扫描并注册为Bean。
  • 层级关系:@Configuration是一种特殊的@Component,所以它们之间是继承关系,但在使用时要注意不要将配置类误用为普通Bean。

综上所述,@Configuration主要用于定义配置类,用Java代码配置Spring的Bean和组件,而@Component用于标记普通的Bean类,让它们被Spring容器管理。在实际开发中,两者经常会结合使用,通过配置类来声明一些特殊的Bean和配置,然后再通过自动扫描来注册其他普通的Bean。

就是使用上稍作区分,大家在概念上可以理解为一致!

到此这篇关于Spring框架中Bean的各种加载方式详解的文章就介绍到这了,更多相关Spring中Bean的加载方式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java导出excel时合并同一列中相同内容的行思路详解

    Java导出excel时合并同一列中相同内容的行思路详解

    这篇文章主要介绍了Java导出excel时合并同一列中相同内容的行,需要的朋友可以参考下
    2018-06-06
  • Java从零编写吃货联盟订餐系统全程讲解

    Java从零编写吃货联盟订餐系统全程讲解

    这篇文章主要介绍了Java订餐系统,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-12-12
  • mybatis-generator如何自定义注释生成

    mybatis-generator如何自定义注释生成

    这篇文章主要介绍了mybatis-generator如何自定义注释生成的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • JPA中@ElementCollection使用示例详解

    JPA中@ElementCollection使用示例详解

    在JPA中,@ElementCollection注解主要用于映射集合属性,例如List、Set或数组等集合属性,以及Map结构的集合属性,每个属性值都有对应的key映射,这篇文章主要介绍了JPA中@ElementCollection使用,需要的朋友可以参考下
    2023-11-11
  • Spring MVC中@Controller和@RequestMapping注解使用

    Spring MVC中@Controller和@RequestMapping注解使用

    这篇文章主要介绍了Spring MVC中@Controller和@RequestMapping注解使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Maven Repository 使用方法

    Maven Repository 使用方法

    对于Java开发者来说,Maven Repository是个必须掌握的网站,它可以让开发者更加方便地管理和维护 Java 项目的依赖项,同时简化了项目开发的过程,这篇文章主要介绍了Maven Repository 使用方法,需要的朋友可以参考下
    2024-02-02
  • SpringBoot如何自定义线程池配置类

    SpringBoot如何自定义线程池配置类

    有时候我们在项目中做一些长链路的跑批任务时,基于Springboot项目的定时任务,我们可以指定一个自定义的线程配置类进行单独提供给具体跑批任务使用,而不占用整个系统资源,这篇文章主要介绍了SpringBoot如何自定义线程池配置类,需要的朋友可以参考下
    2024-04-04
  • Springmvc RequestMapping请求实现方法解析

    Springmvc RequestMapping请求实现方法解析

    这篇文章主要介绍了Springmvc RequestMapping请求实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • SpringBoot从yml配置文件中读常用参数值实例方法

    SpringBoot从yml配置文件中读常用参数值实例方法

    在本篇文章里小编给大家整理了关于SpringBoot从yml配置文件中读常用参数值实例方法,有需要的朋友们学习下。
    2019-12-12
  • SpringMVC实现通过邮件找回密码功能

    SpringMVC实现通过邮件找回密码功能

    本篇文章主要介绍的是SpringMVC实现通过邮件找回密码功能,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧。
    2016-10-10

最新评论