专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

Spring Framework5.X快速入门

什么是Spring

轻量级的 DI / IoC 和 AOP 容器的开源框架

spring.io/projects/sp…

  • 好处
    • 管理创建和组装对象之间的依赖关系 使⽤前:⼿⼯创建
Controller -> Service -> Dao
UserControoler
private UserService userService = new UserService();

使用后:由spring创建,自动导入

⾯向切⾯编程(AOP)

可以解耦核⼼业务和边缘业务的关系

  • 场景:⽤户调⽤下单购买视频接⼝,需要判断登录,拦截器是AOP思想的⼀种实现
  • 使⽤前:代码写逻辑,每次下单都调⽤⽅法判断,多个⽅法需要判断登录则都需要 登录⽅法 判断
  • 使⽤后:根据⼀定的⽅法或者路径规则进⾏判断是否要调⽤,降低代码耦合度
  • 包含java⼤型项⽬⾥⾯常⻅解决⽅案 web层、业务层、数据访问层等
  • 极其便利的整合其他主流技术栈,⽐如redis、mq、mybatis、jpa
  • 社区庞⼤和活跃,在微服务、⼤数据、云计算都有对应的组件

使⽤ IDEA + Maven + Spring5创建项⽬

  • pom.xml添加依赖
<dependencies>
        <!--
https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
            <version>5.2.5.RELEASE</version>
        </dependency>
        <!--
       https://mvnrepository.com/artifact/org.springframework/spring-core -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.2.5.RELEASE</version>
        </dependency>
        <!--
       https://mvnrepository.com/artifact/org.springframework/spring-beans -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.2.5.RELEASE</version>
        </dependency>
    </dependencies>

  • 添加配置⽂件applicationContext.xml

id是别名,property是给实体类的属性注入值

<?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
            https://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="video" class="cn.junko.domain.Video">
        <property name="id" value="1"></property>
        <property name="name" value="jjbq"></property>
    </bean>

</beans>

  • 编写Bean 引用上面配置的bean的id,就能够依赖容器自动得到对象
public class app {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        Video video = (Video) applicationContext.getBean("video");
        System.out.println(video.getName());
    }
}

打印一下,能够成功得到对象和数据

81_1.png

Spring的applicationContext.xml配置文件

这里讲一下基础的xml配置标签

  • bean标签 id属性:指定Bean的名称,在Bean被别的类依赖时使⽤
  • name属性:⽤于指定Bean的别名,如果没有id,也可以⽤name
  • class属性:⽤于指定Bean的来源,要创建的Bean的class类,需要全限定名

ApplicationContext是spring 的核心接口,应用程序上下文,只要是spring对象被扫描之后,就可以在这里进行管理获取,而ClassPathXmlApplicationContext就能够在这个类路径下面去找xml,然后根据bean的id和name去取对应容器里面的对象。包括后续哪里需要注入的时候就能注入进去,不需要手工去new,只需要get一下

spring的IOC设计思想

什么是IOC

IOC Inverse of Control(控制反转)是⼀种设计思想 将原本在程序中⼿动创建对象的流 程,交由Spring框架来管理 核⼼:把创建对象的控制权反转给Spring框架,对象的⽣命周期由 Spring统⼀管理,即

  • 把spring ioc 当成⼀个容器,⾥⾯存储管理的对象称为Bean类实例,对象的创建,依赖都能进行统一的管理

spring的依赖注入讲解

什么是依赖注入

DI Dependency Injection ,依赖注⼊ IOC容器在运⾏期间,动态地将对象某种依赖关系注⼊到对象之中,⽐如视频订单对象,依赖⽤视 频对象 创建另一个实体类,在里面加入Video的对象,然后编写xml文件

<bean id="video" class="cn.junko.domain.Video">
        <property name="id" value="1"></property>
        <property name="name" value="jjbq"></property>
    </bean>
    <bean id="videoOrder" class="cn.junko.domain.VideoOrder">
        <property name="id" value="1"></property>
        <property name="outTrade" value="123123123"></property>
        <property name="video" ref="video"></property>
    </bean>

