Spring Bean配置方式总结

 更新时间:2023年12月15日 09:41:51   作者:是只菜鸟呀  
定义Spring Bcan的3种方式分别是:基于XML 的方式配置、基于注解扫播方式配置、基于元数据类的配置,本文就通过代码示例给大家详细讲讲这三种配置方式,需要的朋友可以参考下

SpringBean是Spring中最基本的组成单元,Spring 官方文档对 Bean 的解释是这样的:

In Spring, the objects that form the backbone of your application and that are managed by theSpring loC container are called beans. A bean is an object that is instantiated, assembled, and managedby a Spring IoC container.

翻译过来就是:

在Spring中,构成应用程序主并由SpringIoC容器管理的对象被称为Bean。Bean是一个由SpringIoC容器实例化、组装和管理的对象。

从官方定义中,我们可以提取出以下信息

1)Bean 是对象,一个或者多个不限定

2)Bean 托管在Spring 中一个叫作IoC的容器中

3)我们的程序是由一个个 Bean 构成的。

Spring 是通过声明式配置的方式来定义 Bean的,所有创建Bean需要的前置依赖或者参数都通过配置文件先声明,Spring 启动以后会解析这些声明好的配置内容。

那么,我们该如何定义Spring 中的 Bean呢?一般来说,Spring Bean的定义配置有3种方法。

1基于XML的方式配置,这种配置方式主要适用于以下两类场景

(1)Bean 实现类来自第三方类库,比如 DataSource 等。

(2)需要定义命名空间的配置,如 context、aop、mvc等。

举个例子,来看一段代码。

<beans>
    <import resource="resource1.xml"/>//导入其他配置文件Bean 的定义
    <import resource="resource2,xmI" />
        <bean id="userService" class="com.gp.s.UserService" init-method="init" destory-method="destory">
        </bean>
        <bean id="message”class="java.lang.String">
            <constructor-arg index="o" value="test"></constructor-arg>
        </bean>
</beans>

这段代码是标准的 Spring 配置内容,首先导入一个叫作 resourcel.xm标准配置文件。然后,导入第二个标准配置文件resource2.xml。接着,定义一个叫作 userService的 Bean,对应的类是 com.gp.s.UserService,并且声明了在userService 实例化之后要用init0方法,在userService 销毁之后调用destory0方法。

2基于注解扫描的方式配置,这种配置方式主要适用于开发中需要引用的类,如ControleService、Dao等,配置代码如下。

<context:component-scan base-package="com.gp.s">
    <!-- 包含的目标类-->
    <context:include-filter type="regex” expression="com.gp.s.mall.*"/>
    <!-- 排除的目标类-->
    <context;exclude-filter type="aspectj"
                    expression="com.gp.s.mall.*Controller+"/>
</context:component-scan>

在这段配置中,context:component-scan 相当于使用了 Spring 内置的扫描注解的组@ComponentScan ,声明了需要扫描的基础包路 com.gp.s ,把所有com.gp.s.mall 下面的子包全部纳入扫描范围,并且排除了 com.gp.s.mall包面所有以Controller 结尾或者包含 Controller 结尾的类
使用 Spring 容器管理组件的 beanName 规则,默认是类名首字母变小写,可以自己修改。

Spring 主要提供了 4 种内置的注解来声明 Bean。它们分别是

@Controller (声明为控制层组件的Bean)、

@Service (声明为业务逻辑层组件的 Bcan)、

@Repository (声明为数据访间层组件的当对组件的层次难以定位的时候使用

@Component 注解来声明。Bean)

Spring 提供了4个注解,这些注解的作用与XML定义 Bean 的作用一样,都是将组件交给Spring 容器管理。组件的名称默认是类名 (首字母变小写),可以自己修改。

3基于Java类的配置,这种配置方式主要适用于以下两类场景。

(1)需要通过代码控制对象创建逻辑的场景。

(2)实现零配置,消除XML 配置文件的场景

同样还是举个例子,来看一段代码:

@Configurationpublic 
class BeansConfiguration {
    @Bean
    public Student student(){
        Student student = new Student();student.setName("三");
        student.setTeacher(teacher());
        return student;
    }
    @Bean
    public Teacher teacher(){
        Teacher teacher= new Teacher();
        teacher.setName("Tom");
        return teacher;
    }
}

