Spring和Spring Framework

SpringFramework详解:Bean容器、IOC、DI与Bean生命周期
本文详细介绍了Spring框架的核心概念,包括Bean容器如何管理对象生命周期、依赖注入(DI)的两种方式(属性注入和构造方法注入)、以及BeanFactory和ApplicationContext的区别。

版权声明:本文为海TAO原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.youkuaiyun.com/weixin_45397953/article/details/106877426

Spring和Spring Framework

Spring是一个生态体系,其中包含了Spring Framework、Spring Boot、Spring cloud等等。我们一般常说的Spring框架指的是Spring Framework,所以这篇文章准确的说是对Spring Framework的理解

Spring Framework是一个Bean容器

1、Bean容器

通过Bean容器统一管理对象的生命周期
优点:
(1)减少对象的创建、销毁的步骤,提高了效率
(2)可以统一管理对象的依赖关系

Bean配置项:
(1)scope:singleton(单例)和prototype(原型),每次从容器中获取对象时,是否获取的是同一个(spring默认的是singleton
(2)静态工厂方法:factory-method
(3)实例工厂方法:factory-bean+factory-method

    <!--通过静态方法实例化对象-->
    <bean id="duck3" class="Frank.model.DuckFactory" factory-method="create"></bean>

  
  
  • 1
  • 2
    <bean id="duckFactory" class="Frank.model.DuckFactory" />
    <!--通过实例方法实例化对象-->
    <bean id="duck4" factory-bean="duckFactory" factory-method="create2" />

  
  
  • 1
  • 2
  • 3

2、IOC

IOC(Inversion of Control)控制反转
bean对象从程序自行管理的方式,转变为Spring容器管理,控制权发生了反转
优势:容器统一管理bean对象,对象解耦

3、DI

DI(Dependency Injection)依赖注入
bean对象设置属性的依赖关系
注入方式:
(1)属性注入(无参构造方法)
(2)构造方法注入

属性名称描述
idBean的唯一标识符,Spring容器对Bean的配置和管理都是通过该属性完成
nameSpring容器也可以通过此属性对容器中Bean进行配置和管理
class该属性指定了Bean的具体实现类,必须是个完整的类名,使用类的全限定名
scop设定Bean的作用域
constructor-arg< bean>元素的子元素,可以使用此元素传入构造参数进行实例化
property< bean>元素的子元素,用于调用 Bean 实例中的 Set 方法完成属性赋值,从而完成依赖注入。该元素的 name 属性指定 Bean 实例中的相应属性名
value< property> 和 < constractor-arg> 等元素的子元素,用于直接指定一个常量值
list封装List或数组类型的依赖注入
ref< property> 和 < constructor-arg> 等元素的子元索,该元素中的 bean 属性用于指定对 Bean 工厂中某个 Bean 实例的引用

下面是注入方式的举例:

  <!--定义Been对象,默认是通过无参构造生成对象 ,没有设置scope默认为singleton-->
    <bean id="duck1" class="Frank.model.Duck">
        <property name="name" value="Gaga" />
        <property name="age" value="10" />
    </bean>

  
  
  • 1
  • 2
  • 3
  • 4
  • 5
    <!--通过有参的构造方法定义Bean对象-->
    <bean id="duck2" class="Frank.model.Duck" scope="prototype">
        <constructor-arg name="name" value="烤鸭" />
        <constructor-arg name="age" value="2" />
    </bean>

  
  
  • 1
  • 2
  • 3
  • 4
  • 5
   <!--引用已有的bean对象:ref -->
    <bean id="duckShop" class="Frank.model.DuckShop">
        <property name="ducks">
            <list>
                <ref bean ="duck1"/>
                <ref bean="duck2" />
            </list>
        </property>
    </bean>

  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

4、Bean的生命周期

在这里插入图片描述
(1)BeanNameAware接口:传入当前Bean的id
(2)BeanFactoryAware接口:传入当前工厂实例的引用
(3)ApplicationContextAware接口:传入当前ApplicationContext实例的引用
       Spring 容器可以管理 singleton 作用域 Bean 的生命周期。在此作用域下,Spring 能够精确地知道该 Bean 何时被创建,何时初始化完成,以及何时被销毁。
       对于 prototype 作用域的 Bean,Spring 只负责创建,当容器创建了 Bean 的实例后,Bean 的实例就交给客户端代码管理,Spring 容器将不再跟踪其生命周期。

BeanFactory和ApplicationContext

BeanFactory是基础类型的IOC容器,负责初始化各种Bean,并调用他们的生命周期方法

ApplicationContext是BeanFactory的子接口

BeanFactory 和 ApplicationContext 都是通过 XML 配置文件加载 Bean 的,二者的主要区别在于,如果Bean的某一个属性没有注入,则使用BeanFactory加载后,在第一次调用getBean()方法时会抛异常,而ApplicatonContext则在初始化的时候自检,这样有利于检查所依赖的属性是否注入

### SpringSpring Framework 的区别与联系 Spring Spring Framework 是密切相关但不完全相同的概念。以下是它们的区别与联系的详细分析: #### 联系 Spring 是一个广泛的生态系统,涵盖了多个项目工具,而 Spring Framework 是其中的核心组件[^1]。Spring Framework 提供了基础的功能支持,例如依赖注入(DI)、面向切面编程(AOP)、数据访问、事务管理等,这些功能是整个 Spring 生态系统的基础[^4]。 #### 区别 1. **定义范围** - Spring 是一个技术体系或生态系统的统称,包含了多个子项目,例如 Spring Boot、Spring Cloud、Spring Data 等。 - Spring FrameworkSpring 生态中的核心框架,专注于提供基础功能支持[^3]。 2. **功能定位** - Spring Framework 主要关注于构建灵活、可扩展的应用程序框架,提供了丰富的功能模块,如 Spring Core、Spring MVC、Spring JDBC 等。 - 其他 Spring 子项目(如 Spring Boot Spring Cloud)则是在 Spring Framework 的基础上进行扩展,提供了更高级的功能,例如快速开发(Spring Boot)分布式系统支持(Spring Cloud)[^5]。 3. **使用场景** - Spring Framework 更适合需要高度定制化灵活性的项目,开发者可以手动配置几乎所有的功能。 - Spring Boot 则更适合快速开发,通过自动配置减少开发者的配置工作量[^5]。 4. **开发体验** - 使用 Spring Framework 需要开发者手动编写大量的配置文件(XML 或 Java Config),并且需要对框架有较深入的理解。 - Spring Boot 提供了默认配置约定优于配置的理念,大大简化了开发流程[^2]。 #### 示例代码 以下是一个简单的 Spring Framework Spring Boot 的对比示例: ```java // 使用 Spring Framework 的传统方式 public class TraditionalSpringApp { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); MyBean myBean = (MyBean) context.getBean("myBean"); myBean.doSomething(); } } ``` ```java // 使用 Spring Boot 的方式 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringBootApp { public static void main(String[] args) { SpringApplication.run(SpringBootApp.class, args); } } ``` 在上述代码中,Spring Framework 需要手动加载配置文件并获取 Bean 实例,而 Spring Boot 通过 `@SpringBootApplication` 注解自动配置机制,大幅简化了启动过程。 ### 总结 Spring 是一个包含多个项目的生态系统,而 Spring Framework 是其核心组件,提供了基础功能支持。其他项目(如 Spring Boot Spring Cloud)则是在 Spring Framework 的基础上进行了扩展,以满足不同的开发需求[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值