81_2.png接着去运行打印,可以发现在创建videoOrder对象的时候,Video的对象也被创建,并且成功注入数据

VideoOrder videoOrder= (VideoOrder) applicationContext.getBean("videoOrder");
        System.out.println(videoOrder.getId());
        System.out.println(videoOrder.getVideo().getName());

81_3.png

Spring的bean的scope作用域讲解

在bean标签中,可以让我们告诉spring什么时候产生一个新的bean,还是用单个bean,这就是scope的作用

  • scope属性(默认是singleton)
    • singleton:单例, 默认值,调⽤getBean⽅法返回是同⼀个对象,实例会被缓存起来,效率⽐较⾼ 当⼀个bean被标识为singleton时候,spring的IOC容器中只会存在⼀个该bean
  • prototype: 多例,调⽤getBean⽅法创建不同的对象,会频繁的创建和销毁对象造成很⼤的开销
  • 其他不常用的:
    • request :每个Http请求都会创建⼀个新的bean
    • session: 每个Http Session请求都会创建⼀个新的bean
    • global session(基本不⽤)

当使用scope=singleton创建对象,地址是一样的

81_4.png

spring的常见的注入方式

  • 使⽤set⽅法注⼊
<bean id="video" class="cn.junko.domain.Video" scope="singleton">
        <property name="id" value="1"></property>
        <property name="name" value="jjbq"></property>
    </bean>

  • 使⽤带参的构造函数注⼊
<bean id="video" class="cn.junko.domain.Video" scope="singleton">
        <constructor-arg name="id" value="2"></constructor-arg>
        <constructor-arg name="name" value="123123"></constructor-arg>
    </bean>

  • POJO类型注⼊(property 没有使⽤value属性,⽽是使⽤了ref属性)
<bean id="video" class="cn.junko.domain.Video" scope="singleton">
        <constructor-arg name="id" value="2"></constructor-arg>
        <constructor-arg name="name" value="123123"></constructor-arg>
    </bean>

    <bean id="videoOrder" class="cn.junko.domain.VideoOrder">
        <property name="id" value="1"></property>
        <property name="outTrade" value="123123123"></property>
        <property name="video" ref="video"></property>
    </bean>

注意: 类的构造函数重写的时候,⼀定要保留空构造函数!!!

List和Map类型的注入

在实体类中添加list和map并生成对应的方法

<bean id="video" class="cn.junko.domain.Video" scope="singleton">
        <property name="id" value="1"></property>
        <property name="name" value="jjbq"></property>
        <property name="list1">
            <list>
                <value>1</value>
                <value>2</value>
                <value>3</value>
            </list>
        </property>
        <property name="map1">
            <map>
                <entry key="1" value="1111111"></entry>
                <entry key="2" value="2222222"></entry>
                <entry key="3" value="3333333"></entry>
            </map>
        </property>
    </bean>

spring里面bean的依赖和继承

bean继承:两个类之间⼤多数的属性都相同,避免重复配置,通过bean标签的parent属性重⽤已 有的Bean元素的配置信息 继承指的是配置信息的复⽤,和Java类的继承没有关系

<bean id="video" class="cn.junko.domain.Video" scope="singleton" parent="video">
            <property name="name" value="这是video2"></property>
    </bean>

  • 属性依赖

如果类A是作为类B的属性, 想要类A⽐类B先实例化,设置两个Bean的依赖关系

<bean id="video" class="cn.junko.domain.Video" scope="singleton">
 <property name="id" value="9"/>
 <property name="title" value="spring1" />
</bean>
<!--设置两个bean的关系,video要先于videoOrder实例化-->
<bean id="videoOrder" class="cn.junko.domain.VideoOrder" dependson="video">
 <property name="id" value="8" />
 <property name="outTradeNo" value="777777"/>
 <property name="video" ref="video"/>
</bean>

文章永久链接:https://tech.souyunku.com/27252

未经允许不得转载:搜云库技术团队 » Spring Framework5.X快速入门

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们