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

Spring基础一(IoC、Spring配置)

概述

  • 2002年,首次推出了Spring框架的雏形,interface21框架!2004年3月24日发布了1.0正式版。
  • Rod Johnson,Spring Framework创始人。
  • spring:使现有的技术更加容易使用,本身就是一个大杂烩,整合了现有的技术框架。

SSM系统:Spring MVC+Spring+Mybatis(半自动持久化框架)

导包:注意之前配置的maven仓库位置

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.20</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>6.2.1</version>
</dependency>

优点:

  1. Spring是一个开源的免费的框架。
  2. Spring是一个轻量级的,非入侵式的框架。
  3. 控制反转(IOC),面向切面编程(AOP)!
  4. 支持事务的处理,对框架的整合的支持。

总结:Spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架。

组成:Spring由七大模块组成:

现代化的Java开发,就是基于Spring的开发。

Spring Boot:构建     

  •  一个快速开发的脚手架。
  • 基于Spring boot可以快速开发单个微服务。
  • 约定大于配置

Spring Cloud:协调       基于SpringBoot实现。

Spring Cloud Date Flow:连接

大多数公司在使用SpringBoot进行快速开发,学习SpringBoot的前提,需要掌握Spring和SpringMVC。

IOC理论推导

原来写业务:

1、UserDao接口

public interface UserDao {
    void getUser();
}

2、UserDaoImpl实现类

public class UserDaoImpl implements UserDao{
    public void getUser() {
        System.out.println("默认获取用户的数据");
    }
}

3、UserService业务接口

public interface UserService {
    void getUser();
}

4、UserServiceImpl业务实现类

public class UserServiceImpl implements UserService{
    //将DAO引到Service中
    private UserDao userDao=new UserDaoImpl();
    public void getUser() {
        //业务层调Dao层
        userDao.getUser();
    }
}

5、编写测试类模拟用户调用业务:

public class MyTest {
    public static void main(String[] args) {
        //模拟用户调用业务层,Dao层不接触
        UserServiceImpl userService = new UserServiceImpl();
        userService.getUser();
    }
}

后台增加一个接口实现类,让用户使用增加的这个数据。

在后台增加一个Mysql接口实现,用户想要使用,必须改变UserServiceImpl中代码

1、后台增加的接口实现类:

public class UserDaoMysqlImpl implements UserDao{
    public void getUser() {
        System.out.println("Mysql获取用户数据");
    }
}

2、调用Dao层

public class UserServiceImpl implements UserService{
    //将MysqlDao引到Service
    private UserDao userDao=new UserDaoMysqlImpl();
    public void getUser() {
        //业务层调Dao层
        userDao.getUser();
    }
}

模拟用户使用:需要改变ServiceImpl中调用的Dao

每一次用户的需求需要改动原有的代码比较困难。

在业务实现类中利用set进行动态实现值的注入:

用户在需求改变的时候,业务不在复杂。只需要修改service选择性调用,

从上述改变中理解,未用set之前,程序是自动创建对象,控制权在程序猿手上。

使用set之后,程序不在有主动性,而是变成了被动的接收对象。

IOC本质

控制反转IOC是一种设计思想,DI(依赖注入)是实现IOC的一种方法,也有人认为DI只是IOC的另一种说法,没有IOC的程序中,我们使用面向对象编程,对象的创建与对象间的依赖关系完全硬编程在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方

IOC是Spring框架的核心内容,使用多种方式完美的实现了IOC,可以使用XML配置,也可以使用注解,目前Spring也可以零配置实现IOC。

Spring容器在初始化时先读取配置文件,根据配置文件或元数据创建于组织对象存入容器中,程序使用时再从IOC容器中取出需要的对象。

设置控制反转案例

1、编写实体类Hello

编写配置文件beans.xml:

使用:

控制:谁来控制对象的创建,传统应用程序的对象是由程序本身控制创建的,使用Spring后,对象是由Spring来创建的。

反转:程序本身不创建对象,而变成被动的接收对象。

