草庐IT

Spring 框架基础

编程人生 2023-09-21 原文

主要学习,总结 和介绍一下几点内容:

    1.Spring支持"面向接口编程"的设计方法:

     2.使用静态和实例工厂创建bean

     3.基于构造函数DI,用于将bean依赖关系作为构造函数参数传递.

      4.将简单的String值作为参数传递给构造函数和setter方法:

      5.bean的工作域

1.面向接口编程的设计方法:

    如果依赖于其他类的类直接引用其依赖项的具体类,则会导致类之间的紧密耦合.这意味着如果要替换其依赖项的其他实现,则需要更改这个依赖于其他类的类本身.

    我们知道Java接口定义了器实现类应遵循的契约.因此,如果一个类依赖于其依赖项实现的接口,那么当替换不同的依赖项实现时,类不需要改变.一个类依赖于由其依赖项所实现的接口的应用程序的设计方法称为"面向接口编程". 这种设计方法使得依赖类与依赖项之间松耦合.由以来累实现的接口称为依赖接口.

如上图所示, FixedDepositService 依赖 FixedDepositService 接口, FixedDepositService 接口有两个实现类,可以不同的方式连接数据库.当有一天需要用Mybatis 连接数据库时 ,只需要新增一个Mybatis实现类并将实现类提供给FixedDepositService 接口即可,不用修改 FixedDepositService  接口类.

2.使用静态和实例工厂方法创建Spring bean

    2.1 用静态工厂创建SpringBean 

工厂类定义
注入由静态工厂方法创建的对象

在上述bean的定义中,class 特性指定了定义静态工厂方法的类的完全限定名称。

factory-method特性指定了spring 容器调用的获取FixedDepositDao 对象实例的静态工厂方法名称。

<constructor-arg>元素在Spring 的bean schema 中定义,用于传递构造函数的参数以及静态和实例工厂方法的参数.

index 特性值为0意味着<contructor-arg>元素为getFixedDepositDao工厂方法的第一个参数(即daoType),而value特性值指定了参数值.如果工厂方法接收多个参数,则需要为每个参数定义一个<contructor-arg>

2.2实例工厂创建SpringBean

调用FixedDepositD奥Factory的getFixedDepositDao方法的配置

在上述代码清单中, FixedDepositDaoFactory 类被配置为常规的SpringBean ,并且使用单独的<bean>元素来配置实例工厂方法的详细信息.

配置实例工厂的详细信息,使用<bean>元素的factory-bean 和factory-method特性.factory-bean特性是指定义实例工厂的方法的bean、factory-method特性指定实例工厂方法的名称。

与static工厂方法一样,可以使用<constructor-arg> 元素将参数传递给实例工厂方法.

2.3 基于构造函数的DI

    2.3.1回顾基于setter 的DI

基于构造函数的DI

基于构造函数和基于setter的DI机制的结合使用

将配置信息传递给bean

bean 的作用域

bean的作用域可以指定,如果不指定默认为singleton范围,表示该实例可以被容器内其他实例共享。

在Web应用场景中,Spring允许你指定其他的范围:request、session、websocket和applciation。这些范围决定了bean实例的生命周期。例如,request 范围的bean 的生命周期仅限于单个HTTP请求。

JUnit 的 @BeforeClass 注解制定了类中任何测试方法之前调用init方法,这意味着@BeforeClass方法只被调用一次,而@Test注解的方法只有在执行@BeforeClass注解的方法后才能执行.

由于controller bean 是 singleton 范围的,因此 controller1 bean 和 controller1 bean 的实例是一样的.

有关Spring 框架基础的更多相关文章

  1. ruby-on-rails - 带 Spring 锁的 Rails 4 控制台 - 2

    我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.

  2. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  3. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  4. TimeSformer:抛弃CNN的Transformer视频理解框架 - 2

    Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图

  5. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  6. spring.profiles.active和spring.profiles.include的使用及区别说明 - 2

    转自:spring.profiles.active和spring.profiles.include的使用及区别说明下文笔者讲述spring.profiles.active和spring.profiles.include的区别简介说明,如下所示我们都知道,在日常开发中,开发|测试|生产环境都拥有不同的配置信息如:jdbc地址、ip、端口等此时为了避免每次都修改全部信息,我们则可以采用以上的属性处理此类异常spring.profiles.active属性例:配置文件,可使用以下方式定义application-${profile}.properties开发环境配置文件:application-dev

  7. ruby - sinatra 框架的 MVC 模式 - 2

    我想开始使用“Sinatra”框架进行编码,但我找不到该框架的“MVC”模式。是“MVC-Sinatra”模式或框架吗? 最佳答案 您可能想查看Padrino这是一个围绕Sinatra构建的框架,可为您的项目提供更“类似Rails”的感觉,但没有那么多隐藏的魔法。这是使用Sinatra可以做什么的一个很好的例子。虽然如果您需要开始使用这很好,但我个人建议您将它用作学习工具,以对您来说最有意义的方式使用Sinatra构建您自己的应用程序。写一些测试/期望,写一些代码,通过测试-重复:)至于ORM,你还应该结帐Sequel其中(imho

  8. ruby-on-rails - Spring 不起作用。 [未初始化常量 Spring::SID::DL] - 2

    我无法运行Spring。这是错误日志。myid-no-MacBook-Pro:myid$spring/Users/myid/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/spring-0.0.10/lib/spring/sid.rb:17:in`fiddle_func':uninitializedconstantSpring::SID::DL(NameError)from/Users/myid/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/spring-0.0.10/li

  9. 【网络】-- 网络基础 - 2

    (本文是网络的宏观的概念铺垫)目录计算机网络背景网络发展认识"协议"网络协议初识协议分层OSI七层模型TCP/IP五层(或四层)模型报头以太网碰撞路由器IP地址和MAC地址IP地址与MAC地址总结IP地址MAC地址计算机网络背景网络发展        是最开始先有的计算机,计算机后来因为多项技术的水平升高,逐渐的计算机变的小型化、高效化。后来因为计算机其本身的计算能力比较的快速:独立模式:计算机之间相互独立。    如:有三个人,每个人做的不同的事物,但是是需要协作的完成。    而这三个人所做的事是需要进行协作的,然而刚开始因为每一台计算机之间都是互相独立的。所以前面的人处理完了就需要将数据

  10. 【云原生】SpringCloud-Spring Boot Starter使用测试 - 2

    目录SpringBootStarter是什么?以前传统的做法使用SpringBootStarter之后starter的理念:starter的实现: 创建SpringBootStarter步骤在idea新建一个starter项目、直接执行下一步即可生成项目。 在xml中加入如下配置文件:创建proterties类来保存配置信息创建业务类:创建AutoConfiguration测试如下:SpringBootStarter是什么? SpringBootStarter是在SpringBoot组件中被提出来的一种概念、简化了很多烦琐的配置、通过引入各种SpringBootStarter包可以快速搭建出一

随机推荐