Spring框架(一)

news2024/11/17 15:41:42

1、服务端的三层开发

        表现层、业务层(spring就属于业务层)、持久层

2、Spring是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用 

3、Spring的核心是控制反转(IoC控制反转)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架。

4、Spring框架的优点

  • 方便解耦,简化开发,Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理,也就是IoC的作用
  • AOP编程的支持,Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。(可扩展性)
  • 声明式事务的支持,只需要通过配置就可以完成对事务的管理,而无需手动编程。
  • 方便程序的测试,Spring对Junit4支持,可以通过注解方便的测试Spring程序。
  • 方便集成各种优秀框架,Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts2、Hibernate、MyBatis、Quartz等)的直接支持。
  • 降低JavaEE API的使用难度,Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低。

5、Spring的核心配置文件

<?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">
    
    <!--IOC管理bean-->
    <bean id="userService" class="cn.tx.service.UserServiceImpl" />
    
</beans>

(1)bean标签的一些属性

  • id属性:代表对象的唯一标识。可以看做一个人的身份证号
    • 注意,该id属性的值在配置文件中必须是唯一的

  • class属性:用来指定要创建的java对象的类名,这个类名必须是全限定类名(带包名)

  • scope属性,scope属性代表Bean的作用范围。

    • singleton单例(默认值),最常用的方式。

    • prototype多例

  • request应用在Web项目中,每次HTTP请求都会创建一个新的Bean

  • session应用在Web项目中,同一个HTTP Session 共享一个Bean

(2)bean对象的创建和销毁的两个属性配置

        Spring初始化bean或销毁bean时,有时需要作一些处理工作,因此spring可以在创建和拆卸bean的时候调用bean的两个生命周期方法

  • 方法一:init-method:当bean被载入到容器的时候调用init-method属性指定的方法
  • 方法二:destroy-method:当bean从容器中删除的时候调用destroy-method属性指定的方法
  • <!--默认情况单例 scope="singleton"  -->
    <bean id="userService" class="com.qcby.service.impl.UserServiceImpl" />
    <!--多例 scope="prototype" -->
    <bean id="userService" class="com.qcby.service.impl.UserServiceImpl" scope="prototype" init-method="init" destroy-method="destory"/>

(3)实例化Bean的三种方式

  • 无参的构造方法(默认,使用较多)
  • 静态工厂
    • /**
        * 静态工厂方式
       */
      public class StaticFactory {
          // 静态工厂方式
          public static UserService createUs(){
              System.out.println("通过静态工厂的方式创建UserServiceImpl对象...");
              // 编写很多业务逻辑 权限校验
              return new UserServiceImpl();
          }
      }
      
      //配置文件中的bean
      <bean id="us" class="cn.tx.demo1.StaticFactory" factory-method="createUs" />   

  • 动态工厂(实例工厂)
    • /**
       * 动态工厂方式
       */
      public class Dfactory {
          public UserService createUs(){
              System.out.println("实例化工厂的方式...");
              return new UserServiceImpl();
          }
      }
      
      //配置文件中的bean
      //因为现在是实例(对象),如果我们要调用方法,就必须现有对象所以我们要先写出动态bean
      <bean id="dfactory" class="cn.tx.demo1.Dfactory" />
      <bean id="us" factory-bean="dfactory" factory-method="createUs" />

(4)关于配置文件的名称

  • 该配置文件的名字不是必须是aplicationContext,是我们自己提供的
  • 可以有多个这样的配置文件 
  • 文件中配置的类(bean)不一定要是自己创建的类,jdk中的类也可以实现,只要这个类不是抽象的,并且提供了无参数构造方法。

(5)底层生成类的实现方法

        spring的工厂生成类时其实是调用的类的构造方法,所以要想让spring给你创建对象,必须保证无参数构造方法是存在的(其实底层实现原理是反射机制)

(6)创建好的对象存储到一个什么样的数据结构当中了呢

        是一个map结构,如图所示

(7)getBean()方法返回的类型是Object,如果访问子类的特有属性和方法时,还需要向下转型,有其它办法可以解决这个问题吗

