Spring,Spring Ioc,Bean详解

打印 上一主题 下一主题

主题 881|帖子 881|积分 2643

Spring框架

Spring框架是Java应用最广的框架,其的乐成来自于理念,并非是技能,此中几个理念非常重要,例如IoC(控制反转),AOP(面向切面编程)
Spring的优势


  • 低耦合/低侵入(解耦)

    • Spring通过IoC(控制反转)和DI(依赖注入)来实现低耦合高内聚

  • 声明式事件管理

    • Spring基于AOP的方式,使其可以或许在方法执行前后字段处理事件的开启,提交和回滚
    优势:

    • 使得开发者只需要关注业务逻辑,事件的工作提交给Spring自动处理
    • 淘汰代码冗余

  • 方便集成其他框架

    • Spring的焦点优点是其极强的集成能力,通过SpringORM可以轻易的集成MyBatis等框架

  • 降低 Java 开发难度

    • Spring 提供了自动设置功能,尤其是 Spring Boot.开发者无需关注繁琐的设置,Spring 会根据项目标依赖自动完成设置

  • Spring 框架中包括了 J2EE 三层的每一层的办理方案(一站式)

    • Spring 提供了企业级应用开发的完备办理方案,包括 表示层(Web 层)、业务层(Service 层)和 数据层(DAO 层)的支持。
    • 表示层(Web 层):Spring MVC 提供了强盛的 Web 功能,支持传统的 Web 应用和 RESTful API。
    • 业务层(Service 层):Spring 的焦点就是提供面向业务逻辑的功能,包括事件管理、AOP、数据访问等。
    • 数据层(DAO 层):Spring 提供了对数据库的支持,简化了 JDBC 操纵,而且通过 ORM 提供了对 Hibernate、JPA 等框架的集成。

