日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring源码解析(二)BeanDefinition的Resource定位

發布時間:2023/12/20 javascript 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring源码解析(二)BeanDefinition的Resource定位 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?  IOC容器的初始化過程主要包括BeanDefinition的Resource定位、載入和注冊。在實際項目中我們基本上操作的都是ApplicationContex的實現,我們比較熟悉的ClassPathXmlApplicationContext、FileSystemXmlApplicationContext、XmlWebapplicationContext等。ApplicationContext的具體繼承體系如下圖所示:

  

?  其實,不管是XmlWebApplicationContext還是ClasspathXmlApplicationContext 他們的區別只是Bean的資源信息來源不一樣而已,最終都會解析為統一數據結構BeanDefinition。

下面我們源碼的解析就從高富帥的ClassPathXmlApplicationContext開始。

ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("classpath*:test.xml");

構造方法:

/*** Create a new ClassPathXmlApplicationContext, loading the definitions* from the given XML file and automatically refreshing the context.* @param configLocation resource location* @throws BeansException if context creation failed*/public ClassPathXmlApplicationContext(String configLocation) throws BeansException {this(new String[] {configLocation}, true, null);}

最終調用構造方法:

/*** Create a new ClassPathXmlApplicationContext with the given parent,* loading the definitions from the given XML files.* @param configLocations array of resource locations* @param refresh whether to automatically refresh the context,* loading all bean definitions and creating all singletons.* Alternatively, call refresh manually after further configuring the context.* @param parent the parent context* @throws BeansException if context creation failed* @see #refresh()*/public ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent)throws BeansException {super(parent);setConfigLocations(configLocations);if (refresh) {refresh();}}

1.設置父級上下文,最終是給AbstractApplicationContext的parent屬性賦值,AbstractApplicationContext是ApplicationContext最頂層的實現類。

2.設置XML文件的位置,調用了AbstractRefreshableConfigApplicationContext的setConfigLocations方法

/*** Set the config locations for this application context.* <p>If not set, the implementation may use a default as appropriate.*/public void setConfigLocations(String[] locations) {if (locations != null) {Assert.noNullElements(locations, "Config locations must not be null");this.configLocations = new String[locations.length];for (int i = 0; i < locations.length; i++) {this.configLocations[i] = resolvePath(locations[i]).trim();}}else {this.configLocations = null;}}

3.刷新容器,調用了AbstractApplicationContext的refresh方法,這是一個模板方法,具體的操作都是有子類去實現的。

