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>
- id/class:
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