//第一种,进行强制类型转换
CollectionPojo collectionPojo = (CollectionPojo) applicationContext.getBean("collectionPojo");
//直接进行反射
CollectionPojo collectionPojo1 = applicationContext.getBean("collectionPojo", CollectionPojo.class);

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024热门骨传导蓝牙耳机怎么选?超全的选购攻略附带好物推荐!

对于很多喜欢运动健身的小伙伴&#xff0c;在现在市面上这么多种类耳机的选择上&#xff0c;对于我来说的话还是很推荐大家去选择骨传导运动耳机的&#xff0c;相较于普通的入耳式蓝牙耳机&#xff0c;骨传导耳机是通过振动来传输声音的&#xff0c;而入耳式耳机则是通过空气传…

计算机网络模型(OSI架构、TCP/IP架构)

OSI开放式系统互联 为什么会有通用的网络通信模型&#xff08;OSI、TCP/IP&#xff09;一、OSI&#xff08;1&#xff09;OSI 是什么&#xff08;2&#xff09;OSI 七层第七层、应用层第六层、表示层第五层、会话层第四层、传输层第三层、网络层第二层、数据链路层第一层、物理…

【JD-GUI】MacOS 中使用Java反编译工具JD-GUI

希望文章能给到你启发和灵感&#xff5e; 如果觉得文章对你有帮助的话&#xff0c;点赞 关注 收藏 支持一下博主吧&#xff5e; 阅读指南 开篇说明概念理解一、基础环境说明1.1 硬件环境1.2 软件环境 二、下载与安装2.1 选择对应版本2.2 解压运行排除异常&#xff1a;2.3 关于…

真实评测:可道云teamOS文件上传功能丝滑到爱不释手

对于每日沉浸在图片与视频海洋中的媒体工作者而言&#xff0c;与海量的多媒体文件打交道几乎成了家常便饭。 文件的上传和存储&#xff0c;对他们而言&#xff0c;不仅仅是工作中的一个环节&#xff0c;更像是将一天的辛勤与付出妥善安置的仪式。无论是突发现场的精彩瞬间&am…

每个 Node.js 开发人员都应该知道的13个库(下)

7. Sequelize Mongoose是一个Node。基于js的MongoDB对象建模工具&#xff0c;通常被称为对象数据建模&#xff08;ODM&#xff09;库&#xff0c;它提供了诸如钩子、模型验证、连接和查询等功能。 Mongoose为应用程序数据提供了一个基于模式的解决方案&#xff0c;它在应用程…

常微分方程算法之编程示例六-解一阶方程组(龙格-库塔法)

目录 一、研究问题 二、C++代码 三、计算结果 一、研究问题 本节我们采用龙格-库塔法(Runge-Kutta法)求解一阶方程组初值问题。 之前我们已经利用龙格-库塔法求解常微分方程问题,详见: 常微分方程算法之编程示例四(龙格-库塔法)-CSDN博客https://blog.csdn.net/L_pea…

Windows11环境下安装Vmware Workstation 16的方法

1、下载VMWare 从网盘下载 https://pan.baidu.com/share/init?surlUpcnqiRv6nUuzO0EOZ22zg 提取码&#xff1a;8888 2、安装VMware虚拟机   第1步&#xff1a;双击上面准备好的Vmware Workstation 16虚拟机软件安装包&#xff0c;即可看到如图所示的安装向导初始界面&#x…

远程过程调用(RPC)

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

实际项目开发:Spring集成Redis,并实现短信登录功能

redis新手&#xff0c;学了几种基本数据类型&#xff0c;却不知道怎么使用&#xff1f; 总是一边学一边忘&#xff1f; 学会了Redis的大多数使用命令&#xff0c;却不知道如何在项目中使用&#xff1f; 本文将从实际出发&#xff0c;为大家解决这些问题。 我是蚊子码农&#xf…

gin-vue -admin 初始化安装后 进入 后台首页报错

报错原因&#xff1a; 因为 我是使用的phpstudy 小皮的数据库 默认的是MySam 的引擎 mysql 引擎需要是 innoDB 解决办法 &#xff1a; 在linux 的环境下 配置一个数据库 &#xff0c; 我是用的是vmware 虚拟机

