Spring框架安装与基础操作

介绍

  • 什么是Spring:一个轻量级Java开发框架,负责基础架构,解决企业级应用开发的业务逻辑层和其他各层的耦合问题,是一个分层的JavaSE轻量级开源框架,为Java应用程序提供全面的基础架构支持

  • 作用:解决企业级应用开发的复杂性,即简化Java开发

  • 框架核心:Ioc容器和AOP模块,通过IoC容器管理POJO对象以及他们之间的耦合关系;通过AOP以动态非侵入的方式增强服务

  • 系统架构

    • image-20230606183350052
    • Data Access:数据访问

    • Data Integration:数据集成

    • Web:Web开发

    • AOP:面向切面编程

    • Aspects:AOP思想的实现

    • Core Container:核心容器

    • Test:单元测试与集成测试

核心概念

  • IoC (Inversion of Control)控制反转

    • 什么是Ioc:使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转
    • Spring如何实现Ioc思想:Spring提供了一个容器,称为IoC容器,用来充当Ioc思想中的"外部"
    • IoC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在Ioc容器中统称为Bean
  • DI(Dependency Injection)依赖注入

    • 什么是DI:在容器中建立bean与bean之间的依赖关系的整个过程
  • Spring是如何充分解耦的

    • 使用IoC容器管理bean(IoC)
    • 在Ioc容器内将有依赖关系的bean进行关系绑定(DI)
    • 使用对象时不仅可以直接从Ioc容器中获取,并且获取到的bea已经绑定了所有的依赖关系

bean容器

  • BeanFactory是IoC容器的顶层接口,初始化BeanFactory对象时,加载的bean延迟加载
  • ApplicationContext接口是Spring?容器的核心接口,初始化时bean立即加载
  • ApplicationContext接口提供基础的bean操作相关方法,通过其他接口扩展其功能
  • ApplicationContext接口常用初始化类
    • ClassPathXmlApplicationContext
    • FileSystemXmlApplicationContext

基础 使用

Ioc使用

  1. 正常创建maven项目然后导包
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.24</version>
</dependency>
  1. 创建配置文件
image-20230606192139803
  1. 配置bean

    • bean标签标示配置bean
    • id属性标示给bean起名字
    • class属性表示给bean定义类型
  2. 获取bean

    • 首先:创建ApplicationContext对象读取配置

      • ApplicationContext ctx = new ClassPathXmlApplicationContext("配置文件名");
        
    • 方式1:使用bean名称获取bean

      Object = ctx.getBean("bean名称");
      
    • 方式2:bean类型

      Object = ctx.getBean("bean名称",类.class);
      
    • 方式3:bean名称并指定类型

      Object = ctx.getBean(类.Class)
      
    • <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
      <!--    导入坐标:spring-context,版本:5.3.24-->
      <!--    配置bean-->
          <bean id="bookDao" class="Spring.BookDaoImpl"/>
      </beans>
      
    • ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
      BookDao bookDao = (BookDao)ctx.getBean("bookDao");//BookDao是自己创建的类
      

DI使用

  • property属性用于配置bean

  • 子属性

    • name:配置哪个属性

    • ref:参照哪个bean来配置

    • value:注入的值

    • List、Set、Map用于传值:

      • <bean id="boss" class="***">
          <property name="favorites">
            <map>
              <entry>
                <key><value>101</value></key>
                <value>唱歌</value>
              </entry>
            </map>
          </property>
        </bean>
        
<bean id="bookService" class="spring.BookServiceImpl">
    <property name="bookDao" ref="bookDao"/>
</bean>
public class BookServiceImpl {
    private BookDaoImpl bookDao;//property配置了这个属性
    public void setBookDao(BookDaoImpl bookDao) {
        this.bookDao = bookDao;
    }
}

bean配置

image-20230607134525391
  • 别名:name属性

    • 在其中可以用空格隔开以起多个
  • 作用范围:scope

    • spring默认的bean是一个单例
    • 参数:prototype(非单例)
    • 哪些bean适合做单例:表现层、业务层、数据层对象,工具对象
    • 哪些bean不适合做单例:封装实体的对象
  • 生命周期:init-method destroy-method属性

    • 对象使用registerShutdownHook();方法后会自动使用destroy-method
  • 生命周期的第二种方式:继承InitializingBean,DisposableBean

依赖注入

  • Setter注入

    1. 在类中设置set函数

    2. 在配置中使用value属性注入值

      • <bean id="bookDao"class="BookDaoImpl">
        	<property name="databaseName"value="mysq1"/>
        	<property name="connectionNum"value="10"/>
        </bean>
        
  • 构造器注入

    1. 使用constructor-arg 属性

    2. 设置其name和ref子属性

    3. 设置其value子属性,用value子属性传值(传给构造函数)

      • <bean id="bookDao"class="BookDaoImpl">
        	<constructor-arg name="databaseName"value="mysql"/>
        	<constructor-arg name="connectionNum"value="666"/>
        </bean>
        
  • 依赖自动装配

    • 是什么:Ioc容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程
    • 自动装配方式
      • byType:按类型进行注入(常用)
      • byName:按照名称进行注入
      • constructor:按照构造方法进行注入
      • default:默认注入方式
    • 使用:在bean中使用autowire参数
    • spring容器会自动往前找对应的类型或者名称的bean,然后装配
  • 总结

image-20230607134615107

加载Properties属性文件

  • 做法:通过 context:property-placeholder 标签
  1. 开启context命名空间

    • 使用context命名空间

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:context="http://www.springframework.org/schema/context"
             xsi:schemaLocation="
             http://www.springframework.org/schema/beans
             http://www.springframework.org/schema/beans/spring-beans.xsd
             http://www.springframework.org/schema/context
             http://www.springframework.org/schema/context/spring-context.xsd">
      
  2. 使用标签

    <context:property-placeholder location="jdbc.properties"/>
    
  3. 在bean标签中使用值

    <property name="name" value="${jdbc.username}"/>
    
  • 不加载系统属性

    <context:property-placeholder location="jdbc.properties" system-properties-mode="NEVER"/>
    
posted @   ---Wg---  阅读(183)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示