黄a在线观看-黄a在线-黄a大片-黄色片在线看-黄色毛片免费-黄色大片网站

您的位置:首頁技術文章
文章詳情頁

SpringBoot SpEL語法掃盲與查詢手冊的實現

瀏覽:5日期:2023-05-16 14:46:27

Spring 表達式語言簡稱為 SpEL,一種類似 Ognl 的對象圖導航語言(對于 ognl 不熟悉的同學可以參考一下: Ognl 系列博文)

SeEL 為 Spring 提供了豐富的想象空間,除了一些基本的表達式操作之外,還支持

訪問 bean 對象 調用方法,訪問(修改)類(對象)屬性 計算表達式 正則匹配 ...

I. 語法百科

以下內容均來自官方文檔: https://docs.spring.io/spring-framework/docs/5.2.1.RELEASE/spring-framework-reference/core.html#expressions

1. 字面表達式

Spel 支持strings, numeric values (int, real, hex), boolean, and null等基本類型,實例如下

ExpressionParser parser = new SpelExpressionParser();// evals to 'Hello World'String helloWorld = (String) parser.parseExpression('’Hello World’').getValue();// double 類型double avogadrosNumber = (Double) parser.parseExpression('6.0221415E+23').getValue();// evals to 2147483647int maxValue = (Integer) parser.parseExpression('0x7FFFFFFF').getValue();boolean trueValue = (Boolean) parser.parseExpression('true').getValue();Object nullValue = parser.parseExpression('null').getValue();

請注意,字符串需要用單引號包括,浮點數默認為 double 類型,用null表示null object

輸出結果

str: Hello Worlddouble: 6.0221415E23int: 2147483647bool: truenull: null

2. Inline List

通過{}來表明 List 表達式,一個空的列表直接用{}表示

ExpressionParser parser = new SpelExpressionParser();// Integer列表List numbers = (List) parser.parseExpression('{1,2,3,4}').getValue();System.out.println('list: ' + numbers);// List的元素為ListList<List> listlOfLists = (List) parser.parseExpression('{{’a’,’b’},{’x’,’y’}}').getValue();System.out.println('List<List> : ' + listlOfLists);

輸出結果

list: [1, 2, 3, 4]List<List> : [[a, b], [x, y]]

3. Inline map

{key:value}來表示 map 表達式,空 Map 直接用{:}表示

private void map() { ExpressionParser parser = new SpelExpressionParser(); Map map = (Map) parser.parseExpression('{txt:’Nikola’,dob:’10-July-1856’}').getValue(); System.out.println('map: ' + map); Map mapOfMaps = (Map) parser.parseExpression('{txt:{first:’Nikola’,last:’Tesla’},dob:{day:10,month:’July’,year:1856}}') .getValue(); System.out.println('Map<Map>: ' + mapOfMaps);}

輸出結果

map: {txt=Nikola, dob=10-July-1856}Map<Map>: {txt={first=Nikola, last=Tesla}, dob={day=10, month=July, year=1856}}

4. 數組

數組可以借助new構造方法來實現,通過下標ary[index]的方式訪問數組中的元素