【DC-DC升压电推剪方案】FP6277,FP6296电源升压芯片在电推剪中扮演着一个怎样的角色?带你深入了解电推剪的功能和应用及工作原理

随着人们对个人形象要求的不断提高&#xff0c;理发器作为一个必备的家居用品&#xff0c;也在不断进行技术升级。而其中的核心装备之一&#xff0c;电推剪理发器升压芯片FP6277、FP6296&#xff0c;正在引领着现代理发技术的突破。本文将给大家带来的是电推剪在传统意义上运用…

V-Series Avalon-MM DMA Interface for PCIE IP核

目录 1. IP概述 2. Avalon-MM DMA Ports 3. 参数设置 3.1 系统设置 3.2 基址寄存器 (BAR) 设置 3.3 设备识别寄存器 3.4 PCI Express和PCI功能参数 3.4.1 Device Capabilities 3.4.2 Error Reporting 3.4.3 Link Capabilities 3.4.4 MSI and MSI-X Capabilities …

开源 150 T 数据(2023年之前所有数据)

开源 150 T 数据&#xff08;2023年之前所有数据&#xff09; 开源 150 T 数据生成大规模、高质量训练数据集 生成巨量数据 数据清洗和过滤 混合数据源 多级别训练和模型评估 探索新的训练策略多级别训练和模型评估探索新的训练策略 万卡 H100 集群训练 开源 150 T 数据 …

B+树与索引解析

文章目录 B树与索引简介几个关键点应用案例场景描述索引创建查询操作更新操作并发处理 Python代码示例 B树与索引简介 B树是一种在计算机科学中广泛使用的自平衡的树数据结构&#xff0c;它能保持数据排序&#xff0c;并且搜索、插入和删除操作的时间复杂度都是O(log n)。B树被…

【Docker项目实战篇】Docker部署PDF多功能工具Stirling-PDF

【Docker项目实战篇】Docker部署PDF多功能工具Stirling-PDF 前言一、Stirling-PDF介绍1.1 Stirling-PDF简介1.2 Stirling-PDF功能 二、本次实践规划2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四…

【AI原理解析】—朴素贝叶斯原理

朴素贝叶斯&#xff08;Naive Bayes&#xff09;是一种基于贝叶斯定理与特征条件独立假设的分类方法。这种分类方法简单、高效&#xff0c;并且在很多实际场景中都有良好的表现。 1. 贝叶斯定理 贝叶斯定理是关于条件概率的定理&#xff0c;它描述了两个条件概率之间的关系。…

shell (三)shell脚本

SHELL脚本 编程语言的分类 解释型语言&#xff1a;shell&#xff0c;Python&#xff0c;需要解析器 编译型语言&#xff1a;C语言&#xff0c;C&#xff0c;需要编译器 shell脚本 操作系统的结构 shell&#xff08;贝壳&#xff09; 应用层 app&#xff0c;代码 应用层需要通…

【项目实训】后端逻辑完善

经测试&#xff0c;我们决定前端可以同时选择多个类型的岗位进行查询&#xff0c;以显示相应的公司岗位信息 于是&#xff0c;修改后端函数的逻辑&#xff1a; 后端 首先&#xff0c;因为要对checkList中的job_name进行模糊匹配查询&#xff0c;于是使用以下代码&#xff1a…

C++之STL(九)

1、函数对象 什么适合推荐使用函数对象&#xff1f; 需要状态的函数调用: 需要状态的函数调用: 函数对象可以包含成员变量&#xff0c;可以在多次调用中保持状态。这在某些算法中非常有用。 提高性能: 编译器可以更好地优化函数对象&#xff0c;因为它们是具体的类型&#xf…

[Redis]主从模式

启动主从复制 由于我们只有一台机器&#xff0c;所以我们只能在机器上开多个redis程序来演示不同的机器 因为一个端口号只能被一个进程绑定&#xff0c;所以我们需要修改配置&#xff0c;绑定不同的端口号&#xff0c;并且还要修改工作目录&#xff08;数据持久化的位置&#…