Spring(一篇就懂)

Spring框架简介

  • Spring 是一个开源的Java企业级应用开发框架。

  • 特点

    1. 控制反转(IoC):通过依赖注入(DI)减少组件间的耦合,由Spring容器负责对象的创建和绑定。

    2. 面向切面编程(AOP):允许开发者分离应用程序的业务逻辑与系统服务(如事务管理和安全性)。

    3. 容器:提供用于配置和管理对象生命周期的容器,可通过XML、注解或Java代码配置。

    4. 抽象:为多种编程模型和协议(如JDBC、JMS、JPA等)提供抽象层,简化使用。

    5. 声明式事务管理:支持声明式事务管理,简化事务操作并分离业务代码。

    6. 社区和生态系统:拥有庞大的开发者社区及相关项目(如Spring Boot、Spring Cloud、Spring Data等)。

使用Spring完成第一个案例的步骤

  1. 创建Maven项目。

  2. pom.xml中导入Spring的JAR包:

     <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-context</artifactId>
         <version>5.2.9.RELEASE</version>
     </dependency>

  3. 配置Bean对象的XML文件。

  4. 编写Spring测试代码:

     
    public class MainApp {
         public static void main(String[] args) {
             ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("bean.xml");
             HelloWorld helloWorld = (HelloWorld) app.getBean("helloWorld");
             String message = helloWorld.getMessage();
             System.out.println(message);
         }
     }

BeanFactory和IOC容器

  • BeanFactory:Spring中最基础的核心接口,提供IOC功能,负责实例化、配置和组装Bean。

  • ApplicationContext:BeanFactory的子接口,提供更多企业级支持功能,如国际化、事件传播、AOP等。

IOC和DI

  • IOC(控制反转):将对象的创建和管理控制权从程序代码转移到外部容器或框架。

  • DI(依赖注入):实现IOC的具体技术,通过动态注入依赖关系到组件中,降低组件间耦合度。

Bean实例化对象的基本流程

  1. 资源定位:通过资源定位机制找到配置文件。

  2. Bean定义读取:使用Bean定义读取器读取配置文件中的信息。

  3. 创建BeanDefinition对象:为每个Bean创建一个BeanDefinition对象。

  4. 注册BeanDefinition:将BeanDefinition对象注册到BeanDefinitionRegistry

  5. BeanDefinitionMap存储:存储在BeanFactoryBeanDefinitionMap中。

  6. 请求Bean实例:应用程序请求容器中的Bean时,查找BeanDefinitionMap

  7. 实例化Bean:根据BeanDefinition信息创建Bean实例。

  8. 依赖注入:通过构造器注入或设值注入为Bean实例注入依赖。

  9. Bean生命周期处理:调用Bean的生命周期回调方法。

  10. 存储到singletonObjects:单例Bean实例存储在容器的singletonObjects缓存中。

  11. 使用Bean:Bean实例准备好,可供应用程序使用。

  12. 容器关闭:调用单例Bean的销毁方法。

XML方式配置Bean

  • bean标签常用属性

    • id:Bean的唯一标识。

    • name:Bean的别名。

    • class:定义类的全限定名。

    • singleton:定义Bean是否为单例。

    • depends-on:指定当前Bean的依赖Bean。

    • init-method:指定Bean的初始化方法。

    • destroy-method:指定Bean的销毁方法。

    • lazy-init:指定Bean的初始化时间。

    • autowire:指定Bean的自动注入方式。

    • scope:Bean的作用范围。

    • dependency-check:指定Bean的依赖检查模式。

  • autowire:有五个值(no, byName, byType, constructor, autodetect, default)。

  • scope:有五个值(singleton, prototype, request, session, globalSession)。

  • dependency-check:有四个值(simple, object, all, none)。

  • property标签

    • name:指定属性的名称。

    • value:指定属性的值。

    • ref:指定引用对象类型的值。

Spring实例化对象的几种方式

  1. 通过构造器实例化。

    • Spring容器启动时读取XML配置文件。

    • 根据配置文件中的<bean>标签,使用反射机制创建ExampleBean类的实例。

    • 如果有属性注入,Spring会在创建实例后填充这些属性。

  2. 通过FactoryBean接口进行实例化。

    • 建一个类实现FactoryBean接口。

    • 实现getObject()方法,该方法返回实际要创建的Bean实例。

    • 在Spring配置中定义这个FactoryBean。
       

  3. 通过静态工厂。

  4. 通过实例工厂。


  5. 通过注解。

    • 在类上添加@Component或其衍生注解(如@Service、@Repository)。

    • 配置Spring的组件扫描,指定要扫描的包。

    • 启动Spring容器,它会扫描指定的包并查找标记了注解的类。

    • Spring容器会自动实例化这些类。

Spring依赖注入的几种方式

  1. set方式注入。

  2. 构造器方式注入。

    还是以set方式注入的代码为例;使用构造器方式注入的话只需要改变两个地方即可: 一:把set方法改成带参的构造方法; 二:把bean.xml里面的<property>标签换成<constructor-arg>标签 详解如图所示:

  3. 自动装配(byName, byType)

    • autowire='byName'

      在前面set方式注入的基础代码上,使用自动装配后就不需要我们手动在bean.xml文件里面用标签去配置,而是使用autowire属性指明。看图说明:

    • autowire='byType'

      如果自动装配时选择byType作为值,那么名字一不一致就无所谓了,但是要求注入的Type只能是一个,如果有多个则发生报错。看图:

  • 11
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud是一个用于构建分布式系统的开发工具集合。它基于Spring Boot框架,提供了一系列的组件和工具,用于简化分布式系统的开发和部署。在使用Spring Cloud时,通常需要引入一些依赖。 首先,我们需要引入`spring-cloud-starter-openfeign`依赖,它是用于支持服务间的远程调用的组件。这个依赖可以通过在项目的`pom.xml`文件中添加以下代码来引入: ``` <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> ``` \[1\] 其次,Spring Cloud依赖于Spring Boot技术。Spring Boot是一个独立的系统,可以独立使用。它内置了Tomcat服务器,因此可以方便地进行开发和部署。Spring Cloud的各个组件都是基于Spring Boot构建的,所以在使用Spring Cloud之前,需要先引入Spring Boot的依赖。 最后,如果我们需要使用Netflix Ribbon作为负载均衡的组件,我们还需要引入`spring-cloud-starter-netflix-ribbon`依赖。这个依赖可以通过在项目的`pom.xml`文件中添加以下代码来引入: ``` <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency> ``` \[3\] 综上所述,Spring Cloud是一个用于构建分布式系统的开发工具集合,它基于Spring Boot框架。在使用Spring Cloud时,我们需要引入一些依赖,包括`spring-cloud-starter-openfeign`和`spring-cloud-starter-netflix-ribbon`。同时,我们还需要依赖于Spring Boot技术,它可以独立使用,并且内置了Tomcat服务器。 #### 引用[.reference_title] - *1* *3* [SpringCloud Alibaba详解](https://blog.csdn.net/qq_43649937/article/details/130462905)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [spring cloud](https://blog.csdn.net/ne_123456/article/details/126407503)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值