- C# 探秘:枚举器(IEnumerator)与可枚举类型(IEnumerable) - 揭秘 foreach 的幕后英雄
钢铁男儿
C#图解教程c#java算法
在C#开发中,foreach循环是我们遍历集合(如数组、列表)的得力助手。它简洁优雅地为我们取出集合中的每一个元素。但你是否思考过,foreach是如何知道如何遍历这些集合的?其背后的核心机制就是枚举器(Enumerator)和可枚举类型(Enumerable)。本文将深入探讨这两个接口(IEnumerator和IEnumerable),揭开foreach循环的神秘面纱。foreach的魔法背后让
- Go实战(三)-数组array、切片slice语法详解
2401_87198334
golang开发语言后端
为何使用range意义明确,美观C++:没有类似能力Java/Python:只能foreachvalue,不能同时获取i,V访问越界如果下标在数组合法范围之外,则触发访问越界,会panic1.3数组是值类型赋值和传参会复制整个数组,而非指针。因此改变副本的值,不会改变本身的值。[10]int和[20]int是不同类型调用funcf(arr[10]int)会拷贝数组,支持“==”、“!=”操作符,因
- 【面试题】JavaScript基础高频面试(上)
城仕
面试题JavaScript
1、简述JavaScript中map和foreach的区别?`map`和`forEach`都是JavaScript数组的迭代方法,但它们之间存在一些关键区别。1.返回值:`map`方法会返回一个新的数组,这个新数组是由原数组通过某个函数处理后的结果组成的。而`forEach`方法则没有返回值,它仅仅是对数组中的每个元素执行一次给定的函数。2.修改原数组:`forEach`方法可以直接修改原数组,而
- Java 8、17、21:核心特性与升级指南
爱编程的程序猿
javajvm开发语言
1.Java8(2014年发布,LTS)核心特性:Lambda表达式简化匿名内部类写法,支持函数式编程。示例:list.forEach(n->System.out.println(n));StreamAPI提供声明式数据处理(过滤、映射、排序等)。示例:list.stream().filter(n->n>2).collect(Collectors.toList());默认方法与静态方法接口可定义默
- 7.16 C#学习笔记
LH_Z
c#visualstudio
字符串1.如何获取字符串中的每一个字符通过遍历//遍历:forforeachfor(inti=0;inumarr[i]){min=numarr[i];}}//平均值for(inti=0;inumarr[i]){min=numarr[i];}sum+=numarr[i];}ping=sum/numarr.Length;}ref的主要作用是传入数据,因此在传入数据之前必须要对其赋值以下是ref的应用实
- auto遍历
yuqiSun
通常遍历map,vector等时,我们都是用index或者迭代器,但是c++11提供的auto可用于更好的遍历,类似于Java中的foreach.auto本身是一种自动匹配类型的工具。能够自动确定数据类型。详细参见:auto这里用其来遍历,非常好用,如遍历vector和unordered_map:inta[]={1,1,1,2,5,5,4,4,3,7,7,3};inta_size=sizeof(a
- php、go、python后端接口签名实现
奇华智能
后台开发linux签名接口安全
1.php实现/**生成签名,$args为请求参数,$key为私钥*/functionmakeSignature($args,$key){if(isset($args['sign'])){$oldSign=$args['sign'];unset($args['sign']);}else{$oldSign='';}ksort($args);$requestString='';foreach($arg
- js扁平数组树形,根据指定节点id查询改节点下的所有子节点
废话不多说,直接上代码functionfindAllChildren(list,parentId){constresult=[];//查找直接子节点constdirectChildren=list.filter((item)=>item.parentId===parentId);//递归查找子节点的子节点directChildren.forEach((child)=>{result.push(ch
- 用一段浏览器控制台脚本实现选中kimi全部历史会话的功能
脚本如下:constcheckboxes=document.querySelectorAll('#appdiv.group-listinput[type="checkbox"]');checkboxes.forEach(checkbox=>{checkbox.checked=true;checkbox.dispatchEvent(newEvent('change',{bubbles:true}))
- (九)set结构
我拥抱着我的未来
set结构map,set结构都可以用foreach循环出来。set不允许插入重复的值,map键值对没有限制/*数据结构:set*集合:可以存储任何数据类型,并且唯一(不重复的值)*/constset2=newSet([1,true,'string']);console.log(set2);constset1=newSet();//往set1中添加数据set1.add(100);set1.add("
- ECMAScript新特性(二)
洲行
Set数据结构Set与Array是十分相似的,不过Set不允许值重复consts=newSet()s.add(1).add(2).add(3).add(4).add(1)//add返回的还是set类型,所以可链式调用console.log(s)//=>Set[1,2,3,4]重复的1会被忽略掉//依然可以使用forEach等数组循环方法s.forEach(i=>console.log(i))//一
- Mybatis嵌套foreach的坑
MiaeLKK
今天用xml写sql出现问题,mapper入参为集合,其中要获取集合中每个元素的某个属性,这个属性也是个集合。本来按照以前foreach写法,给集合项取个变量名,直接用这个变量名.属性名即可,但如果属性为集合好像就会报错。错误代码示例:andttask.fcreatetime>#{task.createtime[0]}andttask.fcreatetime<#{task.create
- 【数据库】触发器 Trigger
有事请出门右转
触发器Trigger概念:数据库中的一个对象,相当于JS中的监听器触发器可以监听增删改三个动作比如说我想监听一张表,只要我增删改了这张表中的数据,我就可以触发这个触发器,去往另外一张表中记录一下日志语法:DELIMITER$$CREATETRIGGER`数据库名`.`触发器名`BEFORE/AFTERINSERT/UPDATE/DELETEON`数据库名`.`要监听的表名`FOREACHROW--
- 记一次错:bind() 和 call() 一起用就懵逼了
写代码的海怪
今天看到一篇博客是讲怎么用bind()的。大家都知道讲bind()嘛,不就是绑定this这个鬼东西嘛,然后在setTimeout里用用就好了。哎,我也是这么想的,直到看到最后一个例子:因为NodeList原型不是Array,所以要用forEach的话,我们可以从Array.prototype里把forEach偷过来用。varunboundForEach=Array.prototype.forEac
- PHP 就业核心技能速查手册
#PHP就业核心技能速查手册>高效聚焦市场所需,快速提升竞争力---##一、语法基础(必会!)```php//1.变量与数据类型$price=19.99;//浮点型$isStock=true;//布尔型//2.流程控制foreach($productsas$id=>$product){if($product['price']>100)continue;echo"产品{$id}:{$product[
- 数组对象查找的常见操作
付出的前端路
1.获得数组对象中子孙的值constarr=[{id:1,sub:[{id:2,sub:[{id:3,sub:null}]}]},{id:4,sub:null}]/**要求:获取所有元素子孙内的id输出[1,2,3,4]*/解决方法functiongetIds(arr){varresult=[]arr.forEach((item)=>{//最外层result.push(item.id)//内层递归
- php 二维数组按照指定的字段作为key
Carver大脸猫
后端笔记【PHP】php开发语言
在PHP中,如果你有一个二维数组,并希望使用其中某个字段的值作为新数组的键(key),可以使用array_column()和array_combine(),或者使用foreach循环来实现。✅示例:使用array_column()和array_combine()假设你有如下二维数组:$data=[['id'=>1,'name'=>'Alice'],['id'=>2,'name'=>'Bob'],[
- 前后端数据交互,关于表单数据传输问题
Trust yourself243
json
表单提交varformData=newFormData();//添加每个事故ID作为单独的参数accidentIds.forEach(id=>formData.append('accidentIds',id));formData.append('status',statusText);$.messager.confirm('确认','确定要将事故记录标记为'+statusText+'吗?',fun
- 扁平化树结构数据
//扁平化当前数据exportfunctionflattenList(nodes,parentPath=[]){constlist=[];nodes.forEach((node,index)=>{constcurrentPath=[...parentPath,index+1];constflatNode={...node};list.push(flatNode);//递归处理子节点并合并结果if(
- 前端面试Javascript手撕题目回顾
在前端面试中,“手撕代码”环节是考察候选人编程能力和思维逻辑的重要部分。以下是一些常见的手撕代码题目及详细解答:1.实现数组扁平化(FlattenArray)将多维数组转换为一维数组。方法一:递归functionflatten(arr){constresult=[];arr.forEach(item=>{if(Array.isArray(item)){result.push(...flatten(
- 前端面试题集锦(5)
目录1、Promsie.all()使用过吗,它是怎么使用的?2、forin和forof循环的区别?3、什么是事件流以及事件流的传播机制?4、token一般存放在哪里?为什么不存放在cookie内?5、数组方法forEach和map的区别?6、ES6中Set和Map的区别?7、0.1+0.2为什么不等于0.3,在项目中遇到要怎么处理?8、什么是模块化思想?9、说说怎么用js写无缝轮播图10、闭包的使
- PHP 协程
SiegeLionQi
PHPphp协程yield
协程,又称微线程,纤程。英文名Coroutine。PHP官方文档的解释:生成器提供了一种更容易的方法来实现简单的对象迭代,相比较定义类实现Iterator接口的方式,性能开销和复杂性大大降低。生成器允许你在foreach代码块中写代码来迭代一组数据而不需要在内存中创建一个数组,那会使你的内存达到上限,或者会占据可观的处理时间。相反,你可以写一个生成器函数,就像一个普通的自定义函数一样,和普通函数只
- 七牛云前端面试题及参考答案 (上)
大模型大数据攻城狮
前端vue组件reactjs前端面经防抖节流fiber
目录基本数据类型有哪些?typeofnull的结果是什么?null和undefined的区别是什么?let关键字的特点有哪些?this指向的规则是什么?箭头函数中this指向哪里?如何实现JavaScript的深拷贝和浅拷贝?数组去重的常见方法(手写代码)数组扁平化(手写,不能使用flat(Infinity))forEach和map方法的区别是什么?闭包的应用场景:实现链式加法add(1)(2)(
- 反向遍历--当你修改一个元素的outerHTML时,该元素会被从 DOM 中移除
专注VB编程开发20年
htmljavascript
varspans=editor.querySelectorAll('span[mytag]');//将NodeList转换为数组//varspansArray=Array.from(spans);varid=0spans.forEach(span=>{span.outerhtml这里无法直接修改吗?}在JavaScript中,outerHTML是一个可写属性,但你需要注意以下几点:1.属性名大小写
- java对集合遍历的四种方式
程序员大腾
JAVAjava开发语言数据结构
目录文章目录目录1.背景2.添加集合3.遍历集合3.1普通循环遍历3.2迭代器遍历3.3增强for遍历(foreach)3.4list.forEach4.总结1.背景目前大四学生,找了一个实习工作。在学习工作当中遇到有些问题就记录下来吧。这篇文章记录了一下对集合遍历操作的基本方式。2.添加集合Listlist=newArrayListitr=list.iterator();while(itr.ha
- HarmonyOS应用开发:SideBarContainer(容器组件)
「已注销」
鸿蒙harmonyos华为list鸿蒙android
提供侧边栏可以显示和隐藏的侧边栏容器,通过子组件定义侧边栏和内容区,第一个子组件表示侧边栏,第二个子组件表示内容区。说明:该组件从APIVersion8开始支持。子组件可以包含子组件。说明:子组件类型:系统组件和自定义组件,不支持渲染控制类型(if/else、ForEach和LazyForEach)。子组件个数:必须且仅包含2个子组件。子组件个数异常时:3个或以上子组件,显示第一个和第二个。1个子
- js加减乘除出现很多小数
木头没有瓜
javascript开发语言ecmascript
计算购物车支付价格价格if(that.cartList.length){that.cartList.forEach(v=>{v.sku.price=(v.sku.price/100).toFixed(2);v.sku.price=v.sku.price.toLocaleString();}lettotalPrice=0;list.forEach(item=>{totalPrice+=item.sk
- 24个 JavaScript 循环遍历方法
xixi_666
javascript开发语言ecmascript
一、数组遍历方法1、forEach()forEach方法用于调用数组的每个元素,并将元素传递给回调函数。数组中的每个值都会调用回调函数。其语法如下:array.forEach(function(currentValue,index,arr),thisValue)该方法的第一个参数为回调函数,是必传的,它有三个参数:currentValue:必需。当前元素index:可选。当前元素的索引值。arr:
- 【C#】两个list根据某个元素比较差集
weixin_30594001
c#
1.今天突然跟前端有一点小小的分歧,传输数据和数据库里的数据做比对,该前端做处理还是后端,(并不是都不愿意做,相反,都愿意在自己那端处理==)2.最后终于归结我这了,好久之前做过list比对,记得刚写代码的时候,两个list比对?那就无限foreach呗,当然实现是能实现,这就很影响比对效果和代码的整洁度了。3.接下来,我回忆起来了我之前写过的一个比较方法,拿出来记录一下//重写比较方法publi
- 一文搞懂JS中数组与对象的几种循环方式
前端没钱
前端基础与进阶javascript开发语言ecmascript
文章目录一、引言二、数组的循环方式2.1for循环:最经典的遍历手段2.2forEach循环:简洁的数组迭代器2.3map循环:强大的数组映射工具2.4forof循环:ES6的迭代新宠2.5filter循环:精准的数据筛选器2.6every循环:全量条件判断专家2.7some循环:存在性条件探测器2.8find循环:快速查找首个满足项三、对象的循环方式3.1forin循环:遍历对象的基础工具3.2
- 安装数据库首次应用
Array_06
javaoraclesql
可是为什么再一次失败之后就变成直接跳过那个要求
enter full pathname of java.exe的界面
这个java.exe是你的Oracle 11g安装目录中例如:【F:\app\chen\product\11.2.0\dbhome_1\jdk\jre\bin】下的java.exe 。不是你的电脑安装的java jdk下的java.exe!
注意第一次,使用SQL D
- Weblogic Server Console密码修改和遗忘解决方法
bijian1013
Welogic
在工作中一同事将Weblogic的console的密码忘记了,通过网上查询资料解决,实践整理了一下。
一.修改Console密码
打开weblogic控制台,安全领域 --> myrealm -->&n
- IllegalStateException: Cannot forward a response that is already committed
Cwind
javaServlets
对于初学者来说,一个常见的误解是:当调用 forward() 或者 sendRedirect() 时控制流将会自动跳出原函数。标题所示错误通常是基于此误解而引起的。 示例代码:
protected void doPost() {
if (someCondition) {
sendRedirect();
}
forward(); // Thi
- 基于流的装饰设计模式
木zi_鸣
设计模式
当想要对已有类的对象进行功能增强时,可以定义一个类,将已有对象传入,基于已有的功能,并提供加强功能。
自定义的类成为装饰类
模仿BufferedReader,对Reader进行包装,体现装饰设计模式
装饰类通常会通过构造方法接受被装饰的对象,并基于被装饰的对象功能,提供更强的功能。
装饰模式比继承灵活,避免继承臃肿,降低了类与类之间的关系
装饰类因为增强已有对象,具备的功能该
- Linux中的uniq命令
被触发
linux
Linux命令uniq的作用是过滤重复部分显示文件内容,这个命令读取输入文件,并比较相邻的行。在正常情 况下,第二个及以后更多个重复行将被删去,行比较是根据所用字符集的排序序列进行的。该命令加工后的结果写到输出文件中。输入文件和输出文件必须不同。如 果输入文件用“- ”表示,则从标准输入读取。
AD:
uniq [选项] 文件
说明:这个命令读取输入文件,并比较相邻的行。在正常情况下,第二个
- 正则表达式Pattern
肆无忌惮_
Pattern
正则表达式是符合一定规则的表达式,用来专门操作字符串,对字符创进行匹配,切割,替换,获取。
例如,我们需要对QQ号码格式进行检验
规则是长度6~12位 不能0开头 只能是数字,我们可以一位一位进行比较,利用parseLong进行判断,或者是用正则表达式来匹配[1-9][0-9]{4,14} 或者 [1-9]\d{4,14}
&nbs
- Oracle高级查询之OVER (PARTITION BY ..)
知了ing
oraclesql
一、rank()/dense_rank() over(partition by ...order by ...)
现在客户有这样一个需求,查询每个部门工资最高的雇员的信息,相信有一定oracle应用知识的同学都能写出下面的SQL语句:
select e.ename, e.job, e.sal, e.deptno
from scott.emp e,
(se
- Python调试
矮蛋蛋
pythonpdb
原文地址:
http://blog.csdn.net/xuyuefei1988/article/details/19399137
1、下面网上收罗的资料初学者应该够用了,但对比IBM的Python 代码调试技巧:
IBM:包括 pdb 模块、利用 PyDev 和 Eclipse 集成进行调试、PyCharm 以及 Debug 日志进行调试:
http://www.ibm.com/d
- webservice传递自定义对象时函数为空,以及boolean不对应的问题
alleni123
webservice
今天在客户端调用方法
NodeStatus status=iservice.getNodeStatus().
结果NodeStatus的属性都是null。
进行debug之后,发现服务器端返回的确实是有值的对象。
后来发现原来是因为在客户端,NodeStatus的setter全部被我删除了。
本来是因为逻辑上不需要在客户端使用setter, 结果改了之后竟然不能获取带属性值的
- java如何干掉指针,又如何巧妙的通过引用来操作指针————>说的就是java指针
百合不是茶
C语言的强大在于可以直接操作指针的地址,通过改变指针的地址指向来达到更改地址的目的,又是由于c语言的指针过于强大,初学者很难掌握, java的出现解决了c,c++中指针的问题 java将指针封装在底层,开发人员是不能够去操作指针的地址,但是可以通过引用来间接的操作:
定义一个指针p来指向a的地址(&是地址符号):
- Eclipse打不开,提示“An error has occurred.See the log file ***/.log”
bijian1013
eclipse
打开eclipse工作目录的\.metadata\.log文件,发现如下错误:
!ENTRY org.eclipse.osgi 4 0 2012-09-10 09:28:57.139
!MESSAGE Application error
!STACK 1
java.lang.NoClassDefFoundError: org/eclipse/core/resources/IContai
- spring aop实例annotation方法实现
bijian1013
javaspringAOPannotation
在spring aop实例中我们通过配置xml文件来实现AOP,这里学习使用annotation来实现,使用annotation其实就是指明具体的aspect,pointcut和advice。1.申明一个切面(用一个类来实现)在这个切面里,包括了advice和pointcut
AdviceMethods.jav
- [Velocity一]Velocity语法基础入门
bit1129
velocity
用户和开发人员参考文档
http://velocity.apache.org/engine/releases/velocity-1.7/developer-guide.html
注释
1.行级注释##
2.多行注释#* *#
变量定义
使用$开头的字符串是变量定义,例如$var1, $var2,
赋值
使用#set为变量赋值,例
- 【Kafka十一】关于Kafka的副本管理
bit1129
kafka
1. 关于request.required.acks
request.required.acks控制者Producer写请求的什么时候可以确认写成功,默认是0,
0表示即不进行确认即返回。
1表示Leader写成功即返回,此时还没有进行写数据同步到其它Follower Partition中
-1表示根据指定的最少Partition确认后才返回,这个在
Th
- lua统计nginx内部变量数据
ronin47
lua nginx 统计
server {
listen 80;
server_name photo.domain.com;
location /{set $str $uri;
content_by_lua '
local url = ngx.var.uri
local res = ngx.location.capture(
- java-11.二叉树中节点的最大距离
bylijinnan
java
import java.util.ArrayList;
import java.util.List;
public class MaxLenInBinTree {
/*
a. 1
/ \
2 3
/ \ / \
4 5 6 7
max=4 pass "root"
- Netty源码学习-ReadTimeoutHandler
bylijinnan
javanetty
ReadTimeoutHandler的实现思路:
开启一个定时任务,如果在指定时间内没有接收到消息,则抛出ReadTimeoutException
这个异常的捕获,在开发中,交给跟在ReadTimeoutHandler后面的ChannelHandler,例如
private final ChannelHandler timeoutHandler =
new ReadTim
- jquery验证上传文件样式及大小(好用)
cngolon
文件上传jquery验证
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="jquery1.8/jquery-1.8.0.
- 浏览器兼容【转】
cuishikuan
css浏览器IE
浏览器兼容问题一:不同浏览器的标签默认的外补丁和内补丁不同
问题症状:随便写几个标签,不加样式控制的情况下,各自的margin 和padding差异较大。
碰到频率:100%
解决方案:CSS里 *{margin:0;padding:0;}
备注:这个是最常见的也是最易解决的一个浏览器兼容性问题,几乎所有的CSS文件开头都会用通配符*来设
- Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
daizj
shell$#$?特殊变量
前面已经讲到,变量名只能包含数字、字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量。例如,$ 表示当前Shell进程的ID,即pid,看下面的代码:
$echo $$
运行结果
29949
特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个
- 程序设计KISS 原则-------KEEP IT SIMPLE, STUPID!
dcj3sjt126com
unix
翻到一本书,讲到编程一般原则是kiss:Keep It Simple, Stupid.对这个原则深有体会,其实不仅编程如此,而且系统架构也是如此。
KEEP IT SIMPLE, STUPID! 编写只做一件事情,并且要做好的程序;编写可以在一起工作的程序,编写处理文本流的程序,因为这是通用的接口。这就是UNIX哲学.所有的哲学真 正的浓缩为一个铁一样的定律,高明的工程师的神圣的“KISS 原
- android Activity间List传值
dcj3sjt126com
Activity
第一个Activity:
import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import a
- tomcat 设置java虚拟机内存
eksliang
tomcat 内存设置
转载请出自出处:http://eksliang.iteye.com/blog/2117772
http://eksliang.iteye.com/
常见的内存溢出有以下两种:
java.lang.OutOfMemoryError: PermGen space
java.lang.OutOfMemoryError: Java heap space
------------
- Android 数据库事务处理
gqdy365
android
使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTransaction()之前调用了setTransactionSuccessful() 方法设置事务的标志为成功则提交事务,如果没有调用setTransactionSuccessful() 方法则回滚事务。事
- Java 打开浏览器
hw1287789687
打开网址open浏览器open browser打开url打开浏览器
使用java 语言如何打开浏览器呢?
我们先研究下在cmd窗口中,如何打开网址
使用IE 打开
D:\software\bin>cmd /c start iexplore http://hw1287789687.iteye.com/blog/2153709
使用火狐打开
D:\software\bin>cmd /c start firefox http://hw1287789
- ReplaceGoogleCDN:将 Google CDN 替换为国内的 Chrome 插件
justjavac
chromeGooglegoogle apichrome插件
Chrome Web Store 安装地址: https://chrome.google.com/webstore/detail/replace-google-cdn/kpampjmfiopfpkkepbllemkibefkiice
由于众所周知的原因,只需替换一个域名就可以继续使用Google提供的前端公共库了。 同样,通过script标记引用这些资源,让网站访问速度瞬间提速吧
- 进程VS.线程
m635674608
线程
资料来源:
http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001397567993007df355a3394da48f0bf14960f0c78753f000 1、Apache最早就是采用多进程模式 2、IIS服务器默认采用多线程模式 3、多进程优缺点 优点:
多进程模式最大
- Linux下安装MemCached
字符串
memcached
前提准备:1. MemCached目前最新版本为:1.4.22,可以从官网下载到。2. MemCached依赖libevent,因此在安装MemCached之前需要先安装libevent。2.1 运行下面命令,查看系统是否已安装libevent。[root@SecurityCheck ~]# rpm -qa|grep libevent libevent-headers-1.4.13-4.el6.n
- java设计模式之--jdk动态代理(实现aop编程)
Supanccy2013
javaDAO设计模式AOP
与静态代理类对照的是动态代理类,动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员手工编写它的源代码。动态代理类不仅简化了编程工作,而且提高了软件系统的可扩展性,因为Java 反射机制可以生成任意类型的动态代理类。java.lang.reflect 包中的Proxy类和InvocationHandler 接口提供了生成动态代理类的能力。
&
- Spring 4.2新特性-对java8默认方法(default method)定义Bean的支持
wiselyman
spring 4
2.1 默认方法(default method)
java8引入了一个default medthod;
用来扩展已有的接口,在对已有接口的使用不产生任何影响的情况下,添加扩展
使用default关键字
Spring 4.2支持加载在默认方法里声明的bean
2.2
将要被声明成bean的类
public class DemoService {