一、Spring 框架

什么是框架[framework]?

在某个问题域中的一整套解决方案,在javaee体系下,不同的问题域[场景]下面有不同的框架,比如:在持久层中有 mybatis, Hibernate, Jdo等框架,还有MVC的框架,如:struts2, spring mvc、JSF、等。

Spring 是什么?

直译过来就是“春天”,它是由作者Rod Johnson 为改变早期企业级项目开发过程中使用EJB所遇到的问题而开发的一套轻量级的企业应用开发解决方案,取名 Spring, 【意味着程序员的“春天”】

现在, Spring Framework
是整个JAVAEE开发生态中必不可少的一个环节,大量的JAVAEE项目都是基于Spring框架来展开的,Spring
Framework也构建了一个很好的技术生态,基本上可以提供给程序员一整套的技术链来完成企业级项目的开发。

Spring Framework 目前最新版本是 5.x, 它的技术生态所含盖的技术和框架也很多,主要有:

  1. Spring MVC 框架
  2. Spring Boot
  3. Spring Cloud
  4. Spring Security
  5. Spring cache

Spring Framework 核心概念

  1. IOC 容器, 也叫 Inverse of Control, 控制反转, 换成另外一个词更好理解,叫 依赖注入 Dependency Injection, 简称 DI。
  2. AOP, 面向切面编程
  3. 数据访问支持层,包含 JDBC的技术, mybatis的支持,hibernate的支持, JPA 的支持.
  4. 事务的支持
  5. 测试的支持

了解Spring 框架的架构图

从上图可以看出,Spring core Container 是支撑所有上面技术组件的基础,其中beans是负责创建由spring管理的各种对象,context是容器应用上下文, SPEL是表达式语言,core 就是框架的核心代码码,一般无需程序员参与。

test 是测试组件,也是所有上面技术的组件所共用的。

左上角是数据持久层的支持,包含 JDBC、ORM[hibernate框架和mybatis框架]、OXM[java object和xml之间的转换]、以及JMS的支持、当然还有事务的支持。

右上角是 针对MVC的实现,由 spring mvc负责。

二、Spring Framework 之 IOC

开发的步骤流程

  1. 准备一个maven项目
  2. 导入相关的依赖 [spring-context]和[spring-test]
  3. 编写相关的代码
  4. 测试

Spring IOC的特性

  1. 采用单例模型,也就是说在IOC容器中,默认只创建配置Bean的唯一实例
  • 通过 scope 属性来控制容器是否采用单例,默认是 单例 [singleton]
  • 设置 scope=“prototype” ,表示IOC容器采用 原型模式,也就是不是单例。
  1. 采用“懒加载“方式来创建目标Bean对象
  2. 同一个接口类型,有多个实现的情况下,就会产生“二义性”。怎么解决?
  • 再加一个 名字 进行限定。

所以,默认情况下, Spring IOC中,Bean的搜索是根据 类型 来搜索的[by Type], 如果类型存在“二义性”时,则需要进一步通过bean的名称[id] 来搜索,这个叫 by Name。

