- 【PHP】TP5.0模型关联搜索查询
zzoood
phpTP5phpsql数据库
在ThinkPHP5.0中,模型关联为我们提供了一种便捷的方式来操作数据库,尤其是在进行关联查询时。本文将介绍如何在TP5.0中使用模型关联进行搜索查询,并解决可能出现的报错问题。一、模型方法在TP5.0中,模型方法是实现关联的关键。以下是一个示例,展示了如何关联到user表:/***关联user表*/publicfunctionuser(){return$this->belongsTo(User
- 【PHP】TP5使用orderRaw 方法设置排序规则
zzoood
phpTP5phpsql数据库
目录1.使用orderRaw方法和field函数来按照指定的字段排序:2.使用子查询进行排序:3.使用SQL函数length进行排序:在TP5.0中,orderRaw方法可以用来设置原生的排序规则。该方法可以接受一个字符串参数,该字符串参数将被直接插入到SQL查询语句的ORDERBY子句中。1.使用orderRaw方法和field函数来按照指定的字段排序:$users=Db::name('user
- thinkphp mysql limit_ThinkPHP5.0框架开发--第7章 TP5.0数据库操作
米国脱口秀
thinkphpmysqllimit
ThinkPHP5.0框架开发--第7章TP5.0数据库操作第7章TP5.0数据库操作=========================================================今日学习1、TP5.0支持数据库类型Mysql、SqlServer、PgSQL、Sqlite等数据库的支持。2、如何连接数据库1、配置文件定义a、配置文件目录C:\AppServ\www\tp5\ap
- 【PHP】TP5.0及Fastadmin中将查询数据返回对象转为数组
zzoood
phpTP5php开发语言
目录方法一:使用collection助手函数方法二:设置返回数据集的对象名在ThinkPHP5.0中,对模型查询返回的对象进行了优化,默认情况下,使用all或select方法查询数据库将返回一个对象数组集合。这个集合是模型的实例数组,不是传统意义上的数组。因此,直接调用toArray方法并不能将其转换为真正的多维数组。为了帮助开发者更好地理解和使用对象集合,以下是一些指导建议:理解对象数组:首先,
- TP5.0的检验类的引用
weixin_40428902
php技术TP5.0THINKPHP
写这篇文章的原因在于想到如何的判断form表单提交过来的数据进行判断,为了防止mysql是注入方式。1.在下载好tp5.0后,配置好本地appache环境后进行的简单项目模块,在此引入tp5.0开发手册截图在Admin模块目录下新建一个validate目录,然后新建一个对应需要验证的类文件,3.验证器类定义信息//另外给类名一个命名空间namespaceapp\Admin\validate;//引
- php tp5.0中调用第三方函数
花开半月
第一步:通过QQ互联设置第三方登录的域名第二步:给QQ图像一个点击事件html代码jquery代码//进入第三方登录页面functiontoLogin(){//window.open("{:url('login/qq')}","TencentLogin","width=450,height=320,menubar=0,scrollbars=1,resizable=1,status=1,titleb
- php 遍历文件夹并压成zip_PHP-ZIP压缩文件
weixin_39769984
php遍历文件夹并压成zip
基于昨天的内容安装完了zip扩展之后,于是着手开始写代码了。代码是网上搬砖过来的,应为之前并没有做过这类的程序。搬完一运行,响应success~?NO!!!发现并没有这么简单,去目录一看我的压缩文件呢?接下来的工作就是去理解代码里函数的作用了,先提出自己花半天时间学习得重点:1.实例化类(基于TP5.0开发类名前面加'\')$zip=new\ZipArchive;2.创建压缩文件(同时也是打开压缩
- tp5.0 中的 volist 中的循环变量 $i
xcyzjs
//输出循环变量:{volistname="list"id="vo"key="k"}{$k}.{$vo.name}{/volist}//如果没有指定key属性的话,默认使用循环变量i,例如:{volistname="list"id="vo"}{$i}.{$vo.name}{/volist}-这里的索引是从1开始的,而不是从0开始
- tp下引用php文件夹,tp5使用PHPWord(下载引入/composer两种方式)
柴犬kobe
tp下引用php文件夹
PHPWORD使用文档一:引入tp5.0,tp5.1:1:composer方式(推荐)a:根目录下执行:composerrequirephpoffice/phpwordb:引入:usePhpOffice\PhpWord\PhpWord;2:下载引入方式a:下载PHPWord:地址:https://pan.baidu.com/s/19UctPmT5tdn0SqrEgM56MA提取码:zxcvb:放到
- tp5.0 微信jsapi支付
与之有余
phptp5.0php
tp5.0微信jsapi支付流程1、下载官方sdk包放在extend目录下2、在公众号里面关联商户号,在商户号里面配置域名3、在Wxpay.Config.php这个文件里面把你的公众号APPID、APPSECRET,商户号MCHID,自己设置的商户秘钥KEY全部设置好;例:publicfunctionGetAppId(){return'wx12345678912';//这里填公众号APPID(还有
- PHP支付,TP5.0接入支付宝支付流程(附教程)
付煜晨
PHP学习记录phpmysql
一、本地环境的话,首先需要有沙箱登录支付宝,蚂蚁金服账号(个人支付宝账号)戳这里!戳这里!点击右上角的控制台,然后在拉倒最下面,就能看到沙箱环境需要自己开启,配置一下信息,特别注意,网关地址:沙箱环境是有dev的,正式上要去掉dev生成秘钥工具,可以在支付宝开发文档里面自行下载。因为是测试,这里选择了电脑网站支付测试,选择下载Demo。下载好之后的文件夹,是这样的:把这个文件夹,整体放倒TP5项目
- 关于mongodb的聚合查询在thinkphp中的使用
cathy1213
mongodb
框架:tp5.0后台:fastadmin使用的是tp自带的composer包mongo2.0的那个版本。别问我为什么不升级,官方爸爸已经放弃了升级低版本的mongo包,3.0以上的版本都要求tp6版本,可是fastadmin目前还没有整站升级tp6,好无奈经过一系列的踩坑过程,最后弃用了tp自带包,选择了php-mongodb官方包,去composer上搜索mongodb,最火的那个就是。附带链接
- Fastadmin/Tp5.0连接多个数据库
你好骚啊
数据库
第一步先引入Configusethink\Config;第二步读取数据库配置$db=Config::get('database2');//读取第二个数据库配置第三步连接数据库$db=Db::connect($config);第四步对数据库进行操作$data=$db->name('admin')->find();新建的database2.php就是把原database.php全部复制过来,更改里面的
- thinkphp5.1数据库备份
梦安web开发
首页说一下tp5.0的好处就是可以使用composer安装数据库备份类库,composer命令安装:composerrequiretp5er/tp5-databackupdev-master安装成功后会在项目文件夹vendor下自动生成数据库备份类库:以上步骤操作完成开始使用:1.导入数据库备份类use\tp5er\Backup;2.基本配置信息,默认传入下面参数$config=array('pa
- PHP TP5.0框架会员根据经验值升级等级
你好骚啊
php开发语言
//初始化最小差值为一个较大的数 $minDifference=500000;先看一下会员等级表规则的表结构普通会员默认注册就是,经验值01.先查询出最高等级所需要的经验值//先查询最高等级所需要的经验值$b=Db::name('wechat_user_vip')->order('idDESC')->field('exp_num')->find();2.在定义一个当前用户的经验值$expNum
- Linux部署ThinkPHP5的Workerman亲测篇,workerman启动失败解决方法
政东.zd
php
一、安装扩展包composerrequiretopthink/think-worker如果不能安装,可能是用的tp5.0的版本,需要安装低版本的composer直接执行:composerrequiretopthink/think-worker=1.0.*即可成功二、新建workerman,查看官方文档即可https://www.kancloud.cn/manual/thinkphp5/235128
- RabbitMQ在Tp5.0 中实现延时队列(死信队列)
骑代码奔小康
实现步骤:创建两个交换机和队列:死信队列和死信队列上游队列死信队列的特性:插入一个没有过期时间的消息会导致,队列永远不会被消费前面的过期时间太长了,后面的消息就算过期也不会被消费的按随机串的方式来生成交换机和队列,保证一个交换机只有一条消息,消费完以后删除掉这里是设置消息的过期时间方式来实现的延时任务只需要监听死信队列的上游队列就可以实现想要的效果channel();//动态的创建交换机和队列//
- thinkphp5.0使用自带的think-queue队列
Icebreaking丶
PHPredis数据库nosql
composer安装相关的类库这里使用的tp5.0,所以只能是安装低版本的包composerrequiretopthink/think-queue=1.1.6安装完毕在extra下生成配置文件queue.php使用redis作为队列驱动return['connector'=>'Redis',//Redis驱动'expire'=>null,//任务的过期时间,默认为60秒;若要禁用,则设置为null
- php中文分词的一个简单实践
元英振兴
环境tp5.0在类头部引入相关文件usethink\Db;useplugins\pscws4;文件在项目跟目录下的extend\plugins文件夹中pscws4.php和xdb_r.class.php在public下创建文件夹scws包含dict.utf8.xdbrules.inirules.utf8.ini三个文件publicfunctionaddtwords(){if(request()->
- TP5开发API接口-1.创建token、解决跨域、设置api接口返回格式
挤时间学习的阿龙
1、解决TP5接口跨域问题说明:调用其他方法,会先执行TP5.0析构方法,然后再执行其他方法//解决跨域--析构方法protectedfunction_initialize(){header('content-type:text/html;charset=utf-8');header('Access-Control-Allow-Origin:*');header("Access-Control-A
- TP5.0隐藏入口文件index.php
老牛圣斗士
一、Apache在ThinkPHP5.0中,出于优化的URL访问原则,还支持通过URL重写隐藏入口文件,下面以Apache为例说明隐藏应用入口文件index.php的设置。下面是Apache的配置过程,可以参考下:1、httpd.conf配置文件中加载了mod_rewrite.so模块2、AllowOverrideNone将None改为All3、在应用入口文件同级目录添加.htaccess文件,内
- thinkphp5.0.24验证码
hgb24660
PHPthinkphp使用验证码
这里使用composer安装验证码类检查vendor下topthink是否有:think-captcha如果没有,进入CMD命令行界面使用composer下载:为了提升速度,建议使用国内镜像站点。composerconfig-grepo.packagistcomposerhttps://packagist.phpcomposer.comcd到web目录下执行以下命令:tp5.0的使用1.0下的扩展
- PHPExcel导出类
那个人_50f8
TP5.0微信公账号+小程序数据打通CRMEBV2.6导出表格图片namespaceservice;usePHPExcel_IOFactory;usePHPExcel;useservice\JsonServiceasJson;usethink\Request;classPHPExcelService{//PHPExcel实例化对象privatestatic$PHPExcel=null;//表头计数
- php+微信小程序 websocket
lsswear
微信小程序websocket小程序
一、需求背景根据需求小程序有个页面需要实时刷新数据,前端轮询太费性能,所以采用websocket。小程序只允许xss协议,因为要https的嘛。websocket协议就是ws,https的就是wss。二、小程序文档wx.sendSocketMessage(Objectobject)|微信开放文档/(ㄒoㄒ)/~~用错了后台接收不到数据。三、workermanphp使用tp5.0框架,原项目就是这个
- 基于ThinkPHP5框架开发的响应式网站建设小程序开发类网站PHP源码,支持微信小程序和百度小程序
爱奶瓶科技有限公司
mysql企业官网php微信小程序百度小程序
源码介绍基于ThinkPHP5框架开发的响应式网站建设小程序开发类网站PHP源码,支持PC电脑端和手机WAP自适应显示,支持微信小程序和百度小程序。这是一款基于TP5.0框架的文章为核心开发的免费的企业内容管理系统,ThinkPHP是目前国内主流的PHP框架,非常容易上手,适合PHP开发者二次开发属于自己的官方模板。此款源码适合网络公司、信息技术公司、科技公司拿来做自己的企业官网,前端采用自适应H
- PHP —— 用 ThinkPHP5.0 实现微信小程序登陆
vk阿木
PHPphp微信小程序开发语言
PHP——用ThinkPHP5.0实现微信小程序登陆《工欲善其事,必先利其器》大家好,之前学习了原生PHP和框架,今天我们运用框架TP5.0来实现一下微信小程序的用户登陆以及获取用户的信息接口。一、创建Wxuser模型一般MVC框架的数据操作,都是在Model层里面的,所以这里我们需要实现微信登陆的模型,代码如下,分为几个小功能点:使用前端发来的code去换取openid;利用openid生成to
- TP5.0、TP5.1、TP6.0 下载方式及环境要求
辰风沐阳
[TOC]1.TP5.0下载方式和环境要求**TP5.0环境要求:PHP版本>=5.4**PHP版本:PHP>=5.4.0PHP扩展:PDOPHPExtension、MBstringPHPExtension、CURLPHPExtensionThinkPHP5.0官方手册-安装:https://www.kancloud.cn/manual/thinkphp5/118006TP5.0下载方式:官网(此
- Excel导出功能--结合tp5.0框架(超详细)
ityuer
title:Excel导出功能--结合ThinkPHP5.0框架(超详细)tags:[Excel导出,TP5,导出,表格]目前,很多场景下都在使用Excel导出,现在结合ThinkPHP5.0框架详细说明下excel导出功能的实现步骤。原文博客:煜儿博客一.准备工作Excel的导出功能,在很多框架中都有配置,其中最广泛的就是使用composer来下载excel的扩展包,但是本人在使用的过程中,却发
- TP5.0、5.1、6 where查询的坑
王兴伍
5.1之前的where写法$where=array();$where['name']='php';$where['phone']=['like','133%']$where['age']=['>','13']table('test')->where($where)->select()5.1之后where写法$where=newWhere;$where['name']='php';$where['p
- 20190729
Lutong_03e3
tp5.0控制器初始化父级控制器tp5.0写法publicfunction_initialize()父级控制器tp5.1写法publicfunctioninitialize()在子控制之调用//publicfunction_initialize(){////调用父类的_initialize方法////_initialize函数没有任何内容,不需要写parent::_initialize()///p
- mondb入手
木zi_鸣
mongodb
windows 启动mongodb 编写bat文件,
mongod --dbpath D:\software\MongoDBDATA
mongod --help 查询各种配置
配置在mongob
打开批处理,即可启动,27017原生端口,shell操作监控端口 扩展28017,web端操作端口
启动配置文件配置,
数据更灵活 
- 大型高并发高负载网站的系统架构
bijian1013
高并发负载均衡
扩展Web应用程序
一.概念
简单的来说,如果一个系统可扩展,那么你可以通过扩展来提供系统的性能。这代表着系统能够容纳更高的负载、更大的数据集,并且系统是可维护的。扩展和语言、某项具体的技术都是无关的。扩展可以分为两种:
1.
- DISPLAY变量和xhost(原创)
czmmiao
display
DISPLAY
在Linux/Unix类操作系统上, DISPLAY用来设置将图形显示到何处. 直接登陆图形界面或者登陆命令行界面后使用startx启动图形, DISPLAY环境变量将自动设置为:0:0, 此时可以打开终端, 输出图形程序的名称(比如xclock)来启动程序, 图形将显示在本地窗口上, 在终端上输入printenv查看当前环境变量, 输出结果中有如下内容:DISPLAY=:0.0
- 获取B/S客户端IP
周凡杨
java编程jspWeb浏览器
最近想写个B/S架构的聊天系统,因为以前做过C/S架构的QQ聊天系统,所以对于Socket通信编程只是一个巩固。对于C/S架构的聊天系统,由于存在客户端Java应用,所以直接在代码中获取客户端的IP,应用的方法为:
String ip = InetAddress.getLocalHost().getHostAddress();
然而对于WEB
- 浅谈类和对象
朱辉辉33
编程
类是对一类事物的总称,对象是描述一个物体的特征,类是对象的抽象。简单来说,类是抽象的,不占用内存,对象是具体的,
占用存储空间。
类是由属性和方法构成的,基本格式是public class 类名{
//定义属性
private/public 数据类型 属性名;
//定义方法
publ
- android activity与viewpager+fragment的生命周期问题
肆无忌惮_
viewpager
有一个Activity里面是ViewPager,ViewPager里面放了两个Fragment。
第一次进入这个Activity。开启了服务,并在onResume方法中绑定服务后,对Service进行了一定的初始化,其中调用了Fragment中的一个属性。
super.onResume();
bindService(intent, conn, BIND_AUTO_CREATE);
- base64Encode对图片进行编码
843977358
base64图片encoder
/**
* 对图片进行base64encoder编码
*
* @author mrZhang
* @param path
* @return
*/
public static String encodeImage(String path) {
BASE64Encoder encoder = null;
byte[] b = null;
I
- Request Header简介
aigo
servlet
当一个客户端(通常是浏览器)向Web服务器发送一个请求是,它要发送一个请求的命令行,一般是GET或POST命令,当发送POST命令时,它还必须向服务器发送一个叫“Content-Length”的请求头(Request Header) 用以指明请求数据的长度,除了Content-Length之外,它还可以向服务器发送其它一些Headers,如:
- HttpClient4.3 创建SSL协议的HttpClient对象
alleni123
httpclient爬虫ssl
public class HttpClientUtils
{
public static CloseableHttpClient createSSLClientDefault(CookieStore cookies){
SSLContext sslContext=null;
try
{
sslContext=new SSLContextBuilder().l
- java取反 -右移-左移-无符号右移的探讨
百合不是茶
位运算符 位移
取反:
在二进制中第一位,1表示符数,0表示正数
byte a = -1;
原码:10000001
反码:11111110
补码:11111111
//异或: 00000000
byte b = -2;
原码:10000010
反码:11111101
补码:11111110
//异或: 00000001
- java多线程join的作用与用法
bijian1013
java多线程
对于JAVA的join,JDK 是这样说的:join public final void join (long millis )throws InterruptedException Waits at most millis milliseconds for this thread to die. A timeout of 0 means t
- Java发送http请求(get 与post方法请求)
bijian1013
javaspring
PostRequest.java
package com.bijian.study;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURL
- 【Struts2二】struts.xml中package下的action配置项默认值
bit1129
struts.xml
在第一部份,定义了struts.xml文件,如下所示:
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts
- 【Kafka十三】Kafka Simple Consumer
bit1129
simple
代码中关于Host和Port是割裂开的,这会导致单机环境下的伪分布式Kafka集群环境下,这个例子没法运行。
实际情况是需要将host和port绑定到一起,
package kafka.examples.lowlevel;
import kafka.api.FetchRequest;
import kafka.api.FetchRequestBuilder;
impo
- nodejs学习api
ronin47
nodejs api
NodeJS基础 什么是NodeJS
JS是脚本语言,脚本语言都需要一个解析器才能运行。对于写在HTML页面里的JS,浏览器充当了解析器的角色。而对于需要独立运行的JS,NodeJS就是一个解析器。
每一种解析器都是一个运行环境,不但允许JS定义各种数据结构,进行各种计算,还允许JS使用运行环境提供的内置对象和方法做一些事情。例如运行在浏览器中的JS的用途是操作DOM,浏览器就提供了docum
- java-64.寻找第N个丑数
bylijinnan
java
public class UglyNumber {
/**
* 64.查找第N个丑数
具体思路可参考 [url] http://zhedahht.blog.163.com/blog/static/2541117420094245366965/[/url]
*
题目:我们把只包含因子
2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14
- 二维数组(矩阵)对角线输出
bylijinnan
二维数组
/**
二维数组 对角线输出 两个方向
例如对于数组:
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 },
{ 13, 14, 15, 16 },
slash方向输出:
1
5 2
9 6 3
13 10 7 4
14 11 8
15 12
16
backslash输出:
4
3
- [JWFD开源工作流设计]工作流跳跃模式开发关键点(今日更新)
comsci
工作流
既然是做开源软件的,我们的宗旨就是给大家分享设计和代码,那么现在我就用很简单扼要的语言来透露这个跳跃模式的设计原理
大家如果用过JWFD的ARC-自动运行控制器,或者看过代码,应该知道在ARC算法模块中有一个函数叫做SAN(),这个函数就是ARC的核心控制器,要实现跳跃模式,在SAN函数中一定要对LN链表数据结构进行操作,首先写一段代码,把
- redis常见使用
cuityang
redis常见使用
redis 通常被认为是一个数据结构服务器,主要是因为其有着丰富的数据结构 strings、map、 list、sets、 sorted sets
引入jar包 jedis-2.1.0.jar (本文下方提供下载)
package redistest;
import redis.clients.jedis.Jedis;
public class Listtest
- 配置多个redis
dalan_123
redis
配置多个redis客户端
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=&quo
- attrib命令
dcj3sjt126com
attr
attrib指令用于修改文件的属性.文件的常见属性有:只读.存档.隐藏和系统.
只读属性是指文件只可以做读的操作.不能对文件进行写的操作.就是文件的写保护.
存档属性是用来标记文件改动的.即在上一次备份后文件有所改动.一些备份软件在备份的时候会只去备份带有存档属性的文件.
- Yii使用公共函数
dcj3sjt126com
yii
在网站项目中,没必要把公用的函数写成一个工具类,有时候面向过程其实更方便。 在入口文件index.php里添加 require_once('protected/function.php'); 即可对其引用,成为公用的函数集合。 function.php如下:
<?php /** * This is the shortcut to D
- linux 系统资源的查看(free、uname、uptime、netstat)
eksliang
netstatlinux unamelinux uptimelinux free
linux 系统资源的查看
转载请出自出处:http://eksliang.iteye.com/blog/2167081
http://eksliang.iteye.com 一、free查看内存的使用情况
语法如下:
free [-b][-k][-m][-g] [-t]
参数含义
-b:直接输入free时,显示的单位是kb我们可以使用b(bytes),m
- JAVA的位操作符
greemranqq
位运算JAVA位移<<>>>
最近几种进制,加上各种位操作符,发现都比较模糊,不能完全掌握,这里就再熟悉熟悉。
1.按位操作符 :
按位操作符是用来操作基本数据类型中的单个bit,即二进制位,会对两个参数执行布尔代数运算,获得结果。
与(&)运算:
1&1 = 1, 1&0 = 0, 0&0 &
- Web前段学习网站
ihuning
Web
Web前段学习网站
菜鸟学习:http://www.w3cschool.cc/
JQuery中文网:http://www.jquerycn.cn/
内存溢出:http://outofmemory.cn/#csdn.blog
http://www.icoolxue.com/
http://www.jikexue
- 强强联合:FluxBB 作者加盟 Flarum
justjavac
r
原文:FluxBB Joins Forces With Flarum作者:Toby Zerner译文:强强联合:FluxBB 作者加盟 Flarum译者:justjavac
FluxBB 是一个快速、轻量级论坛软件,它的开发者是一名德国的 PHP 天才 Franz Liedke。FluxBB 的下一个版本(2.0)将被完全重写,并已经开发了一段时间。FluxBB 看起来非常有前途的,
- java统计在线人数(session存储信息的)
macroli
javaWeb
这篇日志是我写的第三次了 前两次都发布失败!郁闷极了!
由于在web开发中常常用到这一部分所以在此记录一下,呵呵,就到备忘录了!
我对于登录信息时使用session存储的,所以我这里是通过实现HttpSessionAttributeListener这个接口完成的。
1、实现接口类,在web.xml文件中配置监听类,从而可以使该类完成其工作。
public class Ses
- bootstrp carousel初体验 快速构建图片播放
qiaolevip
每天进步一点点学习永无止境bootstrap纵观千象
img{
border: 1px solid white;
box-shadow: 2px 2px 12px #333;
_width: expression(this.width > 600 ? "600px" : this.width + "px");
_height: expression(this.width &
- SparkSQL读取HBase数据,通过自定义外部数据源
superlxw1234
sparksparksqlsparksql读取hbasesparksql外部数据源
关键字:SparkSQL读取HBase、SparkSQL自定义外部数据源
前面文章介绍了SparSQL通过Hive操作HBase表。
SparkSQL从1.2开始支持自定义外部数据源(External DataSource),这样就可以通过API接口来实现自己的外部数据源。这里基于Spark1.4.0,简单介绍SparkSQL自定义外部数据源,访
- Spring Boot 1.3.0.M1发布
wiselyman
spring boot
Spring Boot 1.3.0.M1于6.12日发布,现在可以从Spring milestone repository下载。这个版本是基于Spring Framework 4.2.0.RC1,并在Spring Boot 1.2之上提供了大量的新特性improvements and new features。主要包含以下:
1.提供一个新的sprin