1.认识Spring

1.Spring简介

        Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(反转控制)AOP(面向切面编程)为内核。提供了展现层、持久层以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的Java EE企业应用开源框架。

        在1997年,IBM提出了EJB思想,Spring之父为Rod Johnson

2. Spring优势

  • 方便快捷,简化开发

        通过 Spring 提供的 IoC容器,可以将对象间的依赖关系交由 Spring 进行控制,避免硬编码所造成的过度耦合。 用户也不必再为单例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。

  • AOP编程支持
        通过 Spring的 AOP 功能,方便进行面向切面编程,许多不容易用传统 OOP 实现的功能可以通过 AOP 轻松实现。
  • 声明式事务的支持

        可以将我们从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活的进行事务管理,提高开发效率和质量。

  • 方便程序的测试

        可以用非容器依赖的编程方式进行几乎所有的测试工作

  • 方便各种集成优秀框架

        Spring对各种优秀框架(Struts、Hibernate、Hessian、Quartz等)的支持。

  • 降低JavaEE API的使用难度

        Spring对 JavaEE API(如 JDBC、JavaMail、远程调用等)进行了薄薄的封装层,使这些 API 的使用难度大为降低。

  • Java源码是经典学习范例
        Spring的源代码设计精妙、结构清晰、匠心独用,处处体现着大师对Java 设计模式灵活运用以及对 Java技术的高深 造诣。它的源代码无意是 Java 技术的最佳实践的范例。

3. Spring体系结构

4. Spring程序开发步骤

        现代大家了解一下Spring程序开发步骤,然后进行快速入门~

        之前大家需要用到一个包下的类时,需要new出来,然后进行使用,这样会很麻烦,而使用Spring框架开发不再需要new对象了,它可以让直接请求客户端读取xml配置文件,根据id标识获得Bean名,通过反射创建并返回,有这么以下几步:

  1. 导入 Spring 开发的基本包坐标
  2. 编写 Dao 接口和实现类
  3. 创建 Spring 核心配置文件
  4. 在 Spring 配置文件中配置 UserDaoImpl
  5. 使用 Spring 的 API 获得 Bean 实例

        这样就实现了解耦合,后面再有一些类似需求只需要修改配置文件即可✌

5. 代码实现

5.1 首先创建一个模块

5.2 导入坐标

<!--  导入 spring-context 坐标  --><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.33</version></dependency></dependencies>

5.3 创建Bean(userDao)

package com.it.dao;public interface UserDao {public void save();
}

5.4 创建实现类,实现方法

package com.it.dao.impl;import com.it.dao.UserDao;public class UserDaoImpl implements UserDao {@Overridepublic void save() {System.out.println("save running...");}
}

5.5 创建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 http://www.springframework.org/schema/beans/spring-beans.xsd"><!--    在Spring配置文件中配置UserDaoImplid Bean实例在Spring容器中的唯一标识class 实现类的类路径    --><bean id="userDao" class="com.it.dao.impl.UserDaoImpl"></bean></beans>

5.6 创建测试类进行测试(创建ApplicationContext对象getBean)