public void refresh() throws BeansException, IllegalStateException {synchronized (this.startupShutdownMonitor) {// Prepare this context for refreshing.//刷新容器前的準備工作 prepareRefresh();// Tell the subclass to refresh the internal bean factory.//由子類實現容器的刷新(重啟)ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();// Prepare the bean factory for use in this context./*容器使用前的準備工作*/prepareBeanFactory(beanFactory);try {// Allows post-processing of the bean factory in context subclasses.//甚至beanFacotry的后置處理 postProcessBeanFactory(beanFactory);// Invoke factory processors registered as beans in the context.//調用BeanFactory的后置處理器,這些后置處理是在Bean定義中想容器注冊的 invokeBeanFactoryPostProcessors(beanFactory);// Register bean processors that intercept bean creation.//注冊Bean的后置處理器,在Bean的創建過程中調用 registerBeanPostProcessors(beanFactory);// Initialize message source for this context.//對上下文中的消息源進行初始化 initMessageSource();// Initialize event multicaster for this context.//初始化上下文的事件 initApplicationEventMulticaster();// Initialize other special beans in specific context subclasses.//初始化其他特殊的Bean onRefresh();// Check for listener beans and register them.//向容器注冊監聽Bean registerListeners();// Instantiate all remaining (non-lazy-init) singletons.//實例化所有非延遲加載的Bean finishBeanFactoryInitialization(beanFactory);// Last step: publish corresponding event.//發布容器事件,結束refresh過程 finishRefresh();}catch (BeansException ex) {logger.warn("Exception encountered during context initialization - cancelling refresh attempt", ex);// Destroy already created singletons to avoid dangling resources. destroyBeans();// Reset 'active' flag. cancelRefresh(ex);// Propagate exception to caller.throw ex;}}} prepareRefresh():主要是設置啟動時間、狀態等等;
我們著重看一下刷新容器的obtainFreshBeanFactory()方法: /*** Tell the subclass to refresh the internal bean factory.* @return the fresh BeanFactory instance* @see #refreshBeanFactory()* @see #getBeanFactory()*/protected ConfigurableListableBeanFactory obtainFreshBeanFactory() {//銷毀已有容器,重新創建容器并加載Bean refreshBeanFactory();ConfigurableListableBeanFactory beanFactory = getBeanFactory();if (logger.isDebugEnabled()) {logger.debug("Bean factory for " + getDisplayName() + ": " + beanFactory);}return beanFactory;} AbstractApplicationConetxt的refreshBeanFactory()方法是一個抽象方法,是由它的子類AbstractRefreshableApplicationContext實現的,從類的命名上可以看出這個類主要就是進行容器Refresh用的。
/*** This implementation performs an actual refresh of this context's underlying* bean factory, shutting down the previous bean factory (if any) and* initializing a fresh bean factory for the next phase of the context's lifecycle.*/@Overrideprotected final void refreshBeanFactory() throws BeansException {//如果容器已經存在則銷毀容器中的bean并關閉容器if (hasBeanFactory()) {destroyBeans();closeBeanFactory();}try {//創建beanFacotryDefaultListableBeanFactory beanFactory = createBeanFactory();beanFactory.setSerializationId(getId());customizeBeanFactory(beanFactory);//根據bean定義的方式(XML、注解等)不同,由子類選擇相應的BeanDefinitionReader去解析 loadBeanDefinitions(beanFactory);synchronized (this.beanFactoryMonitor) {this.beanFactory = beanFactory;}}catch (IOException ex) {throw new ApplicationContextException("I/O error parsing bean definition source for " + getDisplayName(), ex);}}

第一步: 這個方法會判斷如果已存在容器,則先銷毀所有的Bean并且關閉容器,這也是為了保證容器的唯一性。

第二步:createBeanFactory()創建了一個DefaultListableBeanFactory,這個類是BeanFacotry最高級的實現,有了它就有個容器最基本的功能了。

/*** Create an internal bean factory for this context.* Called for each {@link #refresh()} attempt.* <p>The default implementation creates a* {@link org.springframework.beans.factory.support.DefaultListableBeanFactory}* with the {@linkplain #getInternalParentBeanFactory() internal bean factory} of this* context's parent as parent bean factory. Can be overridden in subclasses,* for example to customize DefaultListableBeanFactory's settings.* @return the bean factory for this context* @see org.springframework.beans.factory.support.DefaultListableBeanFactory#setAllowBeanDefinitionOverriding* @see org.springframework.beans.factory.support.DefaultListableBeanFactory#setAllowEagerClassLoading* @see org.springframework.beans.factory.support.DefaultListableBeanFactory#setAllowCircularReferences* @see org.springframework.beans.factory.support.DefaultListableBeanFactory#setAllowRawInjectionDespiteWrapping*/protected DefaultListableBeanFactory createBeanFactory() {//新建一個DefaultListableBeanFactoryreturn new DefaultListableBeanFactory(getInternalParentBeanFactory());}

?DefaultListableBeanFactory的繼承關系:

我們看到DefaultListableBeanFactory實現了BeanDefinitionRegistry接口,也就是說最終BeanDefinition的注冊工作是由它和它的子類來完成的。

第三步:loadBeanDefinitions(beanFactory),這個方法也是一個抽象方法。因為Bean定義方式不同(XML、注解等),會有多個子類分別去實現具體的解析。

此處,調用的是AbstractXmlApplicationContext的實現:

/*** Loads the bean definitions via an XmlBeanDefinitionReader.* @see org.springframework.beans.factory.xml.XmlBeanDefinitionReader* @see #initBeanDefinitionReader* @see #loadBeanDefinitions*/@Overrideprotected void loadBeanDefinitions(DefaultListableBeanFactory beanFactory) throws BeansException, IOException {// Create a new XmlBeanDefinitionReader for the given BeanFactory.XmlBeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader(beanFactory);// Configure the bean definition reader with this context's// resource loading environment.beanDefinitionReader.setEnvironment(this.getEnvironment());//ApplicationContext繼承了ResourceLoader接口,所以this是可以直接使用的beanDefinitionReader.setResourceLoader(this);beanDefinitionReader.setEntityResolver(new ResourceEntityResolver(this));// Allow a subclass to provide custom initialization of the reader,// then proceed with actually loading the bean definitions. initBeanDefinitionReader(beanDefinitionReader);//委派模式,具體事情委派給beanDefinitionReader去做 loadBeanDefinitions(beanDefinitionReader);}

?進入loadBeanDefinitions(XmlBeanDefinitionReader reader):

/*** Load the bean definitions with the given XmlBeanDefinitionReader.* <p>The lifecycle of the bean factory is handled by the {@link #refreshBeanFactory}* method; hence this method is just supposed to load and/or register bean definitions.* @param reader the XmlBeanDefinitionReader to use* @throws BeansException in case of bean registration errors* @throws IOException if the required XML document isn't found* @see #refreshBeanFactory* @see #getConfigLocations* @see #getResources* @see #getResourcePatternResolver*/protected void loadBeanDefinitions(XmlBeanDefinitionReader reader) throws BeansException, IOException {Resource[] configResources = getConfigResources();if (configResources != null) {reader.loadBeanDefinitions(configResources);}String[] configLocations = getConfigLocations();if (configLocations != null) {reader.loadBeanDefinitions(configLocations);}}

?

該方法調用了XmlBeanDefinitionReader父類AbstractBeanDefinitionReader的loadBeanDefinitions方法:

public int loadBeanDefinitions(String... locations) throws BeanDefinitionStoreException {Assert.notNull(locations, "Location array must not be null");int counter = 0;for (String location : locations) {counter += loadBeanDefinitions(location);}return counter;}

?

l循環加載location并返回加載個數,最終調用了本類的loadBeanDefinitions(String location, Set<Resource> actualResources)方法,actualResources為null:

/*** Load bean definitions from the specified resource location.* <p>The location can also be a location pattern, provided that the* ResourceLoader of this bean definition reader is a ResourcePatternResolver.* @param location the resource location, to be loaded with the ResourceLoader* (or ResourcePatternResolver) of this bean definition reader* @param actualResources a Set to be filled with the actual Resource objects* that have been resolved during the loading process. May be {@code null}* to indicate that the caller is not interested in those Resource objects.* @return the number of bean definitions found* @throws BeanDefinitionStoreException in case of loading or parsing errors* @see #getResourceLoader()* @see #loadBeanDefinitions(org.springframework.core.io.Resource)* @see #loadBeanDefinitions(org.springframework.core.io.Resource[])*/public int loadBeanDefinitions(String location, Set<Resource> actualResources) throws BeanDefinitionStoreException {ResourceLoader resourceLoader = getResourceLoader();if (resourceLoader == null) {throw new BeanDefinitionStoreException("Cannot import bean definitions from location [" + location + "]: no ResourceLoader available");}//resourceLoader是ClasspathXmlApplicationContext,ApplicationContext接口本身繼承了ResourcePatternResolver接口if (resourceLoader instanceof ResourcePatternResolver) {// Resource pattern matching available.try {//location轉為Resource完成定位工作Resource[] resources = ((ResourcePatternResolver) resourceLoader).getResources(location);int loadCount = loadBeanDefinitions(resources);if (actualResources != null) {for (Resource resource : resources) {actualResources.add(resource);}}if (logger.isDebugEnabled()) {logger.debug("Loaded " + loadCount + " bean definitions from location pattern [" + location + "]");}return loadCount;}catch (IOException ex) {throw new BeanDefinitionStoreException("Could not resolve bean definition resource pattern [" + location + "]", ex);}}else {// Can only load single resources by absolute URL.Resource resource = resourceLoader.getResource(location);int loadCount = loadBeanDefinitions(resource);if (actualResources != null) {actualResources.add(resource);}if (logger.isDebugEnabled()) {logger.debug("Loaded " + loadCount + " bean definitions from location [" + location + "]");}return loadCount;}} Resource[] resources = ((ResourcePatternResolver) resourceLoader).getResources(location)將location轉成了Resource[],這一步完成了資源的定位工作。
它調用了PathMatchingResourcePatternResolver的getResources方法: 1 public Resource[] getResources(String locationPattern) throws IOException { 2 Assert.notNull(locationPattern, "Location pattern must not be null"); 3 //是否以classpath*:開頭 4 if (locationPattern.startsWith(CLASSPATH_ALL_URL_PREFIX)) { 5 // a class path resource (multiple resources for same name possible) 6 //是否為Ant-style路徑 7 //? 匹配任何單字符 8 //* 匹配0或者任意數量的字符 9 //** 匹配0或者更多的目錄 10 if (getPathMatcher().isPattern(locationPattern.substring(CLASSPATH_ALL_URL_PREFIX.length()))) { 11 // a class path resource pattern 12 return findPathMatchingResources(locationPattern); 13 } 14 else { 15 // all class path resources with the given name 16 return findAllClassPathResources(locationPattern.substring(CLASSPATH_ALL_URL_PREFIX.length())); 17 } 18 } 19 else { 20 // Only look for a pattern after a prefix here 21 // (to not get fooled by a pattern symbol in a strange prefix). 22 int prefixEnd = locationPattern.indexOf(":") + 1; 23 if (getPathMatcher().isPattern(locationPattern.substring(prefixEnd))) { 24 // a file pattern 25 return findPathMatchingResources(locationPattern); 26 } 27 else { 28 // a single resource with the given name 29 return new Resource[] {getResourceLoader().getResource(locationPattern)}; 30 } 31 } 32 }

?

?根據location寫法,解析方式也不同:

1、前綴為classpath*

  1)文件路徑路徑中包含*和?

    調用findPathMatchingResources方法

  2)文件路徑中不含*和?

    調用findAllClassPathResources方法

2.、前綴為classpath

  1)文件路徑路徑中包含*和?

  調用findPathMatchingResources方法
 2)文件路徑中不含*和?
  調用DefaultResourceLoader的getResource方法new一個ClasspathResource并返回,如果資源文件根本就不存在,此處也不會校驗。 findPathMatchingResources和findAllClassPathResources具體都干了什么呢?
先看一下findAllClassPathResources: /*** Find all class location resources with the given location via the ClassLoader.* @param location the absolute path within the classpath* @return the result as Resource array* @throws IOException in case of I/O errors* @see java.lang.ClassLoader#getResources* @see #convertClassLoaderURL*/protected Resource[] findAllClassPathResources(String location) throws IOException {String path = location;if (path.startsWith("/")) {path = path.substring(1);}ClassLoader cl = getClassLoader();Enumeration<URL> resourceUrls = (cl != null ? cl.getResources(path) : ClassLoader.getSystemResources(path));Set<Resource> result = new LinkedHashSet<Resource>(16);while (resourceUrls.hasMoreElements()) {URL url = resourceUrls.nextElement();result.add(convertClassLoaderURL(url));}return result.toArray(new Resource[result.size()]);}

protected Resource convertClassLoaderURL(URL url) {
return new UrlResource(url);
} 這個方法很簡單,根據具體的location通過classLoader的getResources方法返回RUL集合,根據URL創建UrlResource并返回UrlResource的集合。 再來看一下findPathMatchingResources方法: /*** Find all resources that match the given location pattern via the* Ant-style PathMatcher. Supports resources in jar files and zip files* and in the file system.* @param locationPattern the location pattern to match* @return the result as Resource array* @throws IOException in case of I/O errors* @see #doFindPathMatchingJarResources* @see #doFindPathMatchingFileResources* @see org.springframework.util.PathMatcher*/protected Resource[] findPathMatchingResources(String locationPattern) throws IOException {String rootDirPath = determineRootDir(locationPattern);String subPattern = locationPattern.substring(rootDirPath.length());Resource[] rootDirResources = getResources(rootDirPath);Set<Resource> result = new LinkedHashSet<Resource>(16);for (Resource rootDirResource : rootDirResources) {rootDirResource = resolveRootDirResource(rootDirResource);if (rootDirResource.getURL().getProtocol().startsWith(ResourceUtils.URL_PROTOCOL_VFS)) {result.addAll(VfsResourceMatchingDelegate.findMatchingResources(rootDirResource, subPattern, getPathMatcher()));}else if (isJarResource(rootDirResource)) {result.addAll(doFindPathMatchingJarResources(rootDirResource, subPattern));}else {result.addAll(doFindPathMatchingFileResources(rootDirResource, subPattern));}}if (logger.isDebugEnabled()) {logger.debug("Resolved location pattern [" + locationPattern + "] to resources " + result);}return result.toArray(new Resource[result.size()]);} 1.String rootDirPath = determineRootDir(locationPattern),獲取location前綴classpath*/classpath
2.Resource[] rootDirResources = getResources(rootDirPath),調用的上面講到的getResources方法,返回classpath根路徑的Resource[],如果是classpath會返回一個Resource,
如果是classpath*會放回所有的classpath路徑。
3.遍歷根路徑Resource[],doFindPathMatchingFileResources方法就是獲取給定路徑下的所有文件,根據指定的文件名test*.xml去模糊匹配,返回的是FileSystemResource。所以location為classpath:test*.xml可能會找不到文件。

?

?

?



轉載于:https://www.cnblogs.com/monkey0307/p/8436134.html

總結

以上是生活随笔為你收集整理的Spring源码解析(二)BeanDefinition的Resource定位的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产亚洲午夜高清国产拍精品 | 国产精品久久99综合免费观看尤物 | 日韩一级理论片 | 又黄又爽又无遮挡的视频 | 久久天堂网站 | 亚洲尺码电影av久久 | 中文字幕文字幕一区二区 | 欧美俄罗斯性视频 | 91av成人| 成人中文字幕+乱码+中文字幕 | 中文字幕一区三区 | 国产精品久久精品 | 久久久精华网 | 免费看黄在线观看 | 亚洲精品99| 一区二区观看 | 在线免费成人 | 粉嫩av一区二区三区四区 | 久久久久免费网 | 久亚洲 | 精品国产一区二区三区四 | 久草青青在线观看 | 国产999免费视频 | 97香蕉久久超级碰碰高清版 | 日本精品视频在线观看 | 日日久视频 | 日韩精品欧美一区 | 久久观看最新视频 | 九九热视频在线播放 | 午夜视频在线观看欧美 | 少妇性bbb搡bbb爽爽爽欧美 | 99精品区 | 五月综合激情婷婷 | 超碰在线个人 | 99r在线播放| 91自拍视频在线观看 | 亚洲美女精品视频 | 91视频免费网站 | 国产成人在线免费观看 | 五月天久久精品 | 成人教育av| 国产精品色 | 蜜桃视频精品 | 日韩理论片在线观看 | 日韩精品一区二区不卡 | 日韩欧美在线观看一区二区 | 娇妻呻吟一区二区三区 | 国产精品免费在线视频 | 午夜色婷婷 | 不卡视频在线看 | 免费观看91视频 | 精品日韩在线 | 日韩激情片在线观看 | 欧美视频不卡 | 久黄色 | 黄色1级毛片 | 一级黄色片在线免费观看 | japanese黑人亚洲人4k | 三级免费黄 | 又黄又爽的免费高潮视频 | 中文字幕免费观看视频 | 国产视频精品视频 | 成年人在线观看 | 91污视频在线 | 天堂在线v| 亚洲成人精品久久 | 在线国产视频一区 | 成人性生爱a∨ | 国产精品一区二区三区在线 | 黄色片免费电影 | 中文高清av | 亚洲精品国产视频 | 国产亚洲午夜高清国产拍精品 | www.大网伊人 | 99久久一区 | 国色天香在线 | 国产精品黄色 | 日韩免费小视频 | 欧美va天堂在线电影 | 99国产成+人+综合+亚洲 欧美 | 福利片视频区 | 日韩免费观看视频 | 最新成人在线 | 日韩高清观看 | 五月婷在线观看 | 国产精品色视频 | 日韩网站免费观看 | 国产盗摄精品一区二区 | 成人av av在线| 亚洲午夜av电影 | 伊人官网 | 激情开心站 | 国内精品久久久久久久影视简单 | 日本色小说视频 | 99久久99久久免费精品蜜臀 | 久久成 | 五月丁色 | 中文字幕 第二区 | 午夜美女福利 | 国偷自产中文字幕亚洲手机在线 | 免费国产ww | 99精品国自产在线 | 欧美性天天| 国产第一页福利影院 | 超碰公开97 | 国产精品二区在线 | 国产中文字幕视频 | 在线视频 国产 日韩 | 91大神在线观看视频 | 日韩久久网站 | 亚洲永久精品在线 | 国产伦精品一区二区三区无广告 | 欧美成人在线免费观看 | 麻花豆传媒mv在线观看网站 | 欧美欧美 | 99在线视频免费观看 | 在线免费观看麻豆视频 | 五月天丁香视频 | 天天干天天色2020 | 亚洲国产视频直播 | 在线观看av小说 | 久久电影中文字幕视频 | 久久一区二区免费视频 | 黄色特级一级片 | www色com| 欧美黄色特级片 | 99久久这里有精品 | 天天综合网 天天 | 欧美亚洲成人xxx | 亚州视频在线 | 看片在线亚洲 | 国产精品99久久久久久宅男 | 在线观看完整版免费 | 精品久久久久久一区二区里番 | a久久久久久 | 黄色国产在线观看 | 青青河边草免费 | 91av观看 | 国产黄色片在线 | 国产精品 久久 | 毛片随便看 | 日韩高清免费在线 | 婷婷成人在线 | 日韩在线免费电影 | 亚洲精品永久免费视频 | 伊甸园永久入口www 99热 精品在线 | 国产玖玖精品视频 | 欧美a性| 日女人电影| 激情五月五月婷婷 | 日韩在线电影 | 精品国产一区二区久久 | 亚洲成人免费在线 | 亚洲视频免费在线观看 | 91九色蝌蚪在线 | 久久伊人精品一区二区三区 | 亚洲国产片色 | 天天看天天干 | 中文字幕 国产精品 | 69av在线播放| wwxxxx日本 | 91 在线视频 | 在线免费观看国产精品 | 韩国中文三级 | 黄色亚洲大片免费在线观看 | 91精品久久香蕉国产线看观看 | 久热av| www.色午夜,com | 国产香蕉97碰碰碰视频在线观看 | 天天操狠狠操网站 | 极品嫩模被强到高潮呻吟91 | 在线天堂8√ | 中文乱码视频在线观看 | 午夜精选视频 | 久久999久久 | 伊人天堂网| 日韩免费在线观看视频 | av专区在线 | 黄色av一区二区 | 欧美色图亚洲图片 | 在线免费黄色 | 日韩专区视频 | 91精品爽啪蜜夜国产在线播放 | 国产日韩视频在线观看 | 日韩精品在线免费观看 | 日本二区三区在线 | 中日韩在线视频 | 欧美久久久久久久久中文字幕 | 亚洲精品久久久久久国 | 久久夜av | 国产免费区 | 日日干干夜夜 | 久久久免费少妇 | 日本一区二区三区视频在线播放 | 亚洲视频在线免费观看 | 国产精品18久久久久久久久久久久 | 中文乱码视频在线观看 | 成人午夜影院 | 日韩成人在线一区二区 | 日韩精品一区二区久久 | 国产亚洲精品久久久久久大师 | 911精品视频 | 欧美一区二区在线免费观看 | 亚洲欧美精品一区二区 | 欧美日韩在线播放一区 | 摸bbb搡bbb搡bbbb | 日韩高清不卡一区二区三区 | 久久久一本精品99久久精品66 | 99在线精品视频观看 | 国产一区免费 | 天天激情天天干 | 天天插天天干天天操 | 欧美特一级 | 在线看小早川怜子av | 午夜视频在线观看一区二区三区 | 黄色天堂在线观看 | 欧美男女爱爱视频 | 人人干人人添 | 成人97人人超碰人人99 | 午夜黄色一级片 | 男女拍拍免费视频 | 日本中文字幕在线免费观看 | 成人看片 | 精品亚洲免费 | 久久超级碰视频 | 国产精品久久久久久久久久久久午夜 | 在线看国产一区 | 日韩精品免费在线 | 欧美在线视频日韩 | www.夜夜操.com| 成年人国产精品 | 中文字幕在线不卡国产视频 | 免费的黄色av | 成人久久18免费网站 | 久久精选视频 | 国产精品青青 | 天堂av在线网 | 欧美日韩免费在线视频 | 99热精品在线观看 | 黄污网| 午夜国产一区二区三区四区 | 日韩高清免费在线观看 | 91精品国产一区二区三区 | 国产999精品视频 | 久久综合五月天婷婷伊人 | 日韩精品在线观看av | 亚洲免费黄色 | 一级片黄色片网站 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 又黄又刺激的视频 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 日韩视频精品在线 | 日本xxxxav | 国产美女视频一区 | 婷婷九月丁香 | 亚洲一区久久 | 久久久国产精品一区二区三区 | 五月婷婷六月丁香 | 国产98色在线 | 日韩 | 免费福利在线播放 | 亚洲人成人在线 | 在线a亚洲视频播放在线观看 | 五月婷婷中文 | 国产精品视频免费 | 色婷婷视频在线 | 在线免费91 | 久久久久久久免费看 | 久草在线免费资源站 | 久草视频一区 | 天天色影院 | 久久这里只有精品首页 | 亚洲伦理电影在线 | 午夜久操| 中文字幕在线视频精品 | 97超碰总站| 97电影院网 | 日韩免费一级电影 | 免费h精品视频在线播放 | 91精品国自产在线偷拍蜜桃 | 欧美日韩国产精品一区二区三区 | 精品美女久久久久 | 成人黄色免费在线观看 | 免费视频xnxx com | 国产视频在线观看免费 | 国产一区二区精品久久91 | 中文字幕免费久久 | 婷婷综合伊人 | 日韩黄色中文字幕 | 91最新在线视频 | 国产精品爽爽久久久久久蜜臀 | 久久国产美女视频 | 国产99免费视频 | 黄色www免费 | av在线网站免费观看 | 91漂亮少妇露脸在线播放 | 天天看天天干天天操 | 一区二区久久 | 91高清一区 | 成av人电影 | 久久99久久精品 | 国产一区播放 | 亚洲视频资源在线 | 欧美日本国产在线观看 | 人人爽人人干 | 激情黄色一级片 | 国产精品久久久久久久久久了 | 精品91在线 | 97视频精品| 日本aaaa级毛片在线看 | 国产精品一区二区吃奶在线观看 | 久久激情视频 久久 | 日韩av免费在线电影 | 久久综合综合久久综合 | 91香蕉视频在线下载 | 国产麻豆成人传媒免费观看 | 白丝av在线 | 成人在线观看影院 | 国产91电影在线观看 | 人人爱人人爽 | 成人欧美一区二区三区在线观看 | 91精品秘密在线观看 | 免费在线观看av网站 | 久久久九色精品国产一区二区三区 | 天天爽天天做 | 婷婷午夜天 | 婷婷亚洲最大 | 亚洲精品久久激情国产片 | www.精选视频.com | 中文伊人 | av免费看av | 国产 中文 日韩 欧美 | 午夜精品婷婷 | 一级α片免费看 | 福利久久 | 91av在线不卡 | 欧美性色综合 | 久久99欧美 | 久久国产色 | 在线观看国产中文字幕 | 91女子私密保健养生少妇 | 狠狠狠色丁香综合久久天下网 | 国产福利av在线 | 美女av在线免费 | 波多野结衣精品 | 国产+日韩欧美 | 亚洲精品伦理在线 | 国产九九热视频 | 亚洲女人天堂成人av在线 | 中文字幕在线播放第一页 | 久久成人免费 | 久久9999久久免费精品国产 | 91成人天堂久久成人 | 日韩久久在线 | 国产一线在线 | 亚洲劲爆av| 国产中文在线字幕 | 成年人国产视频 | 99久久婷婷国产一区二区三区 | 久久网址 | 婷婷综合久久 | 日日骑| 最新日韩精品 | 毛片激情永久免费 | 久久精品国产成人精品 | 91成人在线观看喷潮 | 亚洲成a人片77777潘金莲 | 欧美在线你懂的 | 久久精品爱爱视频 | 一区二区三区高清在线 | 欧美大片第1页 | 国产精品久久久久久久久久99 | 色婷婷久久一区二区 | a久久免费视频 | 香蕉色综合 | 日日干夜夜干 | 国产一区二区精品91 | 国产精品毛片久久久久久久久久99999999 | 久久丁香网 | 久久久久成人免费 | 日本黄色大片免费 | 久久久久久久久久影视 | 久久免费在线观看 | 国产精品久久久久久久电影 | 国产精品久久久久婷婷二区次 | 欧美性性网 | 天天做天天爱夜夜爽 | 国产这里只有精品 | 99亚洲精品视频 | 91精品久久久久 | 国产日韩欧美在线 | a特级毛片 | 日韩成人免费在线电影 | 超碰97.com| 99精品乱码国产在线观看 | 看av免费| 色婷婷在线视频 | 视频精品一区二区三区 | 99久久综合狠狠综合久久 | 国产69久久久 | 国产亚洲精品久久久久久无几年桃 | 五月婷婷视频在线观看 | 狠狠色丁香婷综合久久 | 黄色小网站免费看 | 99精品在线观看视频 | 黄色在线视频网址 | 97精品国产一二三产区 | 国产69精品久久久久99尤 | 色综合天天视频在线观看 | 91亚洲精品国产 | av免费网站观看 | 人人爽人人爽人人片 | 国产高清一级 | 激情综合网婷婷 | 日日夜夜天天 | 激情综合网天天干 | 黄色毛片一级片 | 欧美做受高潮 | 久久99热久久99精品 | 国产精品久久久久久久妇 | 黄p网站在线观看 | 黄色亚洲 | 免费在线观看成年人视频 | 成人一级免费电影 | a级国产乱理伦片在线观看 亚洲3级 | 亚洲一级片在线观看 | 狠狠色丁香婷婷综合 | 欧美日韩一区二区免费在线观看 | 亚洲伊人网在线观看 | 国产午夜精品免费一区二区三区视频 | 在线观看视频97 | 黄色一级免费电影 | 久久手机免费观看 | 激情综合中文娱乐网 | 97成人在线免费视频 | 欧美另类性| 成年人看片网站 | 国产一二三在线视频 | 深爱激情五月婷婷 | 国产一二三四在线视频 | 国产色区| 亚洲综合成人婷婷小说 | 久久国产亚洲 | 亚洲视频在线观看 | 天天操夜夜做 | 天天操天天综合网 | 91最新视频在线观看 | 日韩中文字幕免费在线观看 | 日本三级香港三级人妇99 | 99这里只有精品视频 | av网站有哪些| 国产高清在线精品 | 欧美一区免费在线观看 | 热久久免费国产视频 | 亚洲成人二区 | 色五月激情五月 | 黄色小说免费观看 | 午夜av一区 | 成年免费在线视频 | 精品免费一区二区三区 | 国产精品夜夜夜一区二区三区尤 | 久久人人爽人人 | www日| 98超碰在线 | 97超碰人人澡 | 日韩精品一区二区免费视频 | 黄色大片免费网站 | 在线观看黄色大片 | 久久免费视频2 | 久久久久99精品国产片 | 亚洲精品午夜久久久久久久久久久 | 91成人免费视频 | av视屏在线| 粉嫩一区二区三区粉嫩91 | 四虎国产精品成人免费影视 | 国产区精品视频 | www久久国产 | 91热视频在线观看 | 日韩a级黄色片 | 在线视频日韩 | 色婷婷88av视频一二三区 | 天天夜操 | 久久婷婷丁香 | 精品久久久久久久久久久院品网 | 激情伊人五月天 | www日韩欧美| 最新av免费在线观看 | 久久久久国产免费免费 | 国产二区视频在线观看 | 久精品视频 | 九九精品毛片 | 国产在线p | 98精品国产自产在线观看 | 精品日韩中文字幕 | 欧美一区二区日韩一区二区 | 久久婷婷五月综合色丁香 | 91在线日韩 | 日日躁夜夜躁xxxxaaaa | 欧美乱淫视频 | 色噜噜日韩精品欧美一区二区 | 手机看片福利 | a级国产乱理论片在线观看 特级毛片在线观看 | 久久综合导航 | 日韩av播放在线 | 97高清视频 | 黄色免费观看视频 | 天天色天天色天天色 | 91av视频在线免费观看 | 国产精品video爽爽爽爽 | 免费91麻豆精品国产自产在线观看 | 色婷婷久久久 | 九九在线高清精品视频 | a√天堂中文在线 | 天天综合网在线观看 | 五月天色站 | 久草在线免 | 日韩电影一区二区在线观看 | 精品国产视频在线 | 欧美男同视频网站 | 97麻豆视频| 99超碰在线播放 | 国内精品久久久久影院一蜜桃 | 国产成人精品一区二三区 | 九九电影在线 | 日本少妇高清做爰视频 | 一区二区毛片 | 开心丁香婷婷深爱五月 | 免费观看的黄色片 | 99视频+国产日韩欧美 | 国产精品9999久久久久仙踪林 | 五月婷婷在线视频观看 | 久久久久五月 | 粉嫩av一区二区三区四区 | 狠狠色丁香婷婷 | 久久精品99久久久久久2456 | 四虎影视成人永久免费观看视频 | 国产高清在线 | 日韩有码欧美 | 午夜91在线 | 开心婷婷色 | 中文字幕有码在线 | 欧美成人手机版 | 色大片免费看 | www.午夜色.com | 国内精品久久久久久久久久久 | 狠狠插天天干 | 九九热在线视频 | 开心激情综合网 | 久草视频在线免费 | 欧美色就是色 | 久久香蕉电影 | 日韩精品综合在线 | 日韩网站一区二区 | 免费观看一区二区 | 欧美久久久久久久久久久 | 午夜av影院 | 亚洲日韩中文字幕在线播放 | 69av免费视频 | 国产精品综合久久 | 欧美激情综合网 | 欧美日韩在线网站 | 在线视频你懂 | 青青草在久久免费久久免费 | 国产欧美精品一区二区三区四区 | 亚洲男男gaygay无套同网址 | 成人手机在线视频 | 久久久精选 | 亚洲精品动漫成人3d无尽在线 | 天天操天天干天天综合网 | 99精品欧美一区二区 | 99久久久久国产精品免费 | 2023天天干| 91麻豆文化传媒在线观看 | 国产精品一码二码三码在线 | 99视频导航 | 婷婷亚洲激情 | 国模精品一区二区三区 | 欧美国产大片 | 奇米网777| 日韩视频中文字幕 | 国产一区二区三区四区在线 | 最近中文字幕免费大全 | 日韩av在线免费播放 | 久草久草久草久草 | 黄色片视频在线观看 | 色 免费观看 | 91麻豆操 | 精品国产视频一区 | 爱干视频 | 日本字幕网 | 人成午夜视频 | 欧美色888 | 最近中文字幕在线中文高清版 | 欧美最猛性xxxxx免费 | 成人网444ppp| 在线观看国产日韩 | 久操视频在线免费看 | 亚洲成av人影片在线观看 | 午夜精品久久久久久久爽 | 久久香蕉影视 | 国产中文字幕大全 | 久草在线观 | 缴情综合网五月天 | 国产资源站 | 91九色在线视频 | 国产h片在线观看 | 日韩av一区二区三区在线观看 | 亚洲一级电影在线观看 | 欧美一级网站 | 日韩美女久久 | 色噜噜狠狠色综合中国 | 在线观看国产中文字幕 | 精品国产一区二区在线 | 国产中文 | 欧美日韩在线视频观看 | 青春草国产视频 | 久久五月天婷婷 | 亚洲激情在线视频 | 亚洲欧美一区二区三区孕妇写真 | 国内精品久久久久影院日本资源 | 69视频永久免费观看 | 国产一级h | 天天碰天天操 | 九九九在线 | 中国一区二区视频 | 九九热只有这里有精品 | av电影免费在线 | 一区二区三区国产欧美 | 91高清不卡 | 日日干夜夜爱 | 国产无限资源在线观看 | 色停停五月天 | 99精品在这里 | 国产福利在线 | 国产成人精品综合久久久久99 | 一区二区三区在线电影 | 狠狠操天天干 | 天天艹天天爽 | 91av久久 | 视频在线一区 | 在线91av| 日韩成人av在线 | 精品国偷自产在线 | 丁香五香天综合情 | 国产精品亚洲片在线播放 | 国产精品免费不卡 | av免费观看网站 | 国产视频一区二区在线播放 | 碰超在线 | 亚洲日本va在线观看 | 免费看av在线 | 色爱区综合激月婷婷 | 中文字幕一区三区 | 欧美精品久久久久久久 | 国产色一区| 成人av高清在线观看 | 一区二区精品在线观看 | 日日干天天操 | 国产精品第一 | 成人精品视频 | 天天操天天色天天射 | 国产99久久久精品 | 成人动漫精品一区二区 | 欧美性极品xxxx娇小 | 色噜噜狠狠狠狠色综合久不 | 热久久免费视频精品 | 国产精品久久久久久久久蜜臀 | 九草在线视频 | 一级黄色片在线观看 | 青草视频在线看 | 伊人久久精品久久亚洲一区 | 欧美性直播| 国产999精品久久久影片官网 | 亚洲精品午夜久久久久久久 | 午夜少妇一区二区三区 | 一级黄色大片 | 欧美精品在线观看免费 | 亚洲一级黄色大片 | 日本黄网站| 九九久久久久久久久激情 | 91丨九色丨蝌蚪丨老版 | 99久久精品免费看 | 人人澡人人草 | 日本黄色免费电影网站 | 国内视频在线观看 | 四虎国产视频 | 9999精品视频| 九九精品毛片 | 超碰在线人人爱 | 天天爱天天干天天爽 | 欧美一区二区在线免费观看 | 美女精品国产 | 日韩成人邪恶影片 | 久久精品韩国 | 久久国产精品一区二区三区四区 | 欧美91成人网 | 国产最顶级的黄色片在线免费观看 | 欧美aa在线 | 国内精品久久久久影院优 | 狠狠色丁香九九婷婷综合五月 | 黄色毛片观看 | 国产a精品 | 97免费中文视频在线观看 | 99免费观看视频 | 国产精品久久精品国产 | 91看片在线看片 | 婷婷色六月天 | www.天天色 | 免费看特级毛片 | 色综久久 | 国产精品无av码在线观看 | 夜夜爽88888免费视频4848 | 国产成人久久久77777 | 国产在线精品一区二区不卡了 | 黄色av影院| av中文字幕电影 | av在线一二三区 | 免费看的黄色网 | 欧洲一区二区在线观看 | 制服丝袜一区二区 | 中文日韩在线视频 | 亚洲精品视频网站在线观看 | 91成人亚洲 | 国产亚洲成av片在线观看 | 美女视频永久黄网站免费观看国产 | 午夜男人影院 | 精品久久久久久久久久久院品网 | 亚洲综合射 | 国产小视频在线观看 | 日韩综合第一页 | 午夜精品视频一区二区三区在线看 | 欧美另类xxxx| 色在线免费视频 | 久久免费片 | 国产黑丝一区二区三区 | 黄免费在线观看 | 狠狠色丁香婷婷综合最新地址 | 久久在线免费观看 | 免费男女网站 | 国产做爰视频 | 成人动漫精品一区二区 | 一区二区三区国 | 日韩一级片大全 | 日韩无在线 | 最新中文在线视频 | 成人黄色小视频 | 三级av中文字幕 | 在线观看日本韩国电影 | 91在线影视| 综合网天天 | 97视频在线免费播放 | 久久精品99北条麻妃 | 天天添夜夜操 | 免费91麻豆精品国产自产在线观看 | 日日久视频| 国产一区二区在线观看视频 | 国产小视频网站 | 麻豆视频91 | 久久综合9988久久爱 | 狠狠色丁香久久婷婷综 | 国产视频在线观看免费 | 亚洲乱码久久久 | av成人在线播放 | 美女国产精品 | 96在线| 91色国产| 91九色在线观看视频 | 日韩视频在线播放 | 国产在线观看黄 | 狠狠操狠狠干2017 | 亚州国产精品 | 国产不卡免费视频 | 久久9视频 | 日韩极品视频在线观看 | 97福利在线 | 久久影视一区 | 色婷婷综合五月 | 国产精品第一页在线观看 | 久久精品国产99国产 | 亚洲精品女人久久久 | 五月天狠狠操 | 91麻豆高清视频 | 国产在线播放一区 | 国产最新视频在线 | 久久久亚洲国产精品麻豆综合天堂 | 国产a高清 | 国产亚洲一区 | 99精品国产在热久久下载 | 国产一区二区高清视频 | 国产原创在线 | 免费精品视频 | 亚洲专区欧美专区 | 在线观看国产高清视频 | 欧美综合国产 | 久草视频在线免费播放 | 中文字幕色网站 | 日韩av一区二区在线影视 | 久久视频热 | 日韩免费视频在线观看 | 成人黄色电影在线 | 久久免费视频4 | 在线观看深夜视频 | 欧美 亚洲 另类 激情 另类 | 91av影视| 91精品久久久久久 | 国产精品久久三 | 一区二区精 | 日韩av电影手机在线观看 | 三级av在线播放 | 四虎国产视频 | 久久免费看毛片 | 激情片av| 91最新地址永久入口 | 在线 影视 一区 | 国产一线二线三线性视频 | 精品国模一区二区三区 | 欧美欧美 | 久久久久网站 | 成人免费视频在线观看 | 日本三级久久久 | 国产手机在线观看 | 日韩有码在线观看视频 | 欧美日韩中文在线观看 | 欧美日韩国产综合网 | 日韩电影在线观看中文字幕 | 国产黄色电影 | 国产精品手机视频 | 欧美日韩二区在线 | 日韩理论在线播放 | 亚洲在线网址 | 一级免费看| 国内外成人免费在线视频 | 天天射天天射 | 国产精品自产拍 | 狠狠干综合| 最近免费观看的电影完整版 | 久久久久久伊人 | 欧美激情综合五月色丁香 | 日韩视频一 | 亚洲丝袜一区二区 | 成人精品久久 | 国产精品wwwwww | 在线播放日韩av | 在线观看的av | 黄色一级片视频 | 国产一级电影网 | 午夜av免费在线观看 | 免费av电影网站 | 国产青春久久久国产毛片 | 国产一区二区综合 | 久久er99热精品一区二区三区 | 欧美日韩精品久久久 | 日本在线观看一区二区 | 久久久精品免费看 | 日日干天天 | 色婷婷激情四射 | 久草精品在线观看 | 国产成人一区二区啪在线观看 | 五月婷婷国产 | 日韩欧美一区二区在线播放 | 日韩久久精品一区二区三区下载 | 日韩在线视频网 | 亚州av免费 | 日韩中文字幕国产精品 | 人人爽久久涩噜噜噜网站 | 91在线精品播放 | 亚洲欧美视频在线播放 | 一区二区精品 | 丁香婷婷综合五月 | 伊人网av | 国产一区播放 | 五月综合激情网 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 久久av网址 | 欧美午夜性 | 97自拍超碰 | 91视频久久久 | 91成人精品一区在线播放69 | 美女黄濒| 日韩欧美成人网 | 91色九色| 亚洲国产中文在线 | 亚洲国产三级在线 | 四虎永久精品在线 | 不卡电影免费在线播放一区 | 一区二区三区精品在线视频 | 日韩精品观看 | 免费国产黄线在线观看视频 | 欧美日韩不卡在线视频 | 国产一区二区久久久久 | 久久艹艹 | 97精品在线| 99精品国产一区二区 | 国产日韩视频在线观看 | 深夜免费福利网站 | 91看片淫黄大片一级在线观看 | 国产精品一区二区三区免费视频 | 欧美日韩亚洲在线 | 国产资源精品在线观看 | 亚洲日本成人网 | 成人av日韩 | 综合网久久 | 91视频免费视频 | 久久久久电影网站 | 久久99热精品 | 中文字幕在线观看亚洲 | 一区二区三区精品久久久 | 天天干天天草天天爽 | 中文字幕在线人 | 成年人视频在线免费 | 美女禁18| 亚洲国产精品久久久 | 日日夜夜av | 国产老太婆免费交性大片 | 久久精品久久国产 | 色播五月激情五月 | 福利视频 | 亚洲三级网站 | 天天色综合天天 | 久久99热这里只有精品国产 | 99热九九这里只有精品10 | 国产精品美女久久久久久久网站 | 91av视频在线免费观看 | 日韩com| 色五丁香 | 成年人视频在线免费 | 国产精品一区二区三区在线免费观看 | 天天在线视频色 | 夜夜干夜夜 | 最新色站| 深爱激情亚洲 | 日韩电影中文字幕在线观看 | 婷婷丁香社区 | 一区二区三区动漫 | 久久久91精品国产一区二区精品 | 黄色亚洲 | 五月婷婷激情网 | 日韩在线看片 | 国产一区在线观看免费 | 国产精品porn| 最近2019好看的中文字幕免费 | 亚洲视频在线免费看 | 国产成人精品一区二三区 | 亚洲中字幕 | www.色婷婷| 免费男女羞羞的视频网站中文字幕 | a黄色大片 | 黄色毛片视频免费 | 手机看片1042 | 国产亚洲精品成人av久久ww | 国产精品免费一区二区三区在线观看 | 狠狠色丁香久久婷婷综合丁香 | 91视频中文字幕 | 久久久久久久久久久影视 | 高清中文字幕 | 国产区精品区 | 国产精品成人国产乱 | 日韩视频免费在线 | 天天视频色版 | 欧美专区日韩专区 | 欧美婷婷色 | 午夜精品久久久久久久久久 | 天天干天天射天天插 | 国产精品免费视频观看 | 在线观看一级视频 | 亚洲全部视频 | 啪一啪在线 | 少妇精69xxtheporn | 正在播放一区 | 日韩欧美在线中文字幕 | 婷婷视频在线观看 | 日韩中文字幕国产 | 久久影院精品 | 久草在线电影网 | www.亚洲精品在线 | 一区二区视频在线免费观看 | 天天操天天射天天舔 | 一级免费看 | www.神马久久 | 国产一区二区久久精品 | av电影不卡 | 国产午夜精品一区二区三区欧美 | 92国产精品久久久久首页 | 免费看av在线 | 97超碰人人爱| 97国产视频| 91成人精品一区在线播放69 | 天天射色综合 | 久久免费在线观看视频 | 在线看一区二区 | 天天插夜夜操 | 日韩午夜精品福利 | 91视视频在线直接观看在线看网页在线看 | 怡红院av久久久久久久 | 黄色毛片视频免费观看中文 | 久久99国产精品久久99 | 欧美激情视频一区二区三区免费 | 欧美国产在线看 | 国产成人三级三级三级97 |