private void array() { ExpressionParser parser = new SpelExpressionParser(); int[] numbers1 = (int[]) parser.parseExpression('new int[4]').getValue(); System.out.println('array: ' + JSON.toJSONString(numbers1)); // Array with initializer int[] numbers2 = (int[]) parser.parseExpression('new int[]{1,2,3}').getValue(); System.out.println('array: ' + JSON.toJSONString(numbers2)); // Multi dimensional array int[][] numbers3 = (int[][]) parser.parseExpression('new int[4][5]').getValue(); System.out.println('array: ' + JSON.toJSONString(numbers3)); int[] nums = new int[]{1, 3, 5}; EvaluationContext context = new StandardEvaluationContext(); context.setVariable('num', nums); // 通過下標訪問數組中的元素 Integer numVal = parser.parseExpression('#num[1]').getValue(context, Integer.class); System.out.println('numVal in array: ' + numVal);}

輸出如下

array: [0,0,0,0]array: [1,2,3]array: [[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]]numVal in array: 3

5. 表達式

Spel 支持一些 Java 語法中常規的比較判斷,算數運算,三元表達式,類型判斷,matches正則匹配等基表表達式

下面給出一些簡單的實例

public void expression() { ExpressionParser parser = new SpelExpressionParser(); // 運算 System.out.println('1+2= ' + parser.parseExpression('1+2').getValue()); // 比較 System.out.println('1<2= ' + parser.parseExpression('1<2').getValue()); System.out.println('true ? hello : false > ' + parser.parseExpression('3 > 2 ? ’hello’: ’false’ ').getValue()); // instanceof 判斷,請注意靜態類,用T進行包裝 System.out.println('instance : ' + parser.parseExpression('’a’ instanceof T(String)').getValue()); //正則表達式 System.out.println('22 是否為兩位數字 :' + parser.parseExpression('22 matches ’d{2}’').getValue());}

輸出結果

1+2= 31<2= truetrue ? hello : false > helloinstance : true22 是否為兩位數字 :true

6. Type 與靜態類

如果想獲取 Class 對象,或者訪問靜態成員/方法,可以借助T()語法來實現

比如我們有一個靜態類

public static class StaClz { public static String txt = '靜態屬性'; public static String hello(String tag) { return txt + ' : ' + tag; }}

如果希望訪問靜態屬性txt, 表達式可以寫成T(com.git.hui.boot.spel.demo.BasicSpelDemo.StaClz).txt,請注意圓括號中的是完整簽名;訪問靜態方法方式類似

public void type() { // class,靜態類 ExpressionParser parser = new SpelExpressionParser(); String name = parser.parseExpression('T(com.git.hui.boot.spel.demo.BasicSpelDemo.StaClz).txt').getValue(String.class); System.out.println('txt: ' + name); String methodReturn = parser.parseExpression('T(com.git.hui.boot.spel.demo.BasicSpelDemo.StaClz).hello' + '(’一灰灰blog’)') .getValue(String.class); System.out.println('static method return: ' + methodReturn); // class類獲取 Class stringClass = parser.parseExpression('T(String)').getValue(Class.class); System.out.println('class: ' + stringClass.getName());}

輸出結果如下

txt: 靜態屬性static method return: 靜態屬性 : 一灰灰blogclass: java.lang.String

上面的寫法,請重點看一下T(String),這里的 String 沒有用完整的包路徑,即直接位于java.lang包下的類,是可以省略掉完整包名的,就像我們平時寫代碼時,也不需要顯示的加一個import java.lang.*

7. 構造方法

上面介紹 array 的時候,就介紹了使用new來創建數組對象,當然也可以直接構造其他的普通對象, 如我們新建一個測試類

public static class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } @Override public String toString() { return 'Person{' + 'txt=’' + name + ’’’ + ', age=' + age + ’}’; }}

通過 SpEl 創建一個對象的實例

public void construct() { ExpressionParser parser = new SpelExpressionParser(); Person person = parser.parseExpression('new com.git.hui.boot.spel.demo.BasicSpelDemo.Person(’一灰灰’, 20)') .getValue(Person.class); System.out.println('person: ' + person);}

輸出結果如下:

person: Person{txt=’一灰灰’, age=20}

請注意,構造方法中類的完整簽名

8. 變量引用

細心的小伙伴,在上面介紹數組的成員演示的實例中,寫法如'#num[1]',這個 num 前面有一個#,這是一個語法定義,有#修飾的表示變量訪問

要理解這一小節,首先得理解EvaluationContext, 在我們的 SpEL 表達式的解析中,getValue有一個參數就是這個 Context,你可以將他簡單理解為包含一些對象的上下文,我們可以通過 SpEL 的語法,來訪問操作 Context 中的某些成員、成員方法屬性等

一般的操作過程如下:

context.setVariable('person', person); 向EvaluationContext中塞入成員變量 parser.parseExpression(xxx).getValue(context) 解析 SpEL 表達式,context 必須作為傳參丟進去哦

一個簡單的實例

public void variable() { ExpressionParser parser = new SpelExpressionParser(); Person person = new Person('一灰灰blog', 18); EvaluationContext context = new StandardEvaluationContext(); context.setVariable('person', person); String name = parser.parseExpression('#person.getName()').getValue(context, String.class); System.out.println('variable name: ' + name); Integer age = parser.parseExpression('#person.age').getValue(context, Integer.class); System.out.println('variable age: ' + age);}

輸出結果如下

variable name: 一灰灰blogvariable age: 18

友情提示,如果訪問對象的私有 Field/method,會拋異常

9. 函數

Context 中的變量,除了是我們常見的基本類型,普通的對象之外,還可以是方法,在setVariable時,設置的成員類型為method即可

