久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

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

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

瀏覽:2日期: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
相關文章:
主站蜘蛛池模板: 亚洲人成在线播放 | 91精品国产高清久久久久久久久 | hitomi一区二区三区精品 | 久久久久久网站 | 国产精品99久久久久久动医院 | 亚洲成人中文字幕 | 久久久久久99精品 | 国产精品视频一二三 | 国产精品一二三区 | 国产成人福利在线观看 | 99精品国产一区二区三区 | 欧美日韩亚洲高清 | porn一区| 亚洲精品视频在线观看免费视频 | 久久综合狠狠综合久久综合88 | 国产情侣自拍啪啪 | 国产精品国产 | 91网站在线看 | 亚洲成人精品 | 国产亚洲一区二区三区在线观看 | 国产精品久久久久aaaa九色 | 欧美日韩国产一区二区 | 亚洲精品在线免费 | 依人成人网 | 亚洲国产精品成人 | 久久91精品 | 国产精品免费久久 | 中文字幕高清av | 国产成人免费视频网站高清观看视频 | 国产在线观看91一区二区三区 | 91精品久久久久久久久中文字幕 | 日本久草| 欧美黄色一级毛片 | 日本黄色大片 | 午夜私人影院在线观看 | 欧美日韩国产一区二区 | www.日韩av.com | 色欧美片视频在线观看 | 国产日韩精品一区二区在线观看播放 | 日韩高清av| 一区二区三区日韩在线 | 黄色国产精品 | 久久久久久久国产 | 青青久久久| 在线视频91 | 国产精品久久久久久久久久新婚 | 亚洲久草视频 | 午夜大片网 | 国产精品粉嫩白浆在线观看 | 国产精品无 | 狠狠色综合色综合网络 | 国产成人福利在线观看 | 91高清视频 | 久久福利 | 国产精品美女www爽爽爽动态图 | 成人免费视频网站在线观看 | av免费在线观看网址 | 性欧美精品高清 | 一区二区三区免费视频网站 | 精品久久久久久久久久 | 美女福利视频网站 | 丁香婷婷久久久综合精品国产 | 天天色天天 | 97伦理片 | 中文字幕视频在线观看 | a毛片毛片av永久免费 | 久久成人一区 | 日日操操 | 亚洲狠狠久久综合一区77777 | 中文字幕一区在线观看视频 | 精品国产91亚洲一区二区三区www | 成人在线一区二区 | 国产伦精品一区二区三区在线 | 天天操狠狠操网站 | 欧美三级视频 | 91久久国产综合久久 | 精品一区二区久久久久久久网站 | 国产成人一区二区 | 国产妇女乱码一区二区三区 | 欧美在线免费 | 欧美日韩中文 | 蜜桃精品久久久久久久免费影院 | 99久久99热这里只有精品 | 日韩中文一区二区三区 | 麻豆久久久9性大片 | 国产精品久久片 | 日韩理伦片在线观看视频播放 | 中文字幕av一区二区三区 | 97热在线 | 亚洲依人| 欧美在线 | 亚洲 | 成人在线观看免费视频 | 在线观看精品91福利 | 成人亚洲视频 | 欧美久久精品 | 青青草免费在线 | 久久久久国产一区 | 成人毛片在线视频 | 亚洲女人天堂av | 男人的天堂一级片 | 中文字幕第31页 | 一区二区三区久久久久久 | 黄色四虎| 色就是色网站 | 日本三级视频 | 一区二区影院 | 久久久精品一区二区 | 久久精品99国产精品亚洲最刺激 | 精品一区二区电影 | 欧美日本一区二区三区 | a级毛片免费高清视频 | 亚洲精品电影 | 九九99九九 | 欧美精品二区 | 亚洲欧美日韩另类精品一区二区三区 | 精品伊人久久 | 男女视频在线 | 久久先锋 | aⅴ色国产 欧美 | 日日摸天天做天天添天天欢 | 人人人人澡 | 99亚洲精品 | 中文字幕影院 | 91在线免费观看 | 国产亚洲一区二区三区在线观看 | 国产精品久久久久婷婷二区次 | 久久aⅴ乱码一区二区三区 91综合网 | 91精品国产一区二区三区四区在线 | 91亚洲免费视频 | 毛片久久久 | 免费观看一级特黄欧美大片 | 不卡一区二区三区视频 | 久久精品中文字幕 | 亚洲一区二区三区四区五区午夜 | av黄色在线 | 美女操av | 蜜月aⅴ免费一区二区三区 99re在线视频 | 成人激情在线 | 国产电影精品久久 | 久久精品99国产精品亚洲最刺激 | 欧美人成在线视频 | 在线观看免费黄色小视频 | 国产精品毛片一区二区 | 国产最新精品视频 | 欧美精品综合 | 日韩视频在线免费观看 | 亚洲精品国产精品国自产 | 午夜精品久久 | 天天干一干 | 免费在线观看一区二区 | 日韩一区二区在线观看 | 国产美女永久免费无遮挡 | 国产毛片毛片 | 久久久久一区 | 亚洲精品四区 | 在线播放91 | 免费国产视频 | 久9久9| 一区二区三区视频免费在线观看 | 精品一区二区三区免费毛片爱 | 高清一区二区 | 国产羞羞视频在线观看 | 国产毛片a级 | 国产精品一区二区三区在线播放 | 久久综合成人精品亚洲另类欧美 | 日本天天操 | 成人在线一区二区三区 | 精品欧美一区二区三区久久久 | 亚洲午夜视频在线观看 | 黄色国产一级视频 | 亚洲视频 欧美视频 | 亚洲精品成人av | 亚洲风情在线观看 | 久久国产一区二区 | 日韩欧美一区二区在线 | concern超碰在线 | 国产九九九 | 午夜影院a | 国产全黄 | 精品国产一区三区 | 日韩一区在线视频 | 免费一级在线观看 | 久久国产精品影视 | 一区二区精品 | 国产精品一区免费在线观看 | 久久久久久午夜 | 99久久精品一区二区成人 | 日韩特级| 欧美午夜视频在线观看 | 另类一区 | 毛片网子 | 亚洲毛片 | 日韩视频在线观看 | 九九热在线视频免费观看 | 亚洲一区 日韩精品 中文字幕 | 欧美不卡视频 | 神马久久久久久久久 | 亚洲人成在线观看 | jizzjizz亚洲中国少妇 | 精品国产髙清在线看国产毛片 | 亚洲综合欧美 | 91一区二区三区 | 国产一级视频在线观看 | 久草中文在线 | 999国产在线视频 | 国产精品无码永久免费888 | 成人精品国产免费网站 | 黄色电影天堂 | 欧洲精品视频在线观看 | 一级久久久 | 日韩1区3区4区第一页 | 久久91 | 日日日操 | 国产精自产拍久久久久久 | 久久亚洲高清 | 久久精品在线视频 | 男女羞羞羞视频午夜视频 | 成人不卡视频 | 欧美中文字幕在线观看 | 中文字幕精品一区久久久久 | 欧美性久久| 中文字幕在线永久在线视频 | 亚洲社区在线观看 | 欧美国产日韩一区 | 国产精品第一区 | 欧美成人综合视频 | 国户精品久久久久久久久久久不卡 | 超碰人人插 | 午夜影院在线看 | 国产成人综合网 | 亚洲一区二区三区福利 | 国产女爽爽视频精品免费 | 午夜免费小视频 | 99久久精品免费 | 精品国产一级片 | 性视频一区二区 | 日韩av片在线免费观看 | 精品久久久久久久 | 蜜桃视频网站在线观看 | 精品视频在线观看一区二区三区 | 日韩一区二区三区在线观看 | 久热精品在线视频 | 一区久久久 | www成人精品 | 亚洲欧美综合精品久久成人 | 国产精品久久久久久吹潮 | 亚洲第一页中文字幕 | 精品一区视频 | 欧美综合一区二区 | 欧美天天 | 日韩电影免费在线观看中文字幕 | 日韩一区二区视频 | 国产精品原创av片国产免费 | 中文在线一区二区 | 涩涩999 | 国产免费一区二区三区最新不卡 | 91社影院在线观看 | 欧美成人精品一区二区三区 | 国产免费看 | 一级a性色生活片久久毛片波多野 | 在线观看中文字幕亚洲 | 97超碰青青草 | 中文字幕第一页在线 | 日韩视频在线观看一区 | 蜜月va乱码一区二区三区 | 成人午夜影院 | 亚洲国产成人av好男人在线观看 | 色就是色欧美 | 欧美午夜视频 | 欧美女优在线视频 | 日韩中文字幕 | 中文在线视频 | 婷婷欧美| 午夜视频网| 亚洲精品www久久久久久广东 | 亚洲国产精品久久久久 | 日本妇人成熟免费视频 | www.国产精品| 久久久久国产一区二区三区四区 | 51国产午夜精品免费视频 | 欧美国产日韩一区 | av在线一区二区三区 | 天天摸天天摸 | 97伦理电影 | 久久久一区二区 | 成人午夜免费视频 | 亚洲www啪成人一区二区 | 午夜国产精品视频 | 日韩av一区二区在线观看 | 99精品欧美一区二区蜜桃免费 | 国产在线拍揄自揄拍视频 | 久久一区| 日本亚洲欧美 | 精品国产一区二区三区在线观看 | 亚洲欧美中文日韩在线v日本 | 美女天堂网 | 99精品福利视频 | 国产午夜精品久久 | 福利三区| av网站免费 | 在线免费黄色小视频 | 欧美日韩在线第一页 | 日韩在线视频一区 | 国产成人精品a视频一区www | 在线观看亚洲精品视频 | 国产成人免费视频网站高清观看视频 | av午夜| 亚洲成人精品 | 久久久夜夜夜 | 亚洲精品国产剧情久久9191 | a级片视频在线观看 | 国产综合区| 国产日韩精品一区二区 | 国产精品久久久久免费a∨ 欧洲精品一区 | 久久久美女 | 99国产精品久久久久久久久久 | 亚洲精品久久久久久久久久久 | 国产精品69毛片高清亚洲 | 国产美女在线播放 | 国产亚洲精品久久久久久久 | 99视频网| 黄色高清视频在线观看 | 国产精品www | 久久久久久综合 | 国产一级片 | 欧美日韩亚洲国产综合 | 亚洲国产精品成人 | 国产精品一区二区三区四区 | 在线视频自拍 | 国产精品久久久一区二区三区 | 韩国电影久久影院 | 一区二区三区视频在线免费观看 | 欧美日韩国产在线 | 黄a一级| 国产毛片精品 | 亚洲欧美日韩天堂 | 日韩不卡一区二区三区 | 亚洲高清视频在线 | 97久久久国产精品 | 91精品国产乱码久久久久久久久 | 免费在线一区二区 | 夜夜骚| 91精品国产综合久久久久久漫画 | av在线一区二区三区 | 成人h视频 | 日本精品视频在线观看 | 国产精品免费在线 | 中文字幕一区二区在线观看 | 中文字幕在线免费视频 | 一区二区三区久久 | 久久国产成人 | 国产成人一区 | 亚洲一区久久久 | 日韩欧美国产成人一区二区 | 精品天堂 | 国产高清一级毛片在线不卡 | 日本免费在线视频 | 综合网激情五月 | 欧美日韩国产一区 | 国产www视频| 午夜视频在线观看网站 | 看亚洲a级一级毛片 | 91精品国产91久久久久久密臀 | 午夜无码国产理论在线 | 中文字幕在线观看 | 日韩欧美在线一区二区 | 激情91| 天堂一区二区三区在线 | 成人福利 | 午夜精品在线 | 欧美日韩一区二区三区视频 | 亚洲精品国产第一综合99久久 | 亚洲成人免费网站 | 成人免费大片黄在线播放 | 国产情品| 国产精品久久久久久婷婷天堂 | 亚洲国产成人精品女人久久久 | 免费观看一级视频 | 欧洲一区二区三区 | 久久成人一区二区 | 91短视频版在线观看免费大全 | 国产精品亚洲一区二区三区 | 国产伦精品一区二区 | 欧产日产国产精品一二 | 91精品国产一区二区三区蜜臀 | 国产一区二区精品久久岳 | 最新免费视频 | 成人影音 | 国产欧美日韩综合精品 | 秋霞av电影 | 国产精品自产av一区二区三区 | 北条麻妃99精品青青久久 | 亚洲三级在线看 | 亚洲精美视频 | 国产一级特黄aaa | 夜本色 | 作爱视频免费看 | 亚洲成人一区二区 | 国产精品一区二区三区四区 | 国产精品久久久久久吹潮 | 五月天婷婷在线视频 | 天堂中文资源在线 | 成人免费激情视频 | 国产中文字幕一区 | 国产精品无码久久久久 | 日韩中文字幕在线播放 | 草草网站 | 97男人的天堂 | 午夜国产影院 | 中文字幕亚洲欧美 | 国产精品一区人伦免视频播放 | 超碰在线看 | 91精品国产综合久久婷婷香蕉 | 亚洲精品一区二区 | 国产精品久久久久免费a∨ 欧洲精品一区 | 97在线观看| 国产高清视频一区二区 | 国产一区二区毛片 | 九一视频在线播放 | 天天影视网色香欲综合网无拦截 | 三级黄色在线视频 | 国产精品久久久久久久久小说 | 91久久精品一区二区二区 | 国内精品亚洲 | 99久久久久久久久 | 日韩中文字幕免费视频 | 久久综合狠狠综合久久综合88 | 男人的天堂视频网站 | 欧美 亚洲 一区 | 国产艳妇av视国产精选av一区 | 能直接看的av网站 | 99久久久无码国产精品 | 亚洲一级毛片 | 91欧美| 成人免费看片 | 久久av资源网 | 国产精品久久国产愉拍 | 亚洲一区二区三区在线播放 | 特黄一级 | 操操操影院| 国产黄色大片免费观看 | h片在线 | 国产精品爱久久久久久久 | 欧美一区二区三区 | 久热精品视频 | 做a视频在线观看 | 色九九 | 欧美一级片在线观看 | av在线一区二区三区 | 亚洲人成中文字幕在线观看 | 国产精品一区二区三区在线 | 久久久精品久久久久久 | 中文字幕日韩一区二区不卡 | 日韩国产欧美视频 | 久久香蕉网 | av大片在线 | 成人黄色一区 | 国产成人av综合 | 国产精品久久久久久久久久东京 | av大片网 | 亚洲精品国产乱码在线看蜜月 | 日韩成人在线一区 | 毛片久久久 | 日韩在线视频一区 | 亚洲综合色视频在线观看 | 亚洲精品视频在线免费 | 91精品国产综合久久久蜜臀图片 | 国产一级毛片电影 | 国产日韩一区二区三区 | 欧美日韩国产一区二区三区 | 亚洲美女一区二区三区 | 天天操天天干视频 | 国产中文字幕在线 | 中国一级特黄毛片大片 | 天天操夜夜操av | 久久久精品免费观看 | 亚洲黄色一级毛片 | 伊人91| 五月婷亚洲 | 91精品国产综合久久久蜜臀粉嫩 | 国产精选一区二区三区不卡催乳 | a级在线观看免费 | 亚洲免费视频一区 | 国产成人免费 | 亚洲精品免费观看 | 一区二区三区在线 | 一区二区三区视频 | 久久女人网 | 福利精品视频 | 6080yy午夜一二三区久久 | 国产情侣激情 | 国产一区二区视频免费 | 久久线视频| 综合久久网| 国产综合视频 | 欧美国产在线视频 | 91视频网址| 久久精品免费 | 人人99| 国产一级视频免费观看 | 精品无人乱码一区二区三区 | 欧美午夜视频 | 日韩精品亚洲专区在线观看 | 性视频网站免费 | 91免费在线看 | 日韩免费一区 | 国产精品久久久久久久久费观看 | 精品欧美黑人一区二区三区 | 精品视频在线免费观看 | 欧美精品成人一区二区三区四区 | 成人午夜视频在线观看 | 色婷婷亚洲一区二区三区 | 国产精品久久久久久中文字 | 天天久久综合网 | 一区二区三区视频在线 | 国产精品视频久久 | 欧美日韩在线精品 | 色婷婷av一区二区三区软件 | 一区二区在线免费观看 | 日韩精品免费看 | 午夜精品久久久久 | 北条麻妃一区二区三区中文字幕 | 男人的天堂一级片 | 91精品国产乱码久久久久久久久 | 国产人妖在线 | 日韩一区精品视频 | 国产91富婆养生按摩会所 | 91国偷自产一区二区三区亲奶 | 亚洲综合大片69999 | 中文字幕在线永久 | 久久99国产精品久久99大师 | 国产毛片视频 | 亚洲黄色av网站 | 午夜精品视频 | 黑人粗黑大躁护士 | 亚洲精品乱码久久久久久 | 欧美精品在线观看 | 99视频在线免费观看 | 欧美久久精品 | 日韩精品一区二区三区在线 | 伊人婷婷 | 国产一区二区三区免费视频 | 中文字幕2021| 天堂一区 | 亚洲国产精品视频 | 在线视频一区二区 | 国产成人午夜高潮毛片 | 中文字幕免费视频观看 | 国产精品一区久久久久 | 日韩视频在线观看视频 | 成人a在线视频免费观看 | 在线视频91 | 欧美一级一 | 国产目拍亚洲精品99久久精品 | 成人免费在线电影 | 国产人久久人人人人爽 | 亚洲美女在线视频 | 国产999精品久久久影片官网 | 精品国产一区二区三区久久久久久 | 成人欧美一区二区三区黑人孕妇 | 国产综合精品一区二区三区 | 色婷婷亚洲国产女人的天堂 | 国产免费一区二区 | 午夜在线观看视频网站 | 91成人在线 | 99久久国产| 亚洲欧美综合 | 国产精品久久久久一区二区三区 | 亚洲成人一区二区 | 亚洲国产成人久久 | 91婷婷射 | 久久亚洲天堂 | 精品美女在线观看视频在线观看 | 夜夜骑av | 日本三级黄色录像 | 99精品一区二区 | 亚洲永久免费 | 久久综合av | 中文字幕在线视频精品 | 国产成人精品一区二区三区四区 | 亚洲欧美视频 | 五月天在线婷婷 | 五月婷婷综合激情网 | 香蕉综合久久 | 日韩精品一区二区三区在线观看 | 天天干天天操天天爽 | 日韩精品一区二区三区中文在线 | 特级丰满少妇一级aaaa爱毛片 | 91免费在线播放 | 精品一区二区久久久久久久网站 | 国产一区网站 | 国产999精品久久久影片官网 | 亚洲成人伊人 | 操操操操网 | 九九久久精品 | 亚洲午夜精品一区二区三区 | 99久久综合精品五月天 | 久久精品中文字幕 | 国产欧美精品区一区二区三区 | 国产成人久久精品一区二区三区 | www久久精品 | 色站综合 | 日韩亚洲一区二区 | 国产欧美日韩一区 | 日韩免费高清视频 | 精品中文久久 | 精品国产影院 | 亚洲成人看片 | 一区小视频 | 成人影视网址 | 天堂欧美城网站 | 天天夜碰日日摸日日澡 | 在线观看毛片网站 | 日韩在线观看一区二区 | 日本在线视频不卡 |