自我复习spring(四)

本文深入介绍了Spring框架的核心组件,包括Beans、Context、Core等,并详细阐述了依赖注入的多种方式及其实现机制。同时,还探讨了Spring框架的优势及其在企业级应用中的广泛用途。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spring的基础

在这里插入图片描述
这个图对于spring来说太重要了

Beans :Spring IOC的基础实现,包含访问配置文件、创建和管理bean等。
Context :在基础IOC功能上提供扩展服务。其扩展支持可用于MVC方面。
Core :Spring的核心工具包
SpEL :Spring表达式语言
AOP :Spring的面向切面编程,提供AOP(面向切面编程)的实现
Aspects :Spring提供的对AspectJ框架的整合
Instrumentation :Spring对字节码操作和类加载器的支持,用于特定的应用服务器
Messaging : 用于支持基于消息的应用而提供的消息通信抽象
JDBC :对JDBC的简单封装
ORM :整合第三方的orm实现,如hibernate
OXM :Spring对于object/xml映射的支持,可以让JAVA与XML之间来回切换
JMS : 提供JMS的消息的收发的特性,与 Messaging模块集成一起使用
Transactions :为JDBC、Hibernate、JDO、JPA等提供的一致的声明式和编程式事务管理。
Web :包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。
WebMVC :Spring提供的一个MVC模块,包含SpringMVC框架相关的所有类
Test :对JUNIT等测试框架的封装,为测试Spring应用提供各种支持

Spring的优势
低侵入, 代码不需要额外实现接口或者继承父类
低耦合,Spring的DI机制降低了业务对象替换的复杂性,提高了组件之间的解耦
模块化,Spring高度模块化,而且并不强制应用完全依赖于Spring,开发者可以从各个层面上扩展spring,即自由选用Spring框架的部分或全部
通过AOP提供灵活强大的系统级功能支持,Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用
提供常用企业级开发场景下的处理规范或者模块实现。比如Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问,通过Spring的MVC模块提供对WebMVC的支持

pring创建对象(控制反转)的三种方式

1.使用构造方法创建
2.使用工厂创建{
1.1实例工厂
1.2静态工厂
}

使用实例工厂创建

spring依赖注入的三种方式

- 构造器注入:依赖于类的构造方法实现,构造方法可有参也可无参;
- setter注入:依赖于类的setter方法实现,灵活且可读性高,这是spring中最主流的注入方式
- 接口注入:(不常用)

依赖注入的三种类型
基本数据类型、String
容器中注册过的bean
复杂类型(集合类型)

  1. 不同类型的注入方式
    • (1)基本数据类型 value
    • 引用类型
    • (2)String value
    • (3)集合类型 list set map
    • value
    • ref
    • (4)其他 ref
 <bean id="userController" class="com.woniuxy52.spring.controller.UserController">
        <property name="userService" ref="userServiceVip"/>
        <property name="number" value="18.91"/>
        <property name="name" value="hohoho"/>
        <property name="students">
            <list>
                <value>曾氾银</value>
                <value>曾崇德</value>
                <value>杜渝新</value>
            </list>
        </property>
        <property name="userServices">
            <list>
                <ref bean="uService"/>
                <ref bean="userServiceVip"/>
            </list>
        </property>
        <property name="userServiceSet">
            <set>
                <ref bean="uService"/>
                <ref bean="userServiceVip"/>
            </set>
        </property>
        <property name="map">
            <map>
                <entry key="u1" value-ref="uService" />
                <entry key="u2" value-ref="userServiceVip" />
                <entry key="u3" value-ref="userServiceVip" />
            </map>
        </property>
    </bean>
  1. 注入的方式
    • setter注入,spring容器调用属性的setter方法来注入;需要有一个默认的无参构造,先实例化再注入
    • 构造器注入,spring容器实例化时通过构造器
    区别: 灵活性;时机不同,构造器是在实例化的同时需要注入属性,setter可以延迟;
    语法
    构造器注入,使用constructor-arg
   <!--  构造器  -->
    <bean id="rocket" class="com.woniuxy52.spring.Rocket">
        <constructor-arg name="model" value="神舟12号"></constructor-arg>
        <constructor-arg name="length" value="50"></constructor-arg>
        <!--复杂类型用ref引用-->
        <constructor-arg name="propeller" ref="p"/>
    </bean>
    <bean id="rocket2" class="com.woniuxy52.spring.Rocket">
        <!--可以用index指定位置-->
        <constructor-arg index="0" value="神舟12号"></constructor-arg>
        <constructor-arg index="1" value="50"></constructor-arg>
        <constructor-arg index="2" ref="p"/>
    </bean>
    <bean id="rocket3" class="com.woniuxy52.spring.Rocket">
        <!--可以用index指定位置-->
        <constructor-arg index="0" value="神舟12号"></constructor-arg>
        <constructor-arg index="1" value="50"></constructor-arg>
    </bean>
    <bean id="p" class="com.woniuxy52.spring.Propeller">
        <constructor-arg name="weight" value="20"/>
    </bean>
  1. 加入第三方的对象
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
  <property name="url" value="jdbc:mysql://lcoalhost:3306/dev/xx"/>
  <property name="username" value="root"/>
  <property name="password" value="root123"/>
</bean>

Bean作用域

[作用域

描述

singleton

(默认)一个容器中的Bean只有一个实例

prototype

每个Bean的每次获取产生一个实例

request

对应一次Http请求,只在web容器中可用

session

对应一次会话,只在web容器中可用

application

对应一个ServletContext只在web容器中可用

websocket

对应一个WebSocket.生命周期,只在web容器中可用]
链接如下:
(https://www.yuque.com/books/share/594b07f0-be9d-448c-b6ec-93139d44d37d/wkq5rq?inner=jUh9k)
注意:singleton 指的是每一个Bean的定义只有一个实例,而不是一个类只有一个实例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小小刘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值