Java Spring初探

Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,从github的。

Spring Framework

  • 概览
  • 详细介绍 Spring Framework Spring Core ## 构建Rest-Service
    参考SpringFramework
    参考Spring官网例子
  • 这里是通过Maven来构建的,通过pom.xml配置好应用的依赖信息,
  • Resolving过程可能会很久,如果某个库一直包红可能是网络问题,建议删除后重新加入pom.xml文件中,需要耐心等待。亲测有效果.
  • 需要先生成JAR包,然后通过java -jar JAR包,之后在浏览器通过默认的ip地址加上默认的端口8080和设置的路径就能访问到数据了,效果如下:
  • 网上也有方案说是修改maven镜像地址,在工程目录下添加settings.xml配置阿里云镜像,我试过几次没什么效果.最后发现原来是自己网差了,多下载几次就行了。 java 1 <mirrors>
    2 <mirror>
    3 <id>nexus-aliyun</id>
    4 <mirrorOf>*</mirrorOf>
    5 <name>Nexus aliyun</name>
    6 <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    7 </mirror>
    8 </mirrors>

Spring重要概念IoC(Inversion of Control)

  • 控制反转,由Ioc容器在运行期间将对象动态的将某种依赖关系(主要通过pom.xml或注解的方式来设置)注入到容器中。主要是通过DI的方式来实现,如下图所示:

  • 开发者只需实现对应的 POJOs(Pain Old java Object),简单的java类以及描述他们之间关系的配置文件就可以了,其余的工作会由Ioc自动实现

  • 它的主要优点,将对象的创建和组成关系封装起来,但是相反的我们需要添加大量的配置文件。所以在实现接口类时应该尽量的简介,不然会陷入地狱式的配置.

Spring基础-Bean管理

  • Bean是Spring的最基础部分了,需要熟悉大量的语法格式。
  • 它主要是提供MetaData的配置信息,提供给Ioc文件管理依赖关系创建对象,每个Bean可以可以看作一个具体的Java类。
  • 它主要由两种方式申明,通过xml标记文档写入,通过注解的方式标记,相比较而言后者有着更加完善的检测机制,更加清晰和易于编程。
  • Bean定义了很多个格式来怎么描述类之间的关系,常用的有如下这些

    • id/class:
    • property:
    • 同时也支持多个xml文件导入,通过import关键字将多个xml的配置信息倒入

        <beans>
      <import resource="services.xml"/>
      <import resource="resources/messageSource.xml"/>
      <import resource="/resources/themeSource.xml"/>
      <bean id="bean1" class="..."/>
      <bean id="bean2" class="..."/>
      </beans>
  • Annotation-based configuration:Spring 2.5 引入了对基于注解的配置元数据的支持。

  • Java-based configuration:从 Spring 3.0 开始,Spring JavaConfig 项目提供的许多功能成为了核心 Spring Framework 的一部分

  • Bean常见属性类表

Bean作用域和生命周期

  • singleton: 每个Bean容器中值存在一份
  • prototype: 每次请求(每次使用)创建新的实例子,destroy方式不生效
  • request: 每次http请求创建一个实例,˙在当前request内生效
  • session: 同上
  • global session: 基于portlet的web中生效(portlet定义了global session),主要是为了避免portlet中各个子系重复请求资源,如登录之后的信息保存等。

  • 通过继承具有生命周期回调的默认Bean实例(InitializingBean,DisposableBean)

  • 通过pom.xml指定初始化和销毁 (default-destory/init-method)

  • 全局设置,在beans标签中设置,此处的方法为可选方法,不实现不会报错

  • 优先级: DefaultLifeCycleBean > CustomClass xml config > xml beans config

Bean装配Aware接口

  • Spring中提供了一些以Aware接口结尾的接口,用于初始化之后自动获取某些资源
    • ApplicationContextAware
    • ApplicationEventPublisherAware
    • BeanClassLoaderAware
    • BeanFactoryAware
    • BootStrapContextAware
    • LoadTimeWeaverAware
    • MessageSourceAware
    • NotificationPublisherAware
      ...

Bean的自动装配(AutoWriting)

  • No: 默认的选项
  • byName: 根据属性名自动装配
  • byType: 注意不能有多个类型,必须唯一,防止冲突
  • Constructor: 更加丰富,可以找到对应的有构造器的bean进行组装
  • 上面几种属性限制主要作用是减少配置的代码行数

Bean装配Resource

  • UrlResoure
  • Class
  • FIleSYstem
  • ServeletContextResource
  • InputStreamResource
  • ByteArrayResource
  • ResourceLoader

Spring注解管理及实现

  • Spring3.0开始,注解开始丰富,组件扫描与自动装配极大的简化了项目。
    具体参考文档Spring官方文档

单元测试

  • 单元测试实际上是控制反转的一个验证流程,通过模拟用户的行为事件
  • 启动初始化应用程序上下文,围绕着 @before -> @test -> @after这三个关键事件来执行
  • 同大部分语言类似,
    • 初始化准备测试环境,通常为applicationContext
    • 准备mock数据
    • 构建测试对象
    • 执行具体的测试用户
    • 验证测试结果
    • 释放本次测试单元的资源

参考

https://docs.spring.io/spring-framework/docs/current/reference/html/index.html

原文地址:https://www.cnblogs.com/wwoo/p/java-spring-chu-tan.html