依赖注入:就是利用set方法来进行注入的。

IOC是一种编程思想,由主动的编程变成被动的接收。

截止目前,我们彻底不用再程序中改动了,需要实现不同的操作,只需要在xml配置文件中进行修改,所谓IOC,就是对象由Spring来创建,管理,装配。

改造理论推导中的案例

编写配置文件bean.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--使用Spring来创建对象,在Spring中这些都称为Bean-->
    <!--
        id=变量名
        class = new的对象
        property相当于给对象中的属性设置一个值;
        -->
    <bean id="userdaoimpl" class="com.serenity.dao.UserDaoImpl"/>
    <bean id="userdaomysql" class="com.serenity.dao.UserDaoMysqlImpl"/>
    <bean id="userServiceImpl" class="com.serenity.service.UserServiceImpl">
        <!--
        ref:引用Spring容器中创建好的对象
        value:具体的值,基本数据类型-->
        <property name="userDao" ref="userdaoimpl"/>
    </bean>
</beans>

编写测试类:

在配置文件中修改接口配置:

测试:

IOC创建对象的方式

1、使用无参构造创建对象(默认)

创建实体类:

编写配置:

测试:

 public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        User user = (User) context.getBean("user");
        user.show();
    }

2、假设使用有参构造创建对象,

方式一:下标赋值

方式二:类型的方式

方式三:直接通过参数名来设置

注意:在配置文件加载的时候,容器中管理的对象就已经初始化了。

Spring配置

别名

Bean配置

  • id:bean的唯一标识符,也就是相当于对象名
  • class:bean对象所对应的类型,包名+类名
  • name:别名(可以同时取多个别名,可通过逗号,空格,分号等进行分割
<bean id="user" class="com.serenity.pojo.User" name="user2,user3">
        <constructor-arg name="name" value="小二"/>
    </bean>

import

import一般用于团队开发使用,他可以将多个配置文件,导入合并为一个

假设,现项目中由多人开发,现有不同的人开发不同的类,不同的类需要注册在不同的bean中,我们可以利用import将所有人的beans.xml合并为一个总的配置(applicationContext.xml)

使用的时候,直接将所有beans合并在applicationContext.xml中,如下:

相关文章:

  • Oracle数据库数据编程SQL<3.7 PL/SQL 触发器(Trigger)>
  • Modbus TCP转profibusDP网关接防撞雷达快速配置
  • 【TVM教程】使用 TVMC Micro 执行微模型
  • [C++]C++11(上)
  • 基于 SpringBoot 的旧物置换网站
  • 域渗透-域环境操作与组策略
  • 飞桨深度学习平台:技术架构、产业实践与生态全景解析
  • 【软件】在Windows和Ubuntu上使用TFTP和NFS
  • 视频设备轨迹回放平台EasyCVR渡口码头智能监控系统方案,确保港口安全稳定运行
  • 23种设计模式-结构型模式-外观
  • 《深度剖析SQL游标:复杂数据处理场景下的智慧抉择》
  • 如何选择飞速(FS)1G POE交换机?
  • 【JavaWeb】前端基础
  • Node 22.11使用ts-node报错
  • 快速部署:AI创作系统通用部署流程,上手简单高效部署
  • 变更日志0..1.0
  • 图像相似性搜索算法比较 ——对比EfficientNet、 ViT、 VINO 、 CLIP 、 BLIP2算法优劣与场景测试
  • 从 BBRv2 到 BBRv3
  • AI预测3D新模型百十个定位预测+胆码预测+杀和尾+杀和值2025年4月1日第39弹
  • Python 图片水印处理工具
  • 东莞高端品牌网站建设/网络推广方案例子
  • 做网站实名认证有什么用/seo也成搜索引擎优化
  • 百度网站描述/sem营销是什么意思
  • 建设彩票投注网站需要多少钱/360搜索网址是多少
  • 政府门户网站 平安建设/网站优化软件
  • 如何自己做微信小程序/seo初级入门教程