IOC容器核心API

  1. ApplicationContext 接口,这就是IOC的核心容器接口,通过它可以获取被IOC容器管理的Bean
  1. 支持两种不同的配置:
  • XML 配置,传统的配置,一直很强大,很好用,如下: [ applicationContext.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">
    <!-- 定义我们的Bean, 在此定义的Bean,就会由spring容器负责创建和管理 -->
    <bean id="studentService" scope="singleton" init-method="xxx"
    class="com.hc.service.impl.StudentServiceImpl"/>
    </beans>
  • 注解的配置,JDK5.0之后才支持的,现在很流行。 如下: [ AppConfig.java ]

    @Configuration   //表示这是一个spring 注解配置类
    @ComponentScan(value = {"com.hc.service.impl"})
    public class AppConfig { //nothing! }
  • ApplicationContext 的实现类

 ​	\\- ClassPathXmlApplicationContext    如果采用xml配置,使用这个类

 ​	\\- AnnotationConfigApplicationContext  [简称 ACAC], 如果使用注解配置,使用这个类

三、Spring-test 环境

  1. 如果你想手动编写代码来获取Spring IOC 的上下文,这种情况下,是无需Spring-test 组件的,如下:


    /******
    * 测试[非 Spring-test 环境]
    */
    public class StudentServiceTest { @Test
    public void testAdd_use_spring_annotation() {
    //手工写代码得到 ac [也就是 spring ioc 上下文]
    ApplicationContext ac =
    new AnnotationConfigApplicationContext(AppConfig.class);
    //通过 ac 来获取被IOC容器管理的bean
    IStudentService iss = ac.getBean(IStudentService.class);
    //
    iss.add(null);
    }
    }
  1. 当然,建议是使用 spring-test 组件来做单元测试,它需要使用如下注解
  • @ContextConfiguration(classes=xxxx.class)
  • @RunWith(SpringJUnit4ClassRunner.class)
 ```java
@ContextConfiguration(classes = AppConfig.class) //读取spring的注解配置类
@RunWith(SpringJUnit4ClassRunner.class) //把上面读取到的IOC上下文由测试环境来使用
public class StudentServiceTestWithSpring {
@Autowired
private IStudentService studentService;
@Test
public void testAdd_use_spring_annotation_test() {
System.out.println(studentService);
studentService.add(null);
}
}
```
  • 这种使用 spring-test 组件进行测试的方式,是官方推荐的。它还可以这么写:

    @ContextConfiguration(classes = AppConfig.class)  //读取spring的注解配置类
    public class StudentServiceTestWithSpring extends AbstractJUnit4SpringContextTests {
    @Autowired
    private IStudentService studentService;
    @Test
    public void testAdd_use_spring_annotation_test() {
    System.out.println(studentService);
    studentService.add(null);
    }
    }

IOC相关的注解

  1. @Component 组件,修饰类的,需要被容器管理的bean类型,现在使用很少,因为有下面三个来代替它:
    * @Service 从语义上扩展了@Component, 代表 服务层的bean
    * @Repository 从语义上扩展了@Component, 代表 DAO层的bean
    * @Controller 从语义上扩展了@Component, 代表 控制层的bean
  1. @Autowired 自动注入,它是 byType 进行搜索的。
  1. @Qualifier 进一步限定搜索的Bean,按姓名搜索,也就是 byName
  1. @Resource 它是JAVAEE规范中的注解,spring IOC 实现了这个注解,它即支持byType,也支持byName
  1. @Configuration 表示此类是一个Spring的注解配置类
  1. @ComponentScan 用来指定要扫描的包,可以指定多个
  1. @ContextConfiguration 它是spring-test的注解,用在测试类上面,来读取目标配置类
  1. @RunWith 也是spring-test的注解,用在测试类上面,让测试类拥有spring 框架的上下文环境。

有关数据源配置

数据源是用来配置数据库的连接的,它是自动参与到连接池管理之中,一般都无需我们去实现数据源,都是由第三方的组件提供的,目前最主流的数据源技术组件【连接池实现】有:

  • commons-dbcp 组件, 由 apache 提供的
  • druid 组件,由 alibaba 提供
  • hikari 组件,一家日本公司

我们选用 druid 数据源,所以,在pom.xml中要加入 druid的依赖.

配置数据源相关的属性

  • url
  • driver
  • username
  • password

Note:
欢迎点赞,留言,转载请在文章页面明显位置给出原文链接
知者,感谢您在茫茫人海中阅读了我的文章
没有个性 哪来的签名!
详情请关注点我
持续更新中

© 2020 09 - Guyu.com | 【版权所有 侵权必究】

Spring 框架(持续完善中)的更多相关文章

  1. Eclipse/JavaWeb (三)三大框架之Spring框架 持续更新中...

    (一)发展历史 现在我们有三个层了,可是每层之间的调用是怎样的呢?比如显示层的struts需要调用一个业务类,就需要new一个业务类出来,然后使用:业务层需要调用持久层的类,也需要new一个持久层类出 ...

  2. 2018年最新Java面试题及答案整理(持续完善中…)

    2018年最新Java面试题及答案整理(持续完善中…) 基础篇 基本功 面向对象特征 封装,继承,多态和抽象 封装封装给对象提供了隐藏内部特性和行为的能力.对象提供一些能被其他对象访问的方法来改变它内 ...

  3. linux 命令学习(持续完善中...)

    linux 命令学习(持续完善中...) 主要是记录一些开发过程中用到的linux命令,慢慢补充 一.用户 1.添加用户: useradd 用户名 2.设置密码:passwd 用户名 ,然后按照提示输 ...

  4. Scrapy爬虫导图(持续完善中)

    Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中.

  5. ECLIPSE/JAVAWEB (二)三大框架之Hibernate框架 持续更新中...

    (一)发展历史 在Struts框架中使用jdbc连接来读写数据库,我们最常见的就是打开数据库连接.使用复杂的sql语句进行读写.关闭连接,获得的数据又需要转换或封装后往外传,这是一个非常繁琐的过程. ...

  6. Eclipse/JavaWeb (一)三大框架之struts框架 持续更新中...

    最近主要把javaweb的三大框架过一遍. (一)发展历史 传统的Java Web应用程序是采用JSP+Servlet+Javabean来实现的,这种模式实现了最基本的MVC分层,使得程序分为几层,有 ...

  7. Spring框架基础(中)

    Spring对不同持久化技术进行支持 JDBC 导入spring-jdbc-4.3.5.RELEASE.jar.spring-tx-4.3.5.RELEASE.jar 创建对象,设置数据库信息 创建j ...

  8. Spring框架spring-web模块中的RestTemplate类详解

    RestTemplate类是spring-web模块中进行HTTP访问的REST客户端核心类.RestTemplate请求使用阻塞式IO,适合低并发的应用场景. 1. RestTemplate类提供了 ...

  9. iOS开发常用第三方开源框架 持续更新中...

    键盘管理 TPKeyboardAvoiding IQKeyboardManager(1.2.8) 弹窗HUD MBProgressHUD(0.9.2) SVProgressHUD UIView+Toa ...

随机推荐

  1. NGINX+PHP+POSTGRESQL+ZABBIX 5.X

    安装前准备工作 系统及应用版本 centos 8.3 nginx 1.18 php 7.4.8 postgresql 12.3 zabbix 5.0.2 安装编译环境依赖包 dnf -y instal ...

  2. artifactdescriptorexception:Failed to read artifact descriptor for xxx:jar ”

    在Eclipse中执行Maven的install命令时,报“Failed to read artifact descriptor for xxx:jar ”的错误.这可能是在下载过程中文件出现错误.或 ...

  3. JavaScript基础-04-对象、函数

    对象 1. 对象:使用基本数据类型的数据,创建的变量都是独立的,不能成为一个整体        对象属于一个复合数据类型,在对象中可以保存多个不同数据类型的属性. 对象的分类: (1)内建对象:由ES ...

  4. Core + Vue 后台管理基础框架9——统一日志

    1.背景 前阵子有园友留言,提到日志相关的东西,同时,最近圈子里也有提到日志这个东西.一个充分.集中的统一日志平台还是很有必要的,否则系统出问题了只能靠猜或者干瞪眼.何谓充分,日志记录满足最低要求.出 ...

  5. IOS 如何持久化自定义对象 2014-08-01 01:38

    如果持久话自定义对象 那么这个对象一定要遵循 NSCoding 协议 并实现编解码:然后再将编解码后的数据 NSKeyedArchiver 到NSData中   @interface NSKeyAnd ...

  6. JavaScript设计模式之策略模式【组合委托】

    前言:语言只是工具,思想才是核心 今天要总结的是 策略模式 策略在开发中的应用非常广泛,所以也是非常常见且使用的设计模式. 在实际开发中,往往在实现一个功能时,有多种解决方案可行. 常见场景: 解压: ...

  7. 使用Postman工具做接口测试(五)——生成随机参数

    引言 我们平时使用最多的接口调试工具就是postman了,比如开发将一个接口给到你,你想看看接口是否正常.最常用的方法就是用postman去调一下.如果通,就写接口测试用例,反之,将开发打一顿吧o(* ...

  8. linux驱动之模块化编程

    今天刚开始学习linux驱动的编写.在网上开了许多网友的博客,感觉比较好的摘抄下来,以便以后忘记可以随时查看.下面是摘抄文章的地址,非常感谢他们. http://blog.chinaunix.net/ ...

  9. 1.Oracle数据库简介

    Oracle数据库简介 Oracle Database,又名Oracle RDBMS,或简称Oracle.是甲骨文公司的一款关系数据库管理系统.它是在数据库领域一直处于领先地位的产品.可以说Oracl ...

  10. META.表

    META.表