当前位置: 首页 > article >正文

后端:Spring-1

在这里插入图片描述

文章目录

    • 1. 了解 spring(Spring Framework)
    • 2. 基于maven搭建Spring框架
      • 2.1 纯xml配置方式来实现Spring
      • 2.2 注解方式来实现Spring
      • 3. Java Config类来实现Spring
    • 2.4 总结

1. 了解 spring(Spring Framework)

传统方式构建spring(指的是Spring Framework)项目,导入依赖繁琐(需要自行去maven官网去下载依赖或者copy对应的依赖,并且各个依赖之间可能还存在版本冲突的问题)、项目配置繁琐(需要添加一些配置文件,且配置文件中需要写一些重复的代码,总之很繁琐)。
而Spring Boot简化了上述操作,比如之前的Spring项目中整合mybatis时,需要在配置文件中定义对应的bean才行,而使用Spring Boot之后,(在引入对应依赖的前提下)只需要在application.yml中添加一些数据库连接的对应信息及其他一些配置,然后就可以实现同样的效果了。
上述只是对于两者做的一个简单比较。请添加图片描述

说到Spring,应该联想到IOC(控制反转)、DI(依赖注入)。所谓控制反转(对象创建权力)一个类需要用到另外一个类的对象,通常做法是在这个类下new另外一个类对象,但是这样会让这两个对象产生一个强关联,它们之间就建立了强耦合的关系,而代码之间的耦合度越高,对越后期维护越不利。而使用了Spring之后,可以把类放到容器中进行管理,需要用到某个类时只需要把这个类进行依赖注入即可,从而降低耦合度。

2. 基于maven搭建Spring框架

使用idea创建一个maven项目,这只是一个例子,项目结构如下:
在这里插入图片描述
导入junit依赖,如下:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

各个类的参考代码如下:

package com.lize.dao;

public class UserDao {

    public void printUserD(){
        System.out.println("UserDao");
    }
}

package com.lize.service;

import com.lize.dao.UserDao;

public class UserService {

    private UserDao ud = new UserDao();

    public void printUserS(){
        ud.printUserD();
    }
}

测试代码如下:

import com.lize.service.UserService;
import org.junit.Test;

public class Test01 {

    @Test
    public void test(){
        UserService userService = new UserService();
        userService.printUserS();
    }
}

2.1 纯xml配置方式来实现Spring

下面使用Spring方式来降低上述代码耦合度。首先,添加spring的对于依赖。

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

在resources文件夹下面创建一个xml文件,在xml文件添加对应的bean标签即可。

<?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-4.0.xsd">


    <bean class="com.lize.dao.UserDao" name="userDao"/>
    <bean class="com.lize.service.UserService" name="userService">
        <property name="ud" ref="userDao"/>
        <!--   ud为对应的service文件的变量名     -->
    </bean>

</beans>

当然对应service文件也需要修改,添加set方法。

package com.lize.service;

import com.lize.dao.UserDao;

public class UserService {

    private UserDao ud;

    public void setUd(UserDao ud) {
        this.ud = ud;
    }

    public void printUserS(){
        ud.printUserD();
    }
}

运行代码如下,从abc.xml文件获取对应容器对象,然后从这个对象中获取对应的bean。

import com.lize.service.UserService;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test01 {
    @Test
    public void test(){

        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("abc.xml");
        UserService us = (UserService) ctx.getBean("userService");
        us.printUserS();
    }
}

2.2 注解方式来实现Spring

此时abc.xml配置文件,需要修改如下:

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

    <context:component-scan base-package="com.lize"/>
	<!--   dao、service包在这个目录下,spring容器会自动扫描,当然需要在
	对应类上添加注解     -->
</beans>

此时在dao、service对应的类上添加注解“@Component”,如下:

package com.lize.service;


import com.lize.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class UserService {

    @Autowired
    private UserDao ud;

    public void printUserS(){
        ud.printUserD();
    }
}

使用注解“Autowired"自动导入,不需要再写set方法,运行代码不需要修改。

3. Java Config类来实现Spring

在2的基础上,abc.xml可以不需要了,此时只需要定义一个配置类,如下:

package com.lize.config;


import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
// 表明这是一个配置类
@ComponentScan("com.lize")
// 需要扫描的包
public class SpringConfig {
}

运行方式如下:

import com.lize.config.SpringConfig;
import com.lize.service.UserService;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Test01 {
    @Test
    public void test2(){
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
        UserService us = (UserService) context.getBean("userService");
        us.printUserS();
    }
}

2.4 总结

第一种方式基于xml文件实现控制反转,需要在xml文件定义大量的bean;第二种方式只需要在xml文件添加扫描标签,并且需要在对应的类上添加注解;第三种方式需要定义配置类,在配置类上添加对应注解,通过注解的方式去扫描对应包下的对应类。Spring Boot基于第三种方式再进一步封装实现的。
在这里插入图片描述


http://www.kler.cn/a/370237.html

相关文章:

  • es的date类型字段按照原生格式进行分组聚合
  • 学习ASP.NET Core的身份认证(基于JwtBearer的身份认证7)
  • FPGA开发中的团队协作:构建高效协同的关键路径
  • C语言之装甲车库车辆动态监控辅助记录系统
  • CamemBERT:一款出色的法语语言模型
  • C#,入门教程(02)—— Visual Studio 2022开发环境搭建图文教程
  • 智能EDA小白从0开始 —— DAY30 冉谱微RFIC-GPT
  • canvas基础学习(鼠标点位拖拽)
  • 为什么有的说法是STM32有60个外部中断,有的说法是有23个中断
  • vscode中提升效率的插件扩展——待更新
  • 基于Distil-Whisper的实时ASR【自动语音识别】
  • python实战项目47:Selenium采集百度股市通数据
  • 电商 API 接口:提升用户体验的关键路径深度解析
  • AtCoder ABC376A-D题解
  • 雷池社区版compose文件配置讲解--fvm
  • 分布式并发场景的核心问题与解决方案
  • Java | Leetcode Java题解之第516题最长回文子序列
  • Camp4-L0:Linux 前置基础
  • 招商银行实时汇率查询接口-外汇实时汇率API-外汇实时汇率
  • 云联网对等连接--实现内网互通
  • 解决cuda环境使用dgl
  • ImportError: cannot import name ‘Sequential‘ from ‘keras.models‘
  • 如何将 HashiCorp Vault 与 Node.js 集成:安全管理敏感数据
  • UE5之5.4 第一人称示例代码阅读2 子弹发射逻辑
  • Oracle 第9章:存储过程与函数
  • Android Handler消息机制完全解析-IdleHandler和epoll机制(四)