public void function() { try { ExpressionParser parser = new SpelExpressionParser(); EvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build(); // 注冊一個方法變量,參數為method類型 context.setVariable('hello', StaClz.class.getDeclaredMethod('hello', String.class)); String ans = parser.parseExpression('#hello(’一灰灰’)').getValue(context, String.class); System.out.println('function call: ' + ans); } catch (Exception e) { e.printStackTrace(); }}

輸出結果如下

function call: 靜態屬性 : 一灰灰

10. bean 訪問

在 Spring 中,什么對象最常見?當然是 bean, 那么我們可以直接通過 SpEL 訪問 bean 的屬性、調用方法么?

要訪問 bean 對象,所以我們的EvaluationContext中需要包含 bean 對象才行

借助BeanResolver來實現,如context.setBeanResolver(new BeanFactoryResolver(applicationContext));其次訪問 bean 的前綴修飾為@符號為了演示這種場景,首先創建一個普通的 Bean 對象

@Data@Componentpublic class BeanDemo { private String blog = 'https://spring.hhui.top'; private Integer num = 8; public String hello(String name) { return 'hello ' + name + ', welcome to my blog ' + blog + ', now person: ' + num; }}

接著我們需要獲取ApplicationContext,所以可以稍微改一下我們的測試類,讓它繼承自ApplicationContextAware

private ApplicationContext applicationContext;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext;}public void bean() { ExpressionParser parser = new SpelExpressionParser(); StandardEvaluationContext context = new StandardEvaluationContext(); context.setBeanResolver(new BeanFactoryResolver(applicationContext)); // 獲取bean對象 BeanDemo beanDemo = parser.parseExpression('@beanDemo').getValue(context, BeanDemo.class); System.out.println('bean: ' + beanDemo); // 訪問bean方法 String ans = parser.parseExpression('@beanDemo.hello(’一灰灰blog’)').getValue(context, String.class); System.out.println('bean method return: ' + ans);}

上面的寫法和之前的并沒有太大的區別,實際輸出結果如下

bean: BeanDemo(blog=https://spring.hhui.top, num=8)bean method return: hello 一灰灰blog, welcome to my blog https://spring.hhui.top, now person: 8

11. ifElse

SpEL 支持三元表達式,在上述的表達式中也給出了實例

public void ifThenElse() { // 三元表達式,? : ExpressionParser parser = new SpelExpressionParser(); String ans = parser.parseExpression('true ? ’正確’: ’錯誤’').getValue(String.class); System.out.println('ifTheElse: ' + ans);}

輸出結果如下

ifTheElse: 正確

12. elvis

xx != null ? xx : yy => xx?:yy

這個也屬于我們經常遇到的一種場景,如果 xx 為 null,則返回 yy;否則直接返回 xx;簡化寫法為 elvis 寫法: xx?:yy

public void elvis() { // xx != null ? xx : yy => xx?:yy ExpressionParser parser = new SpelExpressionParser(); EvaluationContext context = new StandardEvaluationContext(); context.setVariable('name', null); String name = parser.parseExpression('#name?:’Unknown’').getValue(context, String.class); System.out.println('elvis-before ' + name); context.setVariable('name', 'Exists!'); name = parser.parseExpression('#name?:’Unknown’').getValue(context, String.class); System.out.println('elvis-after ' + name);}

輸出結果如下

elvis-before Unknownelvis-after Exists!

13. 安全表達式

在 java 中,最常見最討厭的是一個就是 NPE 的問題,SpEL 中當然也可能出現這種情況,但是若在 SpEL 中進行非空判斷,那就很不優雅了,SpEL 提供了xx?.yy的寫法來避免 npe,即

xx == null ? null : xx.yy => xx?.yy

舉例說明

public void safeOperate() { // 防npe寫法, xx == null ? null : xx.yy => xx?.yy ExpressionParser parser = new SpelExpressionParser(); Person person = new Person(null, 18); String name = parser.parseExpression('name?.length()').getValue(person, String.class); System.out.println('safeOperate-before: ' + name); person.name = '一灰灰blog'; name = parser.parseExpression('name?.length()').getValue(person, String.class); System.out.println('safeOperate-after: ' + name);}

輸出結果如下

safeOperate-before: nullsafeOperate-after: 7

14. 容器截取

遍歷容器,獲取子集,相當于 jdk8 Stream 中 filter 用法,語法格式如下

xx.?[expression], 請注意中括弧中的表達式必須返回 boolean

舉例說明

public void collectionSelection() { // 容器截取,返回滿足條件的子集 // xx.?[expression] , 將滿足expression的子元素保留,返回一個新的集合,類似容器的 filter List<Integer> list = new ArrayList<>(Arrays.asList(1, 3, 4, 6, 7, 8, 9)); ExpressionParser parser = new SpelExpressionParser(); EvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build(); context.setVariable('list', list); // 用 #this 來指代列表中的迭代元素 List<Integer> subList = (List<Integer>) parser.parseExpression('#list.?[#this>5]').getValue(context); System.out.println('subList: ' + subList); Map<String, Integer> map = new HashMap<>(); map.put('a', 1); map.put('b', 10); map.put('c', 4); map.put('d', 7); context.setVariable('map', map); // 表達式內部用key, value 來指代map的k,v Map subMap = parser.parseExpression('#map.?[value < 5]').getValue(context, Map.class); System.out.println('subMap: ' + subMap); subMap = parser.parseExpression('#map.?[key == ’a’]').getValue(context, Map.class); System.out.println('subMap: ' + subMap);}

輸出結果如下

subList: [6, 7, 8, 9]subMap: {a=1, c=4}subMap: {a=1}

注意

在列表表達式中,可以通過#this來指代列表中的每一個元素 在 map 表達式中,通過key, value來分別指代 map 中的k,v

15. 容器映射

將一個集合通過某種規則,映射為另一種集合,相當于 jdk8 Stream 中的 map 用法,語法如下

xx.![expression], 將表達式計算的結果作為輸出容器中的成員

舉例如下

public void collectionProjection() { // 容器操作之后,生成另一個容器, 類似lambda中的map方法 // xx.![expression] List<Integer> list = new ArrayList<>(Arrays.asList(1, 3, 4, 6, 7, 8, 9)); ExpressionParser parser = new SpelExpressionParser(); EvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build(); context.setVariable('list', list); // 用 #this 來指代列表中的迭代元素 List newList = parser.parseExpression('#list.![#this * 2]').getValue(context, List.class); System.out.println('newList: ' + newList); Map<String, Integer> map = new HashMap<>(); map.put('a', 1); map.put('b', 10); map.put('c', 4); map.put('d', 7); context.setVariable('map', map); List newListByMap = parser.parseExpression('#map.![value * 2]').getValue(context, List.class); System.out.println('newListByMap: ' + newListByMap);}

輸出結果如下:

newList: [2, 6, 8, 12, 14, 16, 18]newListByMap: [2, 20, 8, 14]

16. 表達式模板

SpEL 還提供了一種自定義表達式模板的方式,將字面量和表達式放在一起使用,比如下面這一條語句

'random number is #{T(java.lang.Math).random()}'

其中#{T(java.lang.Math).random()}是一個 SpEL 表達式,左邊的是普通字符串,這種寫法也常見于@Value注解中的屬性寫法,當然直接通過上面的寫法執行這個語句會報錯,這個時候需要指定ParserContext

舉例說明

public void template() { // 模板,混合字面文本與表達式,使用 #{} 將表達式包裹起來 ExpressionParser parser = new SpelExpressionParser(); String randomPhrase = parser.parseExpression('random number is #{T(java.lang.Math).random()}', ParserContext.TEMPLATE_EXPRESSION).getValue(String.class); System.out.println('template: ' + randomPhrase);}

輸出結果如下

template: random number is 0.10438946298113871

17. 小結

SpEL 屬于非常強大的表達式語言了,就我個人的感覺而言,它和 OGNL 有些像,當它們的上下文中包含了 Spring 的上下文時,可以訪問任何的 bean,而你可以借助它們的語法規范,做各種事情

推薦我之前的一個項目,https://github.com/liuyueyi/quick-fix,利用 ognl 結合ApplicationContext,可以隨心所欲的訪問控制應用中的任何 bean 對象

II. 其他

0. 項目

工程:https://github.com/liuyueyi/spring-boot-demo

源碼:https://github.com/liuyueyi/spring-boot-demo/spring-boot/013-spel

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
主站蜘蛛池模板: 成人精品毛片国产亚洲av十九禁 | 大胸美女被吃奶爽死视频 | 粉嫩少妇内射浓精videos | 亚洲天堂网站 | 自拍 高清 日韩 欧美 另类 | 青青操91 | 亚洲国产欧美不卡在线观看 | 午夜时刻免费入口 | 自拍偷拍99 | 国产男女在线观看 | av淘宝国产在线观看 | 成年女人男人免费视频播放 | 自拍偷拍亚洲综合 | 久久久久久久久久久久久久久久久久 | 日本少妇毛耸耸毛多水多 | 亚洲一二三四视频 | 国产精品剧情对白无套在线观看 | 日韩一区二区精品葵司在线 | 精品国产乱码91久久久久久网站 | 国产精品久久人妻无码网站一区 | 狠狠色噜噜狠狠狠狠2021天天 | 国产三级久久久久 | 日韩精品免费在线观看 | 亚洲国产精品999 | 男女拍拍拍网站 | 天天摸天天碰 | 亚洲天堂一区在线观看 | 亚洲国产成人久久一区二区三区 | 又色又爽又黄无遮挡的免费视频 | 99爱精品 | 粉嫩av一区二区三区免费观看喜好 | 一区国产在线 | 黄色免费网站观看 | 午夜福利无码不卡在线观看 | 久久久99久久久国产自输拍 | 岬奈奈美女教师中文字幕 | 国产精品亚 | 99精品免费久久久久久久久日本 | 污污视频免费网站 | 日本内射精品一区二区视频 | 亚洲精品乱码久久久久久蜜桃不卡 | 成人国产精品一区二区 | 极品人妻videosss人妻 | 国产专业剧情av在线 | 邻居少妇张开腿让我爽视频 | 日产成品片a直接观看入 | 免费成人在线播放 | 国产高清不卡免费视频 | www.夜夜操.com| a级片在线看 | 久久久久久久久久久丰满 | 天堂√在线中文资源网 | 国产特级乱淫免费看 | mm1313亚洲精品 | 999热精品视频 | 国产精品国产三级国产播12软件 | 美女xx网站| 理论片午午伦夜理片影院99 | 久久亚洲高潮流白浆av软件 | 亚洲日韩国产二区无码 | 六月婷婷七月丁香 | 67194熟妇在线直接进入 | 精品一区二区三区不卡 | 久草a视频 | 日日噜噜噜噜久久久精品毛片 | 久草福利资源 | 国产福利在线视频 | 日本特黄一级片 | 原神污文全文肉高h | 亚洲电影在线观看 | 伊人情人色综合网站 | 精品一区二区不卡无码av | 久热国产视频 | 国产亚洲福利 | www.超碰在线.com | 国产精成人 | 五月婷婷在线视频 | 人妻无码一区二区三区四区 | 欧美成人三级视频 | 中文字幕在线观看第二页 | 黄色网址在线视频 | 国产美女久久精品香蕉69 | 日b影院| 久久久久人妻精品一区二区三区 | 91美女诱惑| 久久亚洲sm情趣捆绑调教 | 在线aⅴ亚洲中文字幕 | 我要看一级黄色 | 99视频在线| 欧美交受高潮1 | 操出白浆视频 | 性一交一乱一色一视频 | 国产对白乱刺激福利视频 | 青青草97国产精品麻豆 | 国产精品18久久久久久久久 | 欧美精品日韩少妇 | 国产成人精品一区二区三区无码 | 免费高清av | 丰满放荡岳乱妇91ww | 自拍偷拍激情视频 | 片毛片| 97久久超碰中文字幕 | 品久久久久久久久久96高清 | 中文中幕a在线 | 欧洲国产伦久久久久久久 | 色999av| 浪潮av一区二区三区 | 狠狠躁天天躁中文字幕 | 欧美精品久久天天躁 | 女人毛片av| 少妇特殊按摩高潮惨叫无码 | 中文字幕在线播放视频 | 欧美精品一区二区久久婷婷 | 福利视频一区 | 欧美亚洲第一页 | 亚洲色中文字幕在线播放 | 污网站免费在线观看 | 爱情岛论坛线路一区二区 | 99热影院| 伊人色综合久久天天五月婷 | 韩国精品一区二区 | 超碰成人97 | 亚洲精品v日韩精品 | 人人爽人人爽人人片av | zzz444成人天堂7777 | 一级做a爰片欧美激情床 | 国产精品视频二区不卡 | 国产成人无码a在线观看不卡 | 欧美日本在线播放 | 午夜av无码福利免费看网站 | 精品久久久网站 | 国产综合久久久久 | 91偷拍富婆spa盗摄在线 | 男女一进一出超猛烈的视频不遮挡在线观看 | 操碰91| 国产黄色免费在线观看 | 国产区在线看 | 新呦u视频一区二区 | 97一级片| 天天躁夜夜躁狠狠眼泪 | 亚洲人成伊人成综合网小说 | 国产三级精品三级在线 | 中文字幕丝袜一区二区 | 一本色道久久88综合日韩精品 | 老司机午夜福利视频 | 久久成熟| 色porny真实丨海角社区 | 一区二区三区回区在观看免费视频 | 超碰免费人人 | 91亚洲精华国产精华 | 国产情侣偷国语对白 | 国产精品国产三级国产在线观什 | 欧美午夜在线 | 黄色小视频免费看 | 岛国av在线不卡 | 国产精品日韩一区 | 天天狠狠色综合图片区 | 久久久久久久久久免费 | 88av在线播放 | 国产嘿咻 | 久久国产精品99精品国产 | 亚洲欧美综合一区 | 91福利在线观看视频 | 最新亚洲春色av无码专区 | 久久精品亚洲精品国产欧美kt∨ | 狠狠色婷婷久久一区二区三区 | 美女18禁一区二区三区视频 | 国产一级淫片a免费播放口欧美 | 日韩久久网| 色悠悠国产 | 国产精品卡一卡二卡三 | 九九日韩 | 国产人妻一区二区三区四区五区六 | 性生交片免费无码看人 | 国产裸体按摩视频 | 女同互慰高潮呻吟免费播放 | 91系列在线观看 | 中文字幕有码在线播放 | 国产aⅴ精品一区二区三区久久 | 天天躁日日躁狠狠躁免费麻豆 | h色在线观看 | 亚洲女人av久久天堂 | 首页 国产 欧美 日韩 丝袜 | 久久国产剧情 | 张柏芝54张无删码艳照在线播放 | 亚洲经典三级 | 免费三级黄色 | 国产精品99蜜臀久久不卡二区 | 麻豆传媒网站在线观看 | 亚洲天堂精品在线观看 | 亚洲精品乱码久久久久红杏 | 成人久久大片91含羞草 | 成人免费毛片明星色大师 | 98国产精品综合一区二区三区 | 91精品国产色综合久久不卡蜜臀 | 人人人妻人人人妻人人人 | 色呦呦免费视频 | 久久亚洲国产成人精品无码区 | 欧美内射rape视频 | 色婷婷在线播放 | 中文字幕天堂在线 | 福利一区二区三区视频在线观看 | 日本熟hd | 乱淫a欧美裸体超级xxxⅹ | 日本亚洲综合 | 日韩欧美一卡二卡 | 国产日韩欧美不卡 | 色播在线| 免费无码国产v片在线观看 任我撸在线视频 | 精品国产制服丝袜高跟 | 亚洲成av人片一区二区密柚 | 校园春色综合版 | 一性一交一摸一黄按摩精油视频 | 中文字幕在线人 | 国产多p混交群体交乱 | 18禁止看的免费污网站 | 国产成人小视频 | 成人国产精品蜜柚视频 | 欧美精品一区二区性色 | 国产亚洲精品久久久久婷婷瑜伽 | 日本成人一区二区 | 欧美视频在线一区二区三区 | 国产成人精品综合久久久久 | 欧美日韩精品区 | jiuse九色| 日韩在线精品 | 精品少妇一区二区三区四区五区 | 成熟女人毛片www免费版在线 | 午夜肉伦伦影院九七影网 | 天天摸日日摸狠狠添 | 九九视频这里只有精品 | 久草在线播放视频 | av国産精品毛片一区二区三区 | 色一欲一性一乱—区二区三区 | 成人重囗味sm | 人人干人人搞 | 国产精品久久久影视青草 | 伊人色av | 亚洲国产丝袜在线观看 | 日本一区二区三区视频免费看 | 亚洲美女一区 | 国产69堂免费视频 | 久久视频热 | 国产伦精品一区二区三区网站 | 四虎在线免费观看视频 | www.久久久久久久久 | a∨色狠狠一区二区三区 | 日韩色在线 | 亚洲国产成人一区 | 99久久精品无码一区二区毛片 | 四虎国产精品永久在线 | 小鲜肉自慰网站xnxx | 国产特级毛片潘金莲 | 国产大片aaa | 亚洲成a人v欧美综合天堂麻豆 | ass艳妇猛性bbwbbw1 | 国产激情无码一区二区 | 国产国语videosex另类 | 国内精品国产三级国产aⅴ久 | 成人做爰视频www网站小优视频 | 在线黄色网 | 另类天堂网 | 337p日本欧洲亚洲大胆色噜噜 | 久久久久国产精品嫩草影院 | 一区二区视频网站 | 久久99精品久久久久久hb无码 | 露脸叫床粗话东北少妇 | 国产一区二区三区在线观看免费 | 伊人久久精品一区二区三区 | 久久久免费网站 | 国产福利资源 | 日日撸视频| 9999人体做爰大胆视频摄影 | 黄色一级片 | 91射区| 草草女人院 | 色偷偷88888欧美精品久久久 | 日韩欧美理论 | 毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 国产女人久久精品视 | 国产成a人亚洲精品无码樱花 | 毛片毛片毛片毛片毛片毛片 | 在线观看色视频 | 亚洲成人aa | 久久久久久99精品久久久 | 日本va欧美va精品发布 | 欧美偷拍综合 | 在厨房拨开内裤进入毛片 | 亚洲色欲久久久久综合网 | 天天天干干干 | 91高清免费视频 | 青青草视频免费播放 | 国产高潮在线 | 久久88| 99热这里只有精品免费播放 | 国产清纯白嫩初黑人高生在线观看 | 黄a网站| 欧美丰满熟妇bbb久久久 | 最新中文字幕免费视频 | 精品国产一区二区三区四区在线 | 国产精品91在线 | 国产黄色一级录像 | 国产精品99久久久久久夜夜嗨 | 亚洲国产精品综合久久网络 | 无码尹人久久相蕉无码 | 婷婷丁香色 | 久久超碰99 | 亚洲精品天堂网 | 亚洲天堂免费在线 | 亚洲永久免费网站 | 久久这里有精品 | 婷婷久久综合网 | 疯狂做爰的爽文多肉小说王爷 | 亚色av| 亚洲乱码一区二区三区在线观看 | 色爱区综合 | 一本久久伊人热热精品中文字幕 | 成年人拍拍视频 | 日日拍拍| 黄色的一级片 | 国产女主播福利 | 久久亚 | 狠狠色噜噜狠狠狠合久 | 国产国产精品人在线观看 | 久久精品这里热有精品 | 国产香港明星裸体xxxx视频 | 69xx欧美 | 先锋av资源在线 | 亚洲一区二区91 | 国产亚洲欧美日韩在线一区二区三区 | 黄色在线a | 一级黄色视屏 | 亚洲4p| 久久强奷乱码老熟女网站 | 在线国产片 | 91精品国产二区在线看大桥未久 | 白嫩少妇喷水正在播放 | 亚洲国产免费视频 | 白嫩少妇和二男三p爽的大声呻吟 | 偷窥少妇高潮呻吟av久久免费 | 日韩视频在线免费观看 | 日日射影院 | 不卡视频在线 | 少妇天堂网 | 美女男女激情晚上看 | 欧美一区二区三区久久综合 | 极品美女扒开粉嫩小泬 | 精品免费国产一区二区 | 日韩亚洲欧美精品综合 | 国产偷国产偷亚洲清高app | 午夜精品久久久久久99热小说 | 久久精品伊人 | 国产又大又粗又猛又爽的视频 | 日韩在线播放一区二区 | 直接观看黄网站免费视频 | 国产a√ | 国产成人在线视频免费观看 | 久久成人一区 | 爆乳熟妇一区二区三区霸乳 | 久久久久久久久久久久久久久久久 | 男人的天堂中文字幕 | 亚洲青草 | 少妇愉情理伦片高潮日本 | 解开乳罩喂领导吃奶 | 国产精品 精品国内自产拍 日韩精品一区二区三区中文 | 黄色特级视频 | 97福利在线| 一区二区视频观看 | 国产女主播喷水 | 沉溺于黑人叶爱中文字幕 | 国产精品国产三级国产aⅴ下载 | 老司机午夜免费精品视频 | 人人舔人人 | а√资源新版在线天堂 | 影音先锋中文字幕一区 | 夫の上司に犯波多野结衣853 | 国产又爽又黄免费视频 | 综合中文字幕 | 欧美老肥妇做.爰bbww视频 | 欧美黑人又粗又大的性格特点 | 欧美色图视频在线 | 一区二区黄色 | 日韩黄色三级视频 | jizz在线播放 | 尤物精品视频在线观看 | 日本大码a∨欧美在线 | 国产精品无码人妻一区二区在线 | 亚洲欧美日韩另类精品一区二区三区 | 在线看成人 | 亚洲色大成网站www久久九九 | 夜夜看av | 视频在线a | 成人av网站免费 | 亚洲爽爽爽| 欧美透逼视频 | 正在播放adn156松下纱荣子 | 欧美日韩综合一区二区三区 | 成年人a级片 | 久久久久久久av | 第一136av福利视频导航 | 成熟少妇一区二区三区 | 恶虐女帝安卓汉化版最新版本 | 无码人妻精品中文字幕 | 欧美与黑人午夜性猛交久久久 | 曰本丰满熟妇xxxx性 | 综合色婷婷 | 免费观看a级毛片在线播放 免费观看a级片 | 天天操天天操天天射 | 男女一进一出超猛烈的视频不遮挡在线观看 | 色噜噜综合 | 一本a道v久大 | 五月天黄色av | 中文在线天堂网 | 欧美1区2区3区视频 欧美3p激情一区二区三区猛视频 | 伊人久久久久久久久久久久久 | 黄色在线小视频 | 丰满放荡岳乱妇91ww | 波多野结衣的av一区二区三区 | 国产18精品乱码免费看 | 狠狠色狠色综合曰曰 | 人妻尝试又大又粗久久 | 欧美视频亚洲 | 伊人欧美在线 | 99综合网 | 91亚洲日本aⅴ精品一区二区 | 免费日本黄色片 | 亚洲人成亚洲人成在线观看 | 蜜桃成人在线观看 | 白白嫩嫩的美女无套内谢 | 国产成人av网 | 久久久久久免费观看 | 五月婷婷六月丁香 | 黄色av免费在线播放 | 免费午夜视频 | 久久影院精品 | 高潮喷水的毛片 | 九色丨蝌蚪丨成人 | www国产亚洲精品久久网站 | 成人在线手机视频 | 免费人成无码大片在线观看 | 欧美熟妇另类久久久久久不卡 | 伊人久久大香线蕉成人综合网 | 欧日韩毛片 | 久久精品嫩草影院 | xxxxx色| 紧身裙女教师三上悠亚红杏 | 一本久道综合色婷婷五月 | 日日夜夜狠狠爱 | 免费在线观看av | 爽爽影院免费观看视频 | www.av日韩| 日韩无套无码精品 | 高中生粉嫩无套第一次 | 色天堂在线视频 | 亚洲日韩v无码中文字幕 | 精品一级少妇久久久久久久 | 91精品国产综合久久香蕉最新版 | 偷窥少妇高潮呻吟av久久免费 | 亚洲成av人片在线观看 | 日韩毛片网 | 国产精品无码无卡在线播放 | 大学生xvideoscom| 亚洲人成网址 | 国产欧美做爰xxxⅹ在线观看 | 午夜久久精品 | 亚洲乱码一区二区 | 无码一区二区三区免费 | 成年18网站免费进入夜色 | 国产98色 | 中文字幕无码人妻aaa片 | 国产亚洲精品精品精品 | 五十路熟女一区二区三区 | 欧美午夜大片 | 午夜福利电影 | 一本精品中文字幕在线 | 伊人情人色综合网站 | xxx精品| a一级视频 | 国产真实交换配乱淫视频 | 先锋资源久久 | 一级看片免费视频囗交 | 国产精品无套粉嫩白浆在线 | 国产裸体永久免费视频网站 | 成人做受视频试看60秒 | 天天躁狠狠躁狠狠躁性色牛牛影视 | 在线观看黄网站 | 精品国产乱码久久久久久1区2区 | 91网在线 | 亚洲精品久久久久58 | 亚洲乱码中文字幕 | 免看一级a毛片一片成人不卡 | 国产成人无码一区二区三区在线 | 女人扒开屁股桶爽30分钟 | 喷潮91 | 国产欧美一区二区三区沐欲 | 日本v片| 免费啪视频在线观看 | 亚洲欧洲日本国产 | 狠狠狠狠狠 | 日韩精品无码一本二本三本色 | 少妇特黄v一区二区三区图片 | 91精品国产99久久久 | 无码av大香线蕉伊人久久 | 伊人国产女 | 吃奶摸下激烈视频学生软件 | 国产免费永久精品无码 | 国产一级做a爰片久久毛片男 | 国产精品婷婷久久爽一下 | 午夜伦理福利视频 | 性网址| 精品人妻一区二区三区浪潮在线 | 国产熟女一区二区三区四区五区 | 男人天堂avav | 成人欧美18| 精品网站999 | 少妇性l交大片免费观看冫 少妇性l交大片免费快色 | 人人色视频 | 亚洲视频1 | 2019最新中文字幕 | 97国产精品 | 久久精品国产一区二区三区 | 亚洲国产精品久久精品成人网站 | 中文字幕被公侵犯的漂亮人妻 | 日韩高清影院 | 在线观看入口 | 日本色片网站 | 中国美女毛片 | 黑人大战亚洲人精品一区 | 国产一级美女视频 | 91精品国产九九九久久久亚洲 | 亚洲va在线va天堂xxxx中文 | 国产美女av | 全程偷拍露脸中年夫妇 | 久久伊人精品一区二区三区 | 国产精品偷伦费观看一次 | 污污小说在线观看 | 一本色综合亚洲精品蜜桃冫 | 国产aⅴ激情无码久久久无码 | 久久精品道一区二区三区 | 8x8ⅹ在线永久免费入口 | 91极品美女 | 成人乱人乱一区二区三区软件 | jzzijzzij亚洲日本少妇熟 | 国产国拍精品亚洲 | 一区二区免费在线观看 | 中文在线字幕免 | 日本精品一区二区在线观看 | 黄色永久视频 | 97久久久久人妻精品区一 | 四虎成人精品国产永久免费无码 | 国产稀缺真实呦乱在线 | 一区二区三区人妻无码 | 久久久www免费人成黑人精品 | 成人无码精品1区2区3区免费看 | 欧美一区亚洲一区 | 天堂а√在线最新版中文在线 | 久久国产精品影视 | 艳妇荡乳豪妇荡乳av精东 | 国自产拍偷拍精品 | 91视频国产免费 | 国产成人一区在线观看 | 亚洲精品永久在线观看 | 18性xxxxx性猛交 | 在线黄视频 | 国产日产精品一区二区 | 双性人hdsexvideos | 毛片在线观看网站 | 日本伊人精品一区二区三区 | 伊人网综合 | 4k岛国av超高清aⅴ | 国产网红主播一区二区三区 | 一本之道ay免费 | 久久精品成人av | bt7086福利一区国产 | 成人一区二区三区四区 | 国产无套粉嫩白浆内精品 | 久久av无码精品人妻出轨 | 亚洲欧美日韩国产精品一区二区 | 国产l精品国产亚洲区 | 全黄一级裸体 | 亚洲第一av网站 | 狠狠色噜噜狠狠狠狠97 | 明星换脸av一区二区三区网站 | 97夜夜澡人人爽人人喊中国片 | 高h肉各种姿势g短篇np视频 | 欧美男人的天堂 | 国产清纯白嫩初高生在线观看性色 | 中文字幕久久av | 欧美一二级| 亚洲天堂网一区 | 婷婷开心激情综合五月天 | 精品美女在线观看 | 亚洲视频123 | 日日夜夜噜噜噜 | 国产女人高潮合集特写 | 国产91丝袜在线播放九色 | 国产精品无套粉嫩白浆在线 | 一区二区三区视频在线播放 | 337p日本大胆噜噜噜鲁 | 国模精品一区二区三区 | 日产精品久久久一区二区福利 | 国产精品高潮呻吟久久aⅴ码 | 97人人模人人爽人人少妇 | 91中文在线观看 | 色哟哟国产最新 | 国产91精品激烈高潮白浆 | av三级在线播放 | 神马久久久久久久久久久 | 久久亚洲国产成人影院 | 无码一区二区三区中文字幕 | 18无码粉嫩小泬无套在线观看 | 黄色毛片视频 | 日韩91视频 | 在线视频97| 精品国产一区二区三区av性色 |