日本少妇高潮喷水xxxxxxx_久久综合久久网_亚洲综合男人的天堂_国产一区二区三区四区二区

二維碼
企資網

掃一掃關注

當前位置: 首頁 » 企業資訊 » 產業 » 正文

_Resource_資源加載

放大字體  縮小字體 發布日期:2021-12-29 03:05:38    作者:馮園玲    瀏覽次數:126
導讀

Resource 是 Spring 對資源得統一封裝接口,實現對各類資源得統一處理。Resource 接口聲明了一些訪問資源得能力,public interface Resource extends InputStreamSource {// 判斷資源是否存在boolean exists();// 判

Resource 是 Spring 對資源得統一封裝接口,實現對各類資源得統一處理。

Resource 接口聲明了一些訪問資源得能力,

public interface Resource extends InputStreamSource { // 判斷資源是否存在 boolean exists(); // 判斷資源是否可讀,如果為 true,其內容未必真得可讀,為 false,則一定不可讀 default boolean isReadable() { return exists(); } // 判斷資源是否已經打開,主要針對流類型資源(InputStreamResource), default boolean isOpen() { return false; } // 判斷資源是否是文件 default boolean isFile() { return false; } // 獲取資源得 URL 地址,如果資源不能解析為 URL,則拋出異常 URL getURL() throws IOException; // 獲取資源得 URI 地址,如果資源不能解析為 URI,則拋出異常 URI getURI() throws IOException; // 獲取資源文件,如果資源不是文件,則拋出異常 File getFile() throws IOException; // NIO default ReadableByteChannel readableChannel() throws IOException { return Channels.newChannel(getInputStream()); } // 獲取資源內容得長度 long contentLength() throws IOException; // 獲取資源蕞后更新時間 long lastModified() throws IOException; // 根據資源相對路徑創建新資源 Resource createRelative(String relativePath) throws IOException; // 獲取資源文件名 String getFilename(); // 獲取資源描述,通常是資源全路徑(實際文件名或者URL地址) String getDescription();}

Resource 接口繼承了 InputStreamSource 接口,這個接口只聲明了一個方法,就是獲取資源得 IO 流。

public interface InputStreamSource { // 獲取資源輸入IO流 InputStream getInputStream() throws IOException;}

Resource 擁有眾多得實現類,不同得實現類代表著不同得資源。接下來學習幾個常用得實現類得使用方法。

實現類

描述

ClassPathResource

通過類路徑獲取資源

FileSystemResource

通過文件系統獲取資源

UrlResource

通過 URL 地址獲取遠程資源

ServletContextResource

獲取 ServletContext 環境下得資源

ByteArrayResource

獲取字節數組封裝得資源

InputStreamResource

獲取輸入流封裝得資源

通過 Resource 加載資源

ClassPathResource

如果資源在項目內,可以通過類路徑讀取資源,主要通過如下兩種方式

  • Class.getResourceAsStream(path)
  • path 以 / 開頭,表示可能嗎?路徑,從 classpath 根目錄開始查找資源
  • path 不以 / 開頭,表示相對路徑,從 class 文件目錄開始查找資源
  • ClassLoader.getResourceAsStream(path)
  • path 都不以 / 開頭,從 classpath 根目錄開始查找資源

    ClassPathResource 其實就是對以上兩種方式進行了封裝,查看源碼,就可以知道

    public class ClassPathResource extends AbstractFileResolvingResource { private final String path; private ClassLoader classLoader; private Class<?> clazz; public InputStream getInputStream() throws IOException { InputStream is; if (this.clazz != null) { is = this.clazz.getResourceAsStream(this.path); } else if (this.classLoader != null) { is = this.classLoader.getResourceAsStream(this.path); } else { is = ClassLoader.getSystemResourceAsStream(this.path); } if (is == null) { throw new FileNotFoundException(getDescription() + " cannot be opened because it does not exist"); } return is; }}

    ClassPathResource 得使用方式如下所示

    public class ClassPathResourceTest { public static void main(String[] args) throws Exception { // 只傳 path,相當于使用默認得 ClassLoader 進行加載 Resource resource1 = new ClassPathResource("com/test/hello.md"); System.out.println("resource1:" + resource1.getInputStream()); // path 前面加 "/",會自動去掉,與不加 "/" 是一樣得效果 Resource resource2 = new ClassPathResource("/com/test/hello.md"); System.out.println("resource2:" + resource2.getInputStream()); // 使用 Class 從 classpath 進行加載,path 前面加 "/" 與不加效果一樣 Resource resource3 = new ClassPathResource("/com/test/hello.md", ClassPathResourceTest.class); System.out.println("resource3:" + resource3.getInputStream()); // 使用 Class 得相對路徑進行加載 Resource resource4 = new ClassPathResource("../hello.md", ClassPathResourceTest.class); System.out.println("resource4:" + resource4.getInputStream()); // 使用指定得 ClassLoader 進行加載,從 classpath 根目錄進行加載 Resource resource5 = new ClassPathResource("com/test/hello.md", ClassPathResourceTest.class.getClassLoader()); System.out.println("resource5:" + resource5.getInputStream()); }}

    FileSystemResource

    如果資源本地文件系統,可以通過文件路徑讀取資源

    public class FileSystemResourceTest { public static void main(String[] args) throws Exception { // 使用文件路徑進行加載 Resource resource1 = new FileSystemResource("d:\\test.txt"); System.out.println("resource1:" + resource1.getInputStream()); // 使用 File 進行加載 Resource resource2 = new FileSystemResource(new File("d:\\test.txt")); System.out.println("resource2:" + resource2.getInputStream()); }}

    查看源碼,可以知道 FileSystemResource 是基于 java.nio.file.Path 實現。

    public class FileSystemResource extends AbstractResource implements WritableResource { private final String path; private final File file; private final Path filePath; public InputStream getInputStream() throws IOException { try { return Files.newInputStream(this.filePath); } catch (NoSuchFileException ex) { throw new FileNotFoundException(ex.getMessage()); } }}

    UrlResource

    如果資源在遠程服務器,則只能通過 URL 地址進行獲取。

    public class FileSystemResourceTest { public static void main(String[] args) throws Exception { // 使用 Http 協議得 URL 地址進行加載 Resource resource1 = new UrlResource("docs.spring.io/spring/docs/4.0.0.M1/spring-framework-reference/pdf/spring-framework-reference.pdf"); System.out.println("resource1:" + resource1.getInputStream()); // 使用 file 訪問本地文件系統 Resource resource2 = new UrlResource("file:d:\\test.txt"); System.out.println("resource2:" + resource2.getInputStream()); }}

    查看源碼中得實現

    public class UrlResource extends AbstractFileResolvingResource { private final URI uri; private final URL url; private volatile URL cleanedUrl; public InputStream getInputStream() throws IOException { URLConnection con = this.url.openConnection(); ResourceUtils.useCachesIfNecessary(con); try { return con.getInputStream(); } catch (IOException ex) { // Close the HTTP connection (if applicable). if (con instanceof HttpURLConnection) { ((HttpURLConnection) con).disconnect(); } throw ex; } }}

    ByteArrayResource

    資源即可以是文件,也可以是解析后得數據

    public class ByteArrayResourceTest { public static void main(String[] args) throws Exception { ByteArrayResource resource1 = new ByteArrayResource("Hello".getBytes()); System.out.println("resource1:" + resource1.getInputStream()); }}

    查看源碼,可以看到 getInputStream() 方法每次都會組裝一個全新得 ByteArrayInputStream 流

    public class ByteArrayResource extends AbstractResource { private final byte[] byteArray; private final String description; public InputStream getInputStream() throws IOException { return new ByteArrayInputStream(this.byteArray); }}

    InputStreamResource

    使用 Stream 得 Resource,通過 getInputStream 方法進行資源加載,但是只能加載一次。

    public class InputStreamResourceTest { public static void main(String[] args) throws Exception { InputStream is = new FileInputStream("d:\\test.txt"); InputStreamResource resource1 = new InputStreamResource(is); System.out.println("resource1:" + resource1.getInputStream()); is.close(); }}

    構造方法傳入得就是 Stream,查看源碼,對 Stream 得使用進行控制。

    public class InputStreamResource extends AbstractResource { private final InputStream inputStream; private final String description; private boolean read = false; public InputStream getInputStream() throws IOException, IllegalStateException { if (this.read) { throw new IllegalStateException("InputStream has already been read - " + "do not use InputStreamResource if a stream needs to be read multiple times"); } this.read = true; return this.inputStream; }}通過 ResourceLoader 加載資源

    Resource 雖然統一了各類資源得加載方式,但實現類眾多,為了更方便地使用 Resource,Spring 提供了 ResourceLoader 接口,專門用來加載 Resource。

    public interface ResourceLoader {Resource getResource(String location);ClassLoader getClassLoader();}

    ResourceLoader 得使用

    public class ResourceLoaderTest { public static void main(String[] args) throws Exception { ResourceLoader loader = new DefaultResourceLoader(); Resource resource1 = loader.getResource("特別baidu"); System.out.println("resource1 -- " + resource1.getClass().getSimpleName() + " -- " + resource1.getInputStream()); Resource resource2 = loader.getResource("classpath:com/test/hello3.md"); System.out.println("resource2 -- " + resource2.getClass().getSimpleName() + " -- " + resource2.getInputStream()); Resource resource3 = loader.getResource("com/test/hello3.md"); System.out.println("resource3 -- " + resource3.getClass().getSimpleName() + " -- " + resource3.getInputStream()); Resource resource4 = loader.getResource("file://d:\\test.txt"); System.out.println("resource4 -- " + resource4.getClass().getSimpleName() + " -- " + resource4.getInputStream()); }}

    輸出如下,

    resource1 -- UrlResource -- sun.特別protocol.http.HttpURLConnection$HttpInputStream等61e717c2resource2 -- ClassPathResource -- java.io.BufferedInputStream等3b764bceresource3 -- ClassPathContextResource -- java.io.BufferedInputStream等4c98385cresource4 -- FileUrlResource -- java.io.BufferedInputStream等73a8dfcc

    查看源碼,可以清楚看到在 DefaultResourceLoader 中對 location 得處理邏輯。

    public class DefaultResourceLoader implements ResourceLoader { private final Set<ProtocolResolver> protocolResolvers = new linkedHashSet<>(4); public Resource getResource(String location) { Assert.notNull(location, "Location must not be null"); // 使用 protocolResolvers 進行分析,但上例中并沒有設置,跳過 for (ProtocolResolver protocolResolver : getProtocolResolvers()) { Resource resource = protocolResolver.resolve(location, this); if (resource != null) { return resource; } } // 判斷是否 "/" 開頭,是則返回 ClassPathContextResource if (location.startsWith("/")) { return getResourceByPath(location); } // 判斷是否 "classpath" 開頭,是則返回 ClassPathResource else if (location.startsWith(CLASSPATH_URL_PREFIX)) { return new ClassPathResource(location.substring(CLASSPATH_URL_PREFIX.length()), getClassLoader()); } else { try { // 如果都不是,則使用 URL 進行獲取 URL url = new URL(location); // 如果是系統文件,則返回 FileUrlResource,否則返回 UrlResource return (ResourceUtils.isFileURL(url) ? new FileUrlResource(url) : new UrlResource(url)); } catch (MalformedURLException ex) { // 默認返回 ClassPathContextResource return getResourceByPath(location); } } } protected Resource getResourceByPath(String path) { return new ClassPathContextResource(path, getClassLoader()); }}

    DefaultResourceLoader 只是 ResourceLoader 得一個默認實現,ResourceLoader 還有一個繼承接口 ResourcePatternResolver,這個接口提供了基于 Ant 風格得通配符解析路徑得能力。

    public interface ResourcePatternResolver extends ResourceLoader {String CLASSPATH_ALL_URL_PREFIX = "classpath*:";Resource[] getResources(String locationPattern) throws IOException;}

    而 ApplicationContext 接口繼承了 ResourcePatternResolver 接口,所以,所有得 SpringContext 都可能通過 Ant 通配符解析加載資源。

    public class ApplicationContextTest { public static void main(String[] args) throws Exception { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); context.refresh(); Resource[] resources = context.getResources("classpath:com/testa.xml

    匹配 example 目錄及其子目錄下得 a.xml 文件

    查看源碼,看看 Spring 是如何實現支持 Ant 通配符解析得。

    getResources 得實現在 GenericApplicationContext 類中。GenericApplicationContext 類中有一個 ResourceLoader 成員變量,可以進行自定義設置,所以 GenericApplicationContext 使用得是組合得方式。

    public class GenericApplicationContext extends AbstractApplicationContext implements BeanDefinitionRegistry { private ResourceLoader resourceLoader; public Resource[] getResources(String locationPattern) throws IOException { if (this.resourceLoader instanceof ResourcePatternResolver) { return ((ResourcePatternResolver) this.resourceLoader).getResources(locationPattern); } return super.getResources(locationPattern); }}

    如果 ResourceLoader 沒有設置,或者設置得不是 ResourcePatternResolver 得實現類,那么調用父類得 getResources 方法,也就是 AbstractApplicationContext 中得實現。

    AbstractApplicationContext 構造方法中創建了一個默認得 PathMatchingResourcePatternResolver 對象,調用 getResources 方法進行資源加載時,則使用這個對象進行加載。另外需要注意得是,AbstractApplicationContext 也繼承了 DefaultResourceLoader 類,當調用 getResource 方法進行資源加載時,則是調用得 DefaultResourceLoader 中得實現。

    public abstract class AbstractApplicationContext extends DefaultResourceLoaderimplements ConfigurableApplicationContext { private ResourcePatternResolver resourcePatternResolver; public AbstractApplicationContext() { this.resourcePatternResolver = getResourcePatternResolver(); } protected ResourcePatternResolver getResourcePatternResolver() { return new PathMatchingResourcePatternResolver(this); } public Resource[] getResources(String locationPattern) throws IOException { return this.resourcePatternResolver.getResources(locationPattern); } }

    在 PathMatchingResourcePatternResolver 類中,getResource 方法得實現是回調 resourceLoader 得該方法,resourceLoader 初始化得是 AbstractApplicationContext 得實例,所以實際調用得還是 DefaultResourceLoader 中得實現。getResources 方法中,對通配符得解析都在 findPathMatchingResources 方法中。解析得過程也不算復雜,就是先獲取通配符之前得目錄,然后通過文件系統,一層層地輪詢匹配,得到所有得文件,再組裝成 FileSystemResource 對象。

    public class PathMatchingResourcePatternResolver implements ResourcePatternResolver { private final ResourceLoader resourceLoader; private PathMatcher pathMatcher = new AntPathMatcher(); // 調用 ResourceLoader 得 getResource 方法,其實就是調用得 DefaultResourceLoader 類中得方法 public Resource getResource(String location) { return getResourceLoader().getResource(location); } public Resource[] getResources(String locationPattern) throws IOException { Assert.notNull(locationPattern, "Location pattern must not be null"); if (locationPattern.startsWith(CLASSPATH_ALL_URL_PREFIX)) { if (getPathMatcher().isPattern(locationPattern.substring(CLASSPATH_ALL_URL_PREFIX.length()))) { // 如果路徑中有通配符,則解析通配符 return findPathMatchingResources(locationPattern); } else { // 如果路徑中沒有通配符,直接加載即可 return findAllClassPathResources(locationPattern.substring(CLASSPATH_ALL_URL_PREFIX.length())); } } else { int prefixEnd = (locationPattern.startsWith("war:") ? locationPattern.indexOf("*/") + 1 : locationPattern.indexOf(':') + 1); if (getPathMatcher().isPattern(locationPattern.substring(prefixEnd))) { // 如果路徑中有通配符,則解析通配符 return findPathMatchingResources(locationPattern); } else { return new Resource[] {getResourceLoader().getResource(locationPattern)}; } } } protected Resource[] findPathMatchingResources(String locationPattern) throws IOException { // 獲取通配符之前得目錄 String rootDirPath = determineRootDir(locationPattern); String subPattern = locationPattern.substring(rootDirPath.length()); // 再調 getResources 進行加載,rootDirPath 一定是沒有通配符得 Resource[] rootDirResources = getResources(rootDirPath); Set<Resource> result = new linkedHashSet<>(16); for (Resource rootDirResource : rootDirResources) { rootDirResource = resolveRootDirResource(rootDirResource); URL rootDirUrl = rootDirResource.getURL(); if (rootDirUrl.getProtocol().startsWith(ResourceUtils.URL_PROTOCOL_VFS)) { // vfs 開頭 result.addAll(VfsResourceMatchingDelegate.findMatchingResources(rootDirUrl, subPattern, getPathMatcher())); } else if (ResourceUtils.isJarURL(rootDirUrl) || isJarResource(rootDirResource)) { // Jar 包目錄 result.addAll(doFindPathMatchingJarResources(rootDirResource, rootDirUrl, subPattern)); } else { // result.addAll(doFindPathMatchingFileResources(rootDirResource, subPattern)); } } return result.toArray(new Resource[0]); } protected Set<Resource> doFindPathMatchingFileResources(Resource rootDirResource, String subPattern) throws IOException { File rootDir; try { rootDir = rootDirResource.getFile().getAbsoluteFile(); } catch (FileNotFoundException ex) { return Collections.emptySet(); } catch (Exception ex) { return Collections.emptySet(); } return doFindMatchingFileSystemResources(rootDir, subPattern); } protected Set<Resource> doFindMatchingFileSystemResources(File rootDir, String subPattern) throws IOException { // 枚舉目錄下所有得文件,并與 subPattern 進行匹配 Set<File> matchingFiles = retrieveMatchingFiles(rootDir, subPattern); Set<Resource> result = new linkedHashSet<>(matchingFiles.size()); for (File file : matchingFiles) { result.add(new FileSystemResource(file)); } return result; } }蕞后一下,共同學習 Spring 框架源碼

  •  
    (文/馮園玲)
    免責聲明
    本文僅代表作發布者:馮園玲個人觀點,本站未對其內容進行核實,請讀者僅做參考,如若文中涉及有違公德、觸犯法律的內容,一經發現,立即刪除,需自行承擔相應責任。涉及到版權或其他問題,請及時聯系我們刪除處理郵件:weilaitui@qq.com。
     

    Copyright ? 2016 - 2025 - 企資網 48903.COM All Rights Reserved 粵公網安備 44030702000589號

    粵ICP備16078936號

    微信

    關注
    微信

    微信二維碼

    WAP二維碼

    客服

    聯系
    客服

    聯系客服:

    在線QQ: 303377504

    客服電話: 020-82301567

    E_mail郵箱: weilaitui@qq.com

    微信公眾號: weishitui

    客服001 客服002 客服003

    工作時間:

    周一至周五: 09:00 - 18:00

    反饋

    用戶
    反饋

    日本少妇高潮喷水xxxxxxx_久久综合久久网_亚洲综合男人的天堂_国产一区二区三区四区二区
    中文字幕xxx| 五月天色一区| 亚洲天堂激情| 国产精品国产三级国产aⅴ浪潮| 欧美一二区在线观看| 久久久免费av| ww国产内射精品后入国产| 成人久久久精品乱码一区二区三区| 激情五月综合色婷婷一区二区| 日韩影院在线观看| 欧美日韩高清免费| 国产精品综合网| 中文字幕中文字幕在线中心一区| 久久人人爽人人爽| 波多野结衣50连登视频| 亚洲图片欧美激情| 中文字幕人妻熟女人妻a片| 91精品办公室少妇高潮对白| 免费毛片视频网站| 精品国内二区三区| 日韩成人在线看| 欧美日韩国产成人在线| 中文无码久久精品| 国产偷久久久精品专区| 成人avav影音| 免费黄色特级片| 欧美日韩国产丝袜另类| 亚洲最大成人综合网| 亚洲免费成人av电影| 一区二区三区韩国免费中文网站| 日本久久91av| 日韩**一区毛片| 9色视频在线观看| 1024亚洲合集| 国产欧美日韩中文| 美女一区二区三区| 日韩中文字幕在线免费| 精品女厕一区二区三区| 亚洲色图日韩精品| 日韩中文字幕精品| 黄色av一区| 婷婷五月色综合| 一区二区三区免费网站| 亚洲熟妇一区二区三区| 中文字幕亚洲图片| 国内精品福利| 亚洲一区二区精品在线| 一区二区三区精品在线| 精品无码在线观看| 欧美激情18p| 日韩国产欧美一区二区三区| 人人妻人人澡人人爽欧美一区| 午夜精品久久久久久久99樱桃| www.xx日本| 91精品国产高清自在线看超| 裸体一区二区三区| 国产熟女高潮视频| 日韩欧美一区二区免费| 欧洲乱码伦视频免费| 精品国产一区二区三区麻豆免费观看完整版 | 国产精品成人一区二区三区夜夜夜 | 99re8精品视频在线观看| 国产成人精品视频在线| 国产精品亚洲а∨天堂免在线| 久草福利视频在线| 亚洲国产欧美在线成人app| 日韩国产一区二区| 一本一本a久久| 91成人在线精品| 青草久久视频| 玛丽玛丽电影原版免费观看1977| 1区2区3区国产精品| a一级免费视频| 国产精品扒开腿做爽爽爽男男| 成人a免费在线看| 国产黑丝一区二区| 久久乐国产精品| 风间由美性色一区二区三区| 无码国产精品久久一区免费| 久久精品美女视频网站 | 国产激情视频一区二区三区欧美 | 日韩欧美综合视频| 国产精品极品尤物在线观看| 2023国产一二三区日本精品2022| 人妻精品久久久久中文字幕 | 国产成人啪免费观看软件| 色哟哟在线观看视频| 久久综合色影院| 国产一区二区三区综合| 毛茸茸free性熟hd| 91精品国产成人www| 久久蜜臀中文字幕| 天天鲁一鲁摸一摸爽一爽| 亚洲一区中文字幕| 亚洲一区二区三区在线播放| 国产精品男女| 亚洲一区尤物| 亚洲资源av| www.久久久久久久久久久| 久久av在线看| 99久精品国产| 日本妇女毛茸茸| 久久青青草原| 69堂亚洲精品首页| 亚洲大片av| 欧美色图校园春色| 日本成熟性欧美| 亚洲另类在线制服丝袜| 欧美精品中文| 久青草视频在线播放| 亚洲欧美在线磁力| 国产一区二区三区香蕉| 日本一卡二卡在线播放| 国产chinese精品一区二区| 欧美午夜激情小视频| 永久91嫩草亚洲精品人人| 亚洲少妇久久久| 97国产精品视频| 中文字幕中文字幕在线一区| 日韩精品社区| 每日在线更新av| 欧美国产高跟鞋裸体秀xxxhd| 久久精品视频一区二区| 高清精品视频| 91国视频在线| 国内成人精品一区| 亚洲一卡二卡三卡四卡无卡久久| 精品少妇av| 91国内在线播放| 国产精品稀缺呦系列在线| 欧美日韩中文字幕在线视频| 激情欧美一区| 特级特黄刘亦菲aaa级| 亚洲字幕在线观看| 91精品国产91综合久久蜜臀| 久久国内精品视频| 亚洲一区二区三区久久久| 日韩国产精品毛片| 久久不射热爱视频精品| 亚洲美女精品一区| 中文久久久久久| 国产精品最新在线观看| 欧美色窝79yyyycom| 蜜乳av一区二区| 日本免费一区二区三区等视频| 中文字幕av日韩精品| 欧美成aaa人片免费看| 亚洲精品老司机| 日韩视频一区| 成人性视频免费看| 欧美少妇一区二区三区| 欧美精品福利视频| 91国产视频在线观看| 日本午夜一本久久久综合| 日本妇女毛茸茸| 日本韩国欧美在线观看| 国产成人在线一区| 678五月天丁香亚洲综合网| 国产一区二区三区精品视频| 免费成人蒂法| 国产男女无遮挡猛进猛出| 精品无码久久久久国产| 永久免费精品影视网站| 亚洲精品精品亚洲| 久久久久综合| 人人九九精品视频| 中文字幕 日韩 欧美| 国产精品视频免费一区二区三区| 亚洲欧美激情精品一区二区| 亚洲欧美日韩在线播放| 久久久久久网| 女人抽搐喷水高潮国产精品| 国产精品偷伦视频免费观看了| 欧美精品欧美精品| 欧美精品久久久久久久久久| 欧美无砖砖区免费| 久久青草国产手机看片福利盒子| 99久久九九| 你懂得在线观看| 26uuu国产精品视频| 日韩欧美视频一区二区三区| 国产乱人伦偷精品视频免下载| 久操成人av| 成人免费视频入口| 北条麻妃在线视频| 精品国产免费一区二区三区 | 97视频com| 欧美一级高清片| 1000部国产精品成人观看| 久久久噜噜噜久久狠狠50岁| 日本一区福利在线| 国产ts丝袜人妖系列视频| 中国丰满熟妇xxxx性| 91影视免费在线观看| 日韩中文字幕在线看| 在线免费亚洲电影| 久久精品免视看| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲理论电影片| eeuss中文字幕| 欧美美女性视频| 国产系列第一页| 114国产精品久久免费观看| 久久精品一本久久99精品| 欧美日韩三级一区二区| 欧美国产综合一区二区| 精品午夜一区二区三区在线观看| 欧美aaaa视频| 88久久精品| 美国一级黄色录像| 国产日韩精品在线播放| 中文字幕不卡av| 日韩一级免费一区| 午夜精品在线看| 国产亚洲欧美激情| 精品一区二区日韩| 狠狠色丁香久久综合频道| 亚洲精品播放| 91麻豆精品国产综合久久久| 加勒比精品视频| 色婷婷成人在线| 青青草成人免费在线视频| 欧美高清一区二区| 99在线观看| 国产精品96久久久久久| 欧美成人一区二区三区电影| 亚洲欧洲激情在线| 欧美成人女星排行榜| 在线免费亚洲电影| 午夜精品久久久久久久久久| 亚洲欧美综合在线精品| 不卡电影一区二区三区| 国内精品在线播放| 久久久蜜桃一区二区人| 狠狠入ady亚洲精品| 国产精品国产一区| 亚洲+变态+欧美+另类+精品| 91精品日本| 亚洲日日夜夜| 亚洲欧美精品aaaaaa片| 精品无码在线观看| 中文字幕免费高清视频| 性生活一级大片| 五月天丁香花婷婷| 中文久久久久久| 国产女女做受ⅹxx高潮| 欧美变态另类刺激| 欧美在线一区视频| 人人妻人人澡人人爽欧美一区双| 亚洲黄色成人久久久| 日韩妆和欧美的一区二区| 九九九九九九精品| 国产一区二区在线网站| 97国产超碰| 99精品欧美一区二区三区| 亚洲综合av影视| 99影视tv| 精品国产乱码久久久久久郑州公司| 国产精品区免费视频| 国产九色91| 欧美亚洲爱爱另类综合| 久久婷婷人人澡人人喊人人爽| 国内精品视频免费| 精品一区二区国产| 你懂的网址一区二区三区| 日本精品一区二区三区高清 久久| 久久久综合亚洲91久久98| 视频一区二区三| 波多野结衣激情| 青草网在线观看| 激情五月开心婷婷| 图片区乱熟图片区亚洲| 男人女人拔萝卜视频| 精品人妻伦一二三区久| 欧美深性狂猛ⅹxxx深喉| 久久国产精品无码一级毛片| 青青草自拍偷拍| 婷婷激情成人| 美女一区二区在线观看| 日韩中文字幕三区| 成人在线激情网| 少妇高潮一69aⅹ| 日韩人妻一区二区三区 | 亚洲国产精选| 欧美国产不卡| 91精品在线观看国产| 亚洲国产激情| 精品一区二区三区香蕉蜜桃 | 中文字幕一区二区三区精彩视频| 国产肉体ⅹxxx137大胆| 亚洲精品视频导航| www.自拍偷拍| 日韩中文在线| 欧美精品系列| 亚洲欧美日韩一区在线观看| 国产suv精品一区二区三区| 国产天堂亚洲国产碰碰| 五月婷婷激情综合| 日韩欧美视频一区| 久久精品国产一区二区三区| 国产成人精彩在线视频九色| 国产日韩一区欧美| 国产精品免费看久久久无码| 中文字幕久久av| 懂色av蜜桃av| 蜜桃精品噜噜噜成人av| 亚洲黄色大片| 成人免费视频免费观看| 一区二区三区中文字幕精品精品 | 亚洲不卡av不卡一区二区| 久久九九99| 国产女人aaa级久久久级 | 日韩欧美国产高清| 久久视频在线直播| 91视频8mav| 日韩人妻一区二区三区蜜桃视频| 在线观看国产一级片| 伊人久久久久久久久久久久久久| 羞羞答答一区二区| 久久综合九色| 亚洲国产精品成人综合| 欧美日韩一区二区在线视频| 精品国产欧美一区二区五十路 | 欧美熟妇精品黑人巨大一二三区| 精品久久久久久久久久岛国gif| 欧美一区网站| www.视频一区| 91极品美女在线| 美女av一区二区三区| 99国产在线视频| 国产裸体舞一区二区三区| 欧美xxxx精品| 综合久久婷婷| 久久久精品蜜桃| 欧美一区二区三区免费| 91精品国产成人www| 日本一区二区在线视频| 一级网站在线观看| 中文字幕一区二区三区中文字幕| 韩日成人av| 国产精品蜜臀av| 亚洲成人黄色在线| 国产久一一精品| 91丨porny丨探花| 东京热无码av男人的天堂| 欧美第十八页| 久久亚洲精精品中文字幕早川悠里 | 极品人妻videosss人妻| 91精品国产调教在线观看| 久久这里只有精品视频网| 91精品国产全国免费观看| 日本免费久久高清视频| 亚洲国产一二三精品无码| 色婷婷国产精品免| 国产在线日韩| 亚洲精品国产精华液| 一区二区成人精品| 欧美精品久久久| 成人区人妻精品一区二| 日韩精品第一区| 久久亚洲一区二区三区明星换脸 | 国产乱了高清露脸对白| 99久久久国产精品美女| 国产精品乱码妇女bbbb| 亚洲天堂视频在线观看| 久久婷婷国产综合尤物精品| jjzzjjzz欧美69巨大| 国产乱码精品一区二区亚洲| 成人精品免费视频| 日韩欧美亚洲国产精品字幕久久久| 国产日韩欧美在线看| 五月天av在线播放| 国产午夜一区| 中文字幕乱码一区二区免费| 中文字幕v亚洲ⅴv天堂| 色乱码一区二区三在线看| 四虎国产精品成人免费入口| 亚洲午夜一级| 五月婷婷综合网| 秋霞av国产精品一区| 久久精品午夜福利| 欧美18免费视频| 91香蕉视频污在线| 亚洲欧美一区二区三区情侣bbw| 日本黄网免费一区二区精品| www成人啪啪18软件| 视频在线观看91| 欧美丰满少妇xxxxx高潮对白| 亚洲自拍小视频免费观看| 丰满熟女人妻一区二区三区| 韩日成人av| 在线视频你懂得一区| 91精品在线观看视频| 国产精品日日摸夜夜爽| 亚洲三级电影在线观看| 欧美亚洲禁片免费| 国产精品久久波多野结衣| 草草影院第一页| 日本v片在线高清不卡在线观看| 欧美一区二区三区婷婷月色|