通过分析这段代码,可以了解到使用基于类的配置需要以下步骤。

1)在 BeansConfiguration 类上配置@Configuration 注解,表示将 BeansConfiguration 类定义为Bean的元数据。

2)在方法上使用@Bean 注解,方法名默认就是 Bean 的名称,方法返回值就是 Bean 的实例

3)过AmnolationConfgApplicationContext 或子类来启动 Spring 容器,从而加载这些已声明好的注解配置。

总结一下,定义 Spring Bcan 的3 种方式分别是:基于XML 的方式配置、基于注解扫播方式配置、基于元数据类的配置。

那么Bcan 的配置定义好以后,Spring 又是如何加载这些 Bean 配置并创建 Bean 实例的哪:

Spring 解析这些声明好的配置内容,将这些配置内容都转化为 BeanDefinition 对多BeanDefinilion 中几平保存了配置文件中声明的所有内容,再将 BeanDefinition 保存bcanDcfinitionMap中,以beanName 作为key,以BeanDefinition 对象作为value。之后,Spring容器根据 beanName找到对应的 BeanDefinition,再去选择具体的创建策略。

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

相关文章

  • Java常见的3种文件上传方法和速度对比

    Java常见的3种文件上传方法和速度对比

    这篇文章介绍了Java常见的3种文件上传方法和速度对比,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • 使用Lombok子类继承父类,父类属性不生效问题及解决

    使用Lombok子类继承父类,父类属性不生效问题及解决

    在使用Lombok库时,若子类继承父类,父类的属性可能不会自动生效,为解决此问题,可通过在父类上添加@Getter和@Setter注解,或使用@SuperBuilder注解来确保父类属性在子类中有效,同时,需注意确保Lombok版本一致且正确配置了相关插件
    2024-10-10
  • Java类型通配符应用实战分析

    Java类型通配符应用实战分析

    这篇文章主要介绍了Java类型通配符应用实战,简单分析了Java类型通配符概念、原理并结合实例形式给出了Java类型通配符相关使用技巧,需要的朋友可以参考下
    2019-07-07
  • 浅谈升级Spring Cloud到Finchley后的一点坑

    浅谈升级Spring Cloud到Finchley后的一点坑

    这篇文章主要介绍了浅谈升级Spring Cloud到Finchley后的一点坑,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • Springboot中MyBatisplus使用IPage和Page分页的实例代码

    Springboot中MyBatisplus使用IPage和Page分页的实例代码

    这篇文章主要介绍了Springboot中MyBatisplus使用IPage和Page分页,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • SpringBoot2.0整合SpringCloud Finchley @hystrixcommand注解找不到解决方案

    SpringBoot2.0整合SpringCloud Finchley @hystrixcommand注解找不到解决方案

    这篇文章主要介绍了SpringBoot2.0整合SpringCloud Finchley @hystrixcommand注解找不到解决方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Java文件读取写入后 md5值不变的实现方法

    Java文件读取写入后 md5值不变的实现方法

    下面小编就为大家分享一篇Java文件读取写入后 md5值不变的实现方法,具有很好的参考价值,希望对大家有所帮助
    2017-11-11
  • SpringBoot整合SpringCloud的过程详解

    SpringBoot整合SpringCloud的过程详解

    SpringCloud专注于为典型的用例和扩展机制提供良好的开箱即用体验,在介绍SpringCloud默认使用的注册中心前,先给大家介绍下分布式系统的三个指标,具体内容详情跟随小编一起看看吧
    2021-09-09
  • Netty中的心跳检测机制详解

    Netty中的心跳检测机制详解

    这篇文章主要介绍了Netty中的心跳检测机制详解,Netty 是 基于 TCP 协议开发的,在四层协议 TCP 协议的实现中也提供了 keepalive 报文用来探测对端是否可用,TCP 层将在定时时间到后发送相应的 KeepAlive 探针以确定连接可用性,需要的朋友可以参考下
    2023-12-12
  • InputStream数据结构示例解析

    InputStream数据结构示例解析

    这篇文章主要为大家介绍了InputStream数据结构示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10

最新评论