package com.it.test;import com.it.dao.UserDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class UserDaoTest {public static void main(String[] args) {
//        创建ApplicationContext对象ApplicationContext user = new ClassPathXmlApplicationContext("applicationContext.xml");
//        getBeanUserDao userDao = (UserDao) user.getBean("userDao");
//        调用方法userDao.save();}
}

6. 配置文件

        带大家分析一下配置文件中的一些点

6.1 Bean标签范围配置

        在applicationContext.xml中进行Bean配置时,scope:指对象的作用范围,取值会有以下几个属性值

主要是就是前两个
singleton :单列
prototype :当getBean创建时,每次都会创建新对象

  • singleton时
<?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配置文件中配置UserDaoImplid Bean实例在Spring容器中的唯一标识class 实现类的类路径    --><bean id="userDao" class="com.it.dao.impl.UserDaoImpl" scope="singleton"></bean></beans>

  • prototype时
<?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配置文件中配置UserDaoImplid Bean实例在Spring容器中的唯一标识class 实现类的类路径    --><bean id="userDao" class="com.it.dao.impl.UserDaoImpl" scope="prototype"></bean></beans>

    6.2 依赖注入

            我们设置一个实现层业务,调用Dao层UserDao方法,也想在xml配置文件中进行配置,需要以下几步

    6.2.1 service层

    6.2.2 创建实现层实现service层

    package com.it.service.impl;import com.it.dao.UserDao;
    import com.it.service.UserService;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;public class UserServiceImpl implements UserService {@Overridepublic void save() {System.out.println("实现Dao层");//        创建ApplicationContext对象ApplicationContext user = new ClassPathXmlApplicationContext("applicationContext.xml");
    //        getBeanUserDao userDao1 = (UserDao) user.getBean("userDao");userDao1.save();}
    }
    

    6.2.3 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 http://www.springframework.org/schema/beans/spring-beans.xsd"><!--    在Spring配置文件中配置UserDaoImplid Bean实例在Spring容器中的唯一标识class 实现类的类路径    --><bean id="userDao" class="com.it.dao.impl.UserDaoImpl" scope="prototype"></bean><bean id="userService" class="com.it.service.impl.UserServiceImpl" scope="singleton"></bean></beans>

    6.2.4 测试

    package com.it.test;import com.it.service.UserService;
    import org.springframework.context.support.ClassPathXmlApplicationContext;public class UserServiceTest {public static void main(String[] args) {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");UserService userService = (UserService) context.getBean("userService");userService.save();}
    }
    
            因为UserService和UserDao都在Spring容器中,而最终程序直接使用的是UserService,所以可以在 Spring容器中,将UserDao设置到UserService内部。

    6.3 Bean 依赖注入

            依赖注入( Dependency Injection ):它是 Spring 框架核心 IOC 的具体实现。
    在编写程序时,通过控制反转,把对象的创建交给了 Spring,但是代码中不可能出现没有依赖的情况。
            IOC 解耦只是降低他们的依赖关系,但不会消除。例如:业务层仍会调用持久层的方法。
    那这种业务层和持久层的依赖关系,在使用 Spring 之后,就让 Spring 来维护了。
            简单的说,就是坐等框架把持久层对象传入业务层,而不用我们自己去获取。

    将UserDao注入到UserService内部有两种方式:

    • 构造方法

    • set方法

            首先要在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 http://www.springframework.org/schema/beans/spring-beans.xsd"><!--    在Spring配置文件中配置UserDaoImplid Bean实例在Spring容器中的唯一标识class 实现类的类路径    --><bean id="userDao" class="com.it.dao.impl.UserDaoImpl" scope="prototype"></bean><!--  name属性名ref 注入的方法Bean名  --><bean id="userService" class="com.it.service.impl.UserServiceImpl" scope="singleton"><property name="userDao" ref="userDao"></property></bean></beans>

            实现层进行依赖注入并实现set方法

    6.4 Bean的依赖注入的数据类型

    注入数据的三种数据类型
    • 普通数据类型
    • 引用数据类型
    • 集合数据类型

    6.4.1 普通数据类型

            定义数据类型以及生成set方法

    6.4.2 集合数据类型

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/408.html

    如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

    相关文章

    Vue:Ajax

    AJAX 允许我们在不刷新页面的情况下与服务器交互&#xff0c;实现&#xff1a;动态加载数据&#xff0c;提交表单信息&#xff0c;实时更新内容&#xff0c;与后端 API 通信。通常使用专门的 HTTP 客户端库来处理 AJAX 请求。 npm install axiosimport axios from axios;expor…

    NPOI Excel用OLE对象的形式插入文件附件以及插入图片

    static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…

    智能制造数字孪生全要素交付一张网:智造中枢,孪生领航,共建智造生态共同体

    在制造业转型升级的浪潮中&#xff0c;数字孪生技术正成为推动行业变革的核心引擎。从特斯拉通过数字孪生体实现车辆全生命周期优化&#xff0c;到海尔卡奥斯工业互联网平台赋能千行百业&#xff0c;数字孪生技术已从概念验证走向规模化落地。通过构建覆盖全国的交付网络&#…

    使用 Ansible 在 Windows 服务器上安装 SSL 证书

    在本教程中&#xff0c;我将向您展示如何使用 Ansible 在 Windows 服务器上安装 SSL 证书。使用 Ansible 自动化 SSL 证书安装过程可以提高 IT 运营的效率、一致性和协作性。我将介绍以下步骤&#xff1a; 将 SSL 证书文件复制到服务器将 PFX 证书导入指定的存储区获取导入的证…

    【Auto.js例程】华为备忘录导出到其他手机

    目录 问题描述方法步骤1.安装下载Visual Studio Code2.安装扩展3.找到Auto.js插件&#xff0c;并安装插件4.启动服务器5.连接手机6.撰写脚本并运行7.本文实现功能的代码8.启动手机上的换机软件 问题描述 问题背景&#xff1a;华为手机换成一加手机&#xff0c;华为备忘录无法批…

    静态相机中的 CCD和CMOS的区别

    文章目录 CCD处理方式CMOS处理方式两者区别 首先根据 成像原理&#xff0c;CCD和CMOS的作用是一致的&#xff0c;都是为了将光子转化为数字图像&#xff0c;只是 转换的方式出现差异。 CCD处理方式 获取光子&#xff1a; 在电荷耦合器件&#xff08;CCD&#xff09;传感器中…

    C#中的路由事件(Routed Events)

    路由事件的基本概念 路由事件是WPF中特有的事件系统&#xff0c;它允许事件在可视化树中"路由"传递&#xff0c;具有以下特点&#xff1a; 事件路由方向&#xff1a; 冒泡(Tunneling)&#xff1a;从事件源向根元素传递 隧道(Bubbling)&#xff1a;从根元素向事件源…

    抽象工厂模式深度解析:从原理到与应用实战

    作者简介 我是摘星&#xff0c;一名全栈开发者&#xff0c;专注 Java后端开发、AI工程化 与 云计算架构 领域&#xff0c;擅长Python技术栈。热衷于探索前沿技术&#xff0c;包括大模型应用、云原生解决方案及自动化工具开发。日常深耕技术实践&#xff0c;乐于分享实战经验与…

    力扣面试150题--克隆图

    Day 61 题目描述 思路 /* // Definition for a Node. class Node {public int val;public List<Node> neighbors;public Node() {val 0;neighbors new ArrayList<Node>();}public Node(int _val) {val _val;neighbors new ArrayList<Node>();}public N…

    Axure零基础跟我学:展开与收回

    亲爱的小伙伴,如有帮助请订阅专栏!跟着老师每课一练,系统学习Axure交互设计课程! Axure产品经理精品视频课https://edu.csdn.net/course/detail/40420 课程主题:Axure菜单展开与收回 课程视频:

    第十三节:第四部分:集合框架:HashMap、LinkedHashMap、TreeMap

    Map集合体系 HashMap集合的底层原理 HashMap集合底层是基于哈希表实现的 LinkedHashMap集合的底层原理 TreeMap集合的底层原理 代码&#xff1a; Student类 package com.itheima.day26_Map_impl;import java.util.Objects;public class Student implements Comparable<Stu…

    命名管道实现本地通信

    目录 命名管道实现通信 命名管道通信头文件 创建命名管道mkfifo 删除命名管道unlink 构造函数 以读方式打开命名管道 以写方式打开命名管道 读操作 写操作 析构函数 服务端 客户端 运行结果 命名管道实现通信 命名管道通信头文件 #pragma#include <iostream> #include &l…