Sprinp主要框架结构


  • Spring重要框架结构由焦点容器(Core Container).数据访问/集成(Data Access/Integration),Web,面向切面编程(AOP和Aspects),设备(Instrumentation),消息(Messaging)和测试(Test)组成,其结构图如下:
  1. ## **Core Container 核心容器**
  2. > Core Container又是由,Spring Core,Spring Beans, Spring Context,SpEL,组成
  3. >
  4. - Spring Core
  5.     - Spring Core是IoC和DI基本实现
  6.     - 核心功能包括`BeanFactory,ApplicationContext`,提供Spring IoC对容器的访问
  7. - Spring Beans
  8.     - 负责管理对象(Bean)的生命周期,配置和依赖注入.是IoC的容器的基础,可使用XML或注解方式定义Bean
  9. - Spring Context
  10.     - 基于ApplicationContext接口,Spring容器的高级抽象
  11. ## Data Access/Intergration 数据访问于集成模块
  12. - Spring JDBC
  13.     - 简化了传统的JDBC操作,提供`JDBCTemplate`类来处理数据库连接,SQL执行和结果集处理,减少冗余
  14. - Spring ORM
  15.     - 集成了ORM(对象关系映射,为对象和数据库之间提供映射支持,简化数据访问层的开发
  16. - Spring Data Access
  17.     - 提供对数据库访问的简化支持,包括Mybatis,Hibernate的持久化框架
  18. ## Web
  19. - Spring Web MVC
  20.     - 基于MVC设计模式的Web框架,是Spring架构中最常用的模块之一
  21. - Spring Web
  22.     - 为Web应用提供基本的支持,提供Servlet API和文件上传等功能
复制代码
Maven中设置Spring


  • 在pom.xml文件中添加两个依赖即可,注意Spring版本
  1. <dependency>
  2.       <groupId>org.springframework</groupId>
  3.       <artifactId>spring-context</artifactId>
  4.       <version>6.1.14</version>
  5.     </dependency>
  6.    
  7.     <dependency>
  8.       <groupId>org.aspectj</groupId>
  9.       <artifactId>aspectjweaver</artifactId>
  10.       <version>1.9.6</version>
  11.     </dependency>
复制代码
Spring IoC理念

Spring IoC,反转控制,更好的理解是,IoC不是阐明技能而是一种设计理念,把原本步伐手动创建对象的控制权,交给Spring框架来管理
IoC的形象理解

IoC虽然是一个抽象的概念,我们可以举个例子更好的理解
以购物的视角解析IoC

假设你想买个橙汁喝,有两种方法可以实现


  • 自动创建(没有IoC)

    • 想喝一杯奇怪的橙汁,按住传统的方法,需要去买果汁机,橙子,榨汁,加水,才能喝到
    • 自动创建:这些行为都是,我自动发起的,自己去的所有的步骤,我直接掌管所有的步骤和资源.

  • 饮品店方式(IoC)

    • 但还有一种方式是,点外卖或去饮品店购买.
    • 控制反转:在这种情况下,并不用去采购果汁机,橙汁等等.饮品店负责完成所有的工作,而我只是负责提出需求等待结果即可

这可以见的,在Spring框架中,IoC的焦点头脑就是:我不在自动执行任务和管理资源,而是提交给第三方,让它们处理我提出的需求,这就是IoC.我不再控制对象的创建和管理,而是由外部容器来管理和提供我所需要的”服务”
类比到SpringIoC


  • 在刚刚的例子中,我们可以类比到Spring框架中,具体来说:

    • 我(客户端):负责提出需求,比如需要一个橙汁
    • 饮品店(Spring 容器):接收需求,并负责制作并交付结果,即举行Bean的创建和注入
    • 结果:我只需接收并使用”橙汁”(bean),不需要知道如何制作它(创建和管理)

IDEA如何使用IoC的

通过Spring Config xml文件(能看懂就行)


  • 在resource文件下建立Spring Config文件名为spring.xml


  • 使用bean标签来设置Spring IoC中的对象,其基本语法如下


  • id:为指定该Bean的名称.这个名称没有在Spring容器中引用这个Bean
  • class:指定该Bean的单元完备路径
  • 通过注释设置的方法会在展开解说
Bean

Bean代表了Spring IoC容器管理的对象,Spring容器负责创建,设置和管理这些Bean
什么是Bean


  • Bean是Spring IoC容器管理的一个对象,简单来说任何一个由Spring创建并由容器管理的Java对象,都是一个Bean
  • 对于Spring 容器来说,其主要负责:

    • 创建Bean实例
    • 设置Bean属性
    • 管理Bean生命周期
    • 处理Bean的依赖注入

Bean的设置

在Spring中,一共有一下几个方式来设置Bean:

  • XML文件设置(较为传统,能看懂就行)
  • 注解设置(Java今世方式)
  • Java设置类(Spring 通过@Configuration注解设置)
XML设置方式


  • 在Spring的XML设置文件中,使用标签设置bean,上面已经演示过
  • 通过注释设置的方法会在展开解说
依赖注入(DI)

DI(Dependency Injection)是Spring IoC容器的焦点功能之一,通过DI,spring实现了控制反转IoC,依赖注入有两种常用方法:构造函数注入和Setter方法注入
构造函数注入

构造函数注入是通过类的构造方法将依赖通报给Bean
设置方法

在Spring设置文件中,通过constructor-arg标签来指定构造函数参数


  • 标签属性

    • name:指定构造函数的名称,用于匹配构造函数参数
    • value:为参数提供值
    • ref:指定引用类型的Bean(其他Bean),用于注入对象
    • type:指定参数的类型(通常不使用,spring会自动推断)
    • index:指定参数在构造函数中的索引位置

  • e.g1注入基本数据类型
    1. <bean id="student" >
    2.         
    3.         <constructor-arg name="name" value="张三"></constructor-arg>
    4.         <constructor-arg name="age" value="20"></constructor-arg>
    5.     </bean>
    复制代码
    该设置,Spring会将”张三”和18 作为参数通报给Student类的构造函数.其会调用带有name和age的构造函数
    1.    public Student(String name, Integer age) {
    2.         this.name = name;
    3.         this.age = age;
    4.     }
    复制代码
    返回的toString()如下:


  • e.g2注入引用类型
    1. <bean id="student" >
    2.         
    3.         <constructor-arg name="name" value="张三"></constructor-arg>
    4.         <constructor-arg name="age" value="20"></constructor-arg>
    5.     </bean><bean id="student" >
    6.         
    7.         <constructor-arg name="name" value="张三"></constructor-arg>
    8.         <constructor-arg name="age" value="20"></constructor-arg>
    9.     </bean>         
    复制代码
    该设置是在Student类中有一个ClassInfo类,提供constructor-arg标签,Spring会将ClassInfo类的Bean注入到Student类的构造函数中
    1.     private ClassInfo classInfo;
    2.     public Student(String name, Integer age, ClassInfo classInfo) {
    3.         this.name = name;
    4.         this.age = age;
    5.         this.classInfo = classInfo;
    6.     }
    复制代码
    返回的toString()如下:

Setter注入是提供对象的set方法将依赖通报给Bean.容器实例化后,会通过反射的机制调用Bean的set方法来注入依赖想
设置方法

在Spring设置文件中,通过property标签来为Bean的属性设置值.属性的名称对于Java类中的set方法


  • 标签属性

    • name:要注入的属性名
    • value:为基本数据类型和String类型的属性赋值
    • ref:为引用类型的属性赋值,指定其他Bean

      • e.g1注入基本数据类型
        1.     <bean id="student" >
        2.         <property name="name" value="张三"></property>
        3.         <property name="age" value="20"></property>
        4.     </bean>
        复制代码
        上述设置中,student必须带有setName和setAge的方法来接收传入的值
      • e.g2传入引用类型
        1. <bean id="student" >
        2.         
        3.         <constructor-arg name="name" value="张三"></constructor-arg>
        4.         <constructor-arg name="age" value="20"></constructor-arg>
        5.     </bean><bean id="student" >
        6.         
        7.         <constructor-arg name="name" value="张三"></constructor-arg>
        8.         <constructor-arg name="age" value="20"></constructor-arg>
        9.     </bean>
        复制代码



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

羊蹓狼

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表