精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Springboot啟動過程中的這個BeanPostProcessor,你知道干什么的嗎

開發 前端
本篇帶給大家MergedBeanDefinitionPostProcessor處理器的作用及MergedBeanDefinitionPostProcessor合并Bean定義處理器,該處理器有什么用處?通過源碼來查看具體的功能。

[[422514]]

環境:Springboot2.3.12RELEASE

主要內容:

MergedBeanDefinitionPostProcessor處理器的作用

MergedBeanDefinitionPostProcessor合并Bean定義處理器,該處理器有什么用處?通過源碼來查看具體的功能

這里從創建一個Bean實例開始說起。

1 環境準備

  1. @Component 
  2. public class PersonDAOImpl implements PersonDAO { 
  3.  
  4.     @Override 
  5.     public void save() { 
  6.         System.out.println("保存Person信息") ; 
  7.     } 
  8.  
  9. @Service 
  10. public class UsersService { 
  11.      
  12.     @Autowired 
  13.     private PersonDAO personDAO ; 
  14.      
  15.     public void saveUsers(Users users) { 
  16.         System.out.println("保存用戶信息") ; 
  17.     } 
  18.      

2 創建實例

  1. public abstract class AbstractAutowireCapableBeanFactory { 
  2.     protected Object doCreateBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) { 
  3.         BeanWrapper instanceWrapper = null
  4.         if (instanceWrapper == null) { 
  5.             instanceWrapper = createBeanInstance(beanName, mbd, args); 
  6.         } 
  7.         // Allow post-processors to modify the merged bean definition. 
  8.         synchronized (mbd.postProcessingLock) { 
  9.             if (!mbd.postProcessed) { 
  10.                 try { 
  11.                     // 在創建實例后調用MergedBeanDefinitionPostProcessor的postProcessMergedBeanDefinition方法 
  12.                     applyMergedBeanDefinitionPostProcessors(mbd, beanType, beanName); 
  13.                 } catch (Throwable ex) { 
  14.                 } 
  15.                 mbd.postProcessed = true
  16.             } 
  17.         } 
  18.     } 

3 執行合并Bean定義方法

  1. public abstract class AbstractAutowireCapableBeanFactory { 
  2.     protected void applyMergedBeanDefinitionPostProcessors(RootBeanDefinition mbd, Class<?> beanType, String beanName) { 
  3.         for (BeanPostProcessor bp : getBeanPostProcessors()) { 
  4.             if (bp instanceof MergedBeanDefinitionPostProcessor) { 
  5.                 MergedBeanDefinitionPostProcessor bdp = (MergedBeanDefinitionPostProcessor) bp; 
  6.                 bdp.postProcessMergedBeanDefinition(mbd, beanType, beanName); 
  7.             } 
  8.         } 
  9.     } 

在這里符合要求的BeanPostProcessor對象有:

CommonAnnotationBeanPostProcessor和AutowiredAnnotationBeanPostProcessor(這里值列出重點的兩個)Common這個主要處理:@PostConstruct和@PreDestroy及@Resource等相關的注解;Autowired主要處理的是:@Autowired和@Value及@Inject注解

上面的準備的類中在UserService中通過@Autowired注入了PersonDAO對象,所以這里我們主要是看下

AutowiredAnnotationBeanPostProcessor處理器。

4 處理執行

  1. public class AutowiredAnnotationBeanPostProcessor { 
  2.     private final Map<String, InjectionMetadata> injectionMetadataCache = new ConcurrentHashMap<>(256); 
  3.     private final Set<Class<? extends Annotation>> autowiredAnnotationTypes = new LinkedHashSet<>(4); 
  4.      
  5.     public AutowiredAnnotationBeanPostProcessor() { 
  6.         this.autowiredAnnotationTypes.add(Autowired.class); 
  7.         this.autowiredAnnotationTypes.add(Value.class); 
  8.         try { 
  9.             this.autowiredAnnotationTypes.add((Class<? extends Annotation>) 
  10.                     ClassUtils.forName("javax.inject.Inject", AutowiredAnnotationBeanPostProcessor.class.getClassLoader())); 
  11.             logger.trace("JSR-330 'javax.inject.Inject' annotation found and supported for autowiring"); 
  12.         } 
  13.         catch (ClassNotFoundException ex) { 
  14.             // JSR-330 API not available - simply skip. 
  15.         } 
  16.     } 
  17.      
  18.     public void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class<?> beanType, String beanName) { 
  19.         // 查找 
  20.         InjectionMetadata metadata = findAutowiringMetadata(beanName, beanType, null); 
  21.         metadata.checkConfigMembers(beanDefinition); 
  22.     } 
  23.     private InjectionMetadata findAutowiringMetadata(String beanName, Class<?> clazz, @Nullable PropertyValues pvs) { 
  24.         // Fall back to class name as cache keyfor backwards compatibility with custom callers. 
  25.         // 生成緩存使用的Key名稱,后續會通過該Key將對應的信息緩存起來 
  26.         String cacheKey = (StringUtils.hasLength(beanName) ? beanName : clazz.getName()); 
  27.         // 從當前的緩存中獲取是否存在 
  28.         InjectionMetadata metadata = this.injectionMetadataCache.get(cacheKey); 
  29.         // 該方法中會判斷緩存中是否存在,上面的metadata;以下通過雙重檢查 
  30.         if (InjectionMetadata.needsRefresh(metadata, clazz)) { 
  31.             synchronized (this.injectionMetadataCache) { 
  32.                 metadata = this.injectionMetadataCache.get(cacheKey); 
  33.                 if (InjectionMetadata.needsRefresh(metadata, clazz)) { 
  34.                     if (metadata != null) { 
  35.                         metadata.clear(pvs); 
  36.                     } 
  37.                     // 構建自動裝配元信息;通過當前在這處理的class對象查找是否具有@Autowired注解信息(從字段和方法上查找) 
  38.                     metadata = buildAutowiringMetadata(clazz); 
  39.                     // 將查找到的InjectionMetadata緩存起來,在后續填充屬性的時候直接通過緩存獲取即可 
  40.                     this.injectionMetadataCache.put(cacheKey, metadata); 
  41.                 } 
  42.             } 
  43.         } 
  44.         return metadata; 
  45.     } 
  46.      
  47.     private InjectionMetadata buildAutowiringMetadata(final Class<?> clazz) { 
  48.         if (!AnnotationUtils.isCandidateClass(clazz, this.autowiredAnnotationTypes)) { 
  49.             return InjectionMetadata.EMPTY; 
  50.         } 
  51.         List<InjectionMetadata.InjectedElement> elements = new ArrayList<>(); 
  52.         Class<?> targetClass = clazz; 
  53.  
  54.         do { 
  55.             final List<InjectionMetadata.InjectedElement> currElements = new ArrayList<>(); 
  56.             // 這里通過方法也能知道遍歷當前類中的所有字段,檢查是否有@Autowired注解 
  57.             ReflectionUtils.doWithLocalFields(targetClass, field -> { 
  58.                 // 在字段上查找@Autowired注解信息 
  59.                 MergedAnnotation<?> ann = findAutowiredAnnotation(field); 
  60.                 if (ann != null) { 
  61.                     // 判斷當前的字段是否通過static修飾了 
  62.                     if (Modifier.isStatic(field.getModifiers())) { 
  63.                         return
  64.                     } 
  65.                     // 判斷是否必須的字段(默認是true,要注入的Bean必須存在) 
  66.                     boolean required = determineRequiredStatus(ann); 
  67.                     // 將查找到的字段信息保存到AutowriedFieldElement中 
  68.                     currElements.add(new AutowiredFieldElement(field, required)); 
  69.                 } 
  70.             }); 
  71.             // 遍歷當前class中所有的方法,是否有@Autowired注解信息 
  72.             ReflectionUtils.doWithLocalMethods(targetClass, method -> { 
  73.                 Method bridgedMethod = BridgeMethodResolver.findBridgedMethod(method); 
  74.                 if (!BridgeMethodResolver.isVisibilityBridgeMethodPair(method, bridgedMethod)) { 
  75.                     return
  76.                 } 
  77.                 MergedAnnotation<?> ann = findAutowiredAnnotation(bridgedMethod); 
  78.                 if (ann != null && method.equals(ClassUtils.getMostSpecificMethod(method, clazz))) { 
  79.                     if (Modifier.isStatic(method.getModifiers())) { 
  80.                         return
  81.                     } 
  82.                     boolean required = determineRequiredStatus(ann); 
  83.                     PropertyDescriptor pd = BeanUtils.findPropertyForMethod(bridgedMethod, clazz); 
  84.                     currElements.add(new AutowiredMethodElement(method, required, pd)); 
  85.                 } 
  86.             }); 
  87.             elements.addAll(0, currElements); 
  88.             targetClass = targetClass.getSuperclass(); 
  89.         // 遍歷當前的類及父類,一直找到父類為Object為止 
  90.         } while (targetClass != null && targetClass != Object.class); 
  91.         return InjectionMetadata.forElements(elements, clazz); 
  92.     } 
  93.     @Nullable 
  94.     private MergedAnnotation<?> findAutowiredAnnotation(AccessibleObject ao) { 
  95.         MergedAnnotations annotations = MergedAnnotations.from(ao); 
  96.         // 開始遍歷當前的字段(方法)上是否有autowiredAnnotationTypes集合中定義的注解(該集合在構造該對象的時候就添加了) 
  97.         for (Class<? extends Annotation> type : this.autowiredAnnotationTypes) { 
  98.             MergedAnnotation<?> annotation = annotations.get(type); 
  99.             if (annotation.isPresent()) { 
  100.                 return annotation; 
  101.             } 
  102.         } 
  103.         return null
  104.     } 
  105.  
  106. public abstract class ReflectionUtils { 
  107.     public static void doWithLocalFields(Class<?> clazz, FieldCallback fc) { 
  108.         for (Field field : getDeclaredFields(clazz)) { 
  109.             try { 
  110.                 fc.doWith(field); 
  111.             } catch (IllegalAccessException ex) { 
  112.                 throw new IllegalStateException("Not allowed to access field '" + field.getName() + "': " + ex); 
  113.             } 
  114.         } 
  115.     } 
  116.     public static void doWithLocalMethods(Class<?> clazz, MethodCallback mc) { 
  117.         Method[] methods = getDeclaredMethods(clazz, false); 
  118.         for (Method method : methods) { 
  119.             try { 
  120.                 mc.doWith(method); 
  121.             } catch (IllegalAccessException ex) { 
  122.                 throw new IllegalStateException("Not allowed to access method '" + method.getName() + "': " + ex); 
  123.             } 
  124.         } 
  125.     } 

5 填充屬性

在這里的屬性填充會利用上面的緩存中之間取值進行屬性的注入

  1. public class AutowiredAnnotationBeanPostProcessor { 
  2.     public PropertyValues postProcessProperties(PropertyValues pvs, Object bean, String beanName) { 
  3.         // 這里會直接從緩存中(injectionMetadataCache)獲取 
  4.         InjectionMetadata metadata = findAutowiringMetadata(beanName, bean.getClass(), pvs); 
  5.         // 屬性的填充注入 
  6.         metadata.inject(bean, beanName, pvs); 
  7.         return pvs; 
  8.     } 
  9.     private InjectionMetadata findAutowiringMetadata(String beanName, Class<?> clazz, @Nullable PropertyValues pvs) { 
  10.         // Fall back to class name as cache keyfor backwards compatibility with custom callers. 
  11.         String cacheKey = (StringUtils.hasLength(beanName) ? beanName : clazz.getName()); 
  12.         // Quick check on the concurrent map firstwith minimal locking. 
  13.         InjectionMetadata metadata = this.injectionMetadataCache.get(cacheKey); 
  14.         if (InjectionMetadata.needsRefresh(metadata, clazz)) { 
  15.             synchronized (this.injectionMetadataCache) { 
  16.                 metadata = this.injectionMetadataCache.get(cacheKey); 
  17.                 if (InjectionMetadata.needsRefresh(metadata, clazz)) { 
  18.                     if (metadata != null) { 
  19.                         metadata.clear(pvs); 
  20.                     } 
  21.                     metadata = buildAutowiringMetadata(clazz); 
  22.                     this.injectionMetadataCache.put(cacheKey, metadata); 
  23.                 } 
  24.             } 
  25.         } 
  26.         return metadata; 
  27.     } 

以上就是

MergedBeanDefinitionPostProcessor處理器的作用了。

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2021-08-03 07:59:37

Linux系統地址

2023-09-21 15:54:55

數據中心

2024-01-16 23:30:46

?fractionsPython分數

2012-06-11 10:02:35

2021-03-04 10:20:41

運維工程師互聯網

2014-05-19 10:16:31

算法機器學習

2019-09-06 09:05:25

TCP協議通信

2024-06-11 09:02:30

2009-06-09 09:29:33

2011-04-27 14:50:36

HTML 5

2021-07-02 06:34:53

Go語言sysmon

2022-12-02 14:57:15

物聯網物聯網平臺

2023-10-07 14:51:46

物聯網物聯網平臺

2010-07-08 09:37:25

2019-10-28 14:07:29

研發管理技術

2015-10-26 10:22:49

微信騰訊用戶行為

2025-05-28 03:11:00

token鑒權session

2022-06-29 08:32:04

游標MySQL服務器

2022-09-22 14:55:31

前端JavaScripthis

2022-09-26 13:10:17

JavaScriptthis
點贊
收藏

51CTO技術棧公眾號

国产精品沙发午睡系列990531| 激情亚洲成人| 69堂亚洲精品首页| 亚洲一区二区三区小说| 国产欧美最新羞羞视频在线观看| 性欧美疯狂猛交69hd| 亚洲91网站| 精品久久久久久久久久ntr影视| 欧美日韩在线精品| 国产黄a三级三级三级| 国产日韩欧美一区在线 | 日本人视频jizz页码69| a毛片在线播放| 9久草视频在线视频精品| 国产成+人+综合+亚洲欧美丁香花| 免费在线观看黄色小视频| 国产精品超碰| 欧美二区三区的天堂| 亚洲中文字幕无码专区| 看女生喷水的网站在线观看| 91农村精品一区二区在线| 成人午夜两性视频| 无码人妻久久一区二区三区不卡| 在线观看国产精品入口| 亚洲网在线观看| www男人天堂| 国产精品va视频| 在线免费观看日本一区| 成人性生活视频免费看| 久cao在线| 中文成人av在线| 久久国产精品亚洲va麻豆| 国产男女裸体做爰爽爽| 日韩精品乱码免费| 欧美亚洲日本网站| 国产精品9191| 欧美成人午夜| 色琪琪综合男人的天堂aⅴ视频| 日韩av无码一区二区三区不卡| 99tv成人影院| 欧美精品日韩一本| 日本美女高潮视频| 欧洲av一区二区| 欧美国产大片| 中文字幕一区二区三区色视频| 青青影院一区二区三区四区| 午夜在线视频免费| 成人av在线资源网站| 97av影视网在线观看| 国产精品高潮呻吟AV无码| 日韩黄色小视频| 国产成人精品免费久久久久 | 欧美午夜精品一区二区三区| 成人在线免费在线观看| 国产网站在线| 婷婷国产v国产偷v亚洲高清| 日韩精品一区二区免费| 在线看三级电影| 亚洲日本护士毛茸茸| 亚洲午夜久久久影院伊人| 国产在线一在线二| 国产午夜精品一区二区三区视频 | 亚洲大片在线| 欧美极品欧美精品欧美视频 | 亚洲一区二区自偷自拍| 欧美欧美黄在线二区| 亚洲精品视频在线播放| 免费黄色在线视频| 精品九九在线| 久久久999成人| 九九热视频精品| 一区福利视频| 欧亚精品中文字幕| 波多野结衣电车| 久久成人18免费观看| 成人免费视频a| 精品国产免费无码久久久| 视频一区二区三区在线看免费看 | 97精品视频在线观看| 黄色片视频网站| 国产精品社区| 国产精品福利观看| 国产精品久久影视| 懂色av一区二区夜夜嗨| 久久精品日产第一区二区三区乱码 | 老妇喷水一区二区三区| 奇门遁甲1982国语版免费观看高清 | 国产黄在线播放| 国产精品嫩草影院av蜜臀| 在线观看视频黄色| 182在线播放| 欧美日韩在线免费观看| 亚洲欧洲日本精品| 亚洲精品高潮| 国产一区二区成人| 99精品久久久久| 校园激情久久| 96pao国产成视频永久免费| 高清一区二区三区四区| 久久久99免费| 日韩一二区视频| 中文字幕人成乱码在线观看| 欧美日韩激情一区二区| 呦呦视频在线观看| 99久久国产综合精品成人影院| 久久久久久国产精品久久| 免费黄色一级大片| 国产精品一级片在线观看| 欧美精品在线一区| 最新av在线播放| 欧美性生活影院| 亚洲啪av永久无码精品放毛片 | 中文字幕+乱码+中文| 国产成人精品午夜视频免费| 欧美日韩另类综合| 韩国一区二区av| 97在线超碰| 欧美久久久影院| 亚洲蜜桃精久久久久久久久久久久| 日韩a一区二区| 2019av中文字幕| 国产情侣av在线| 国产人成亚洲第一网站在线播放 | 欧美高清dvd| 醉酒壮男gay强迫野外xx| 亚洲欧美网站在线观看| 国产福利精品视频| 女人18毛片水真多18精品| 亚洲日本一区二区三区| 成人免费xxxxx在线视频| 久久久久观看| 欧美极品少妇xxxxⅹ喷水| ,一级淫片a看免费| 国产三级精品视频| 18禁免费无码无遮挡不卡网站| 69精品国产久热在线观看| 久久综合网hezyo| 中文字幕制服诱惑| 2欧美一区二区三区在线观看视频| 日本一级黄视频| 国产 日韩 欧美| 日韩在线观看网站| 国产精品sm调教免费专区| 久久久美女艺术照精彩视频福利播放| 无码熟妇人妻av在线电影| 久久影院一区二区三区| 久久精品国产成人精品| 国产又粗又猛又爽又黄视频| 国产欧美视频一区二区三区| 久久黄色免费看| 伊人久久大香线蕉av不卡| 2019中文字幕在线| 肉丝一区二区| 欧美视频第一页| 亚洲最大的黄色网| 国产午夜精品一区二区三区欧美 | 在线免费观看日本欧美爱情大片| 国产欧美精品一区二区三区-老狼| 国产香蕉在线| 欧美日韩在线三级| 婷婷国产成人精品视频| 国产综合成人久久大片91| 超级碰在线观看| caoporn成人免费视频在线| 国产综合在线看| 深夜福利在线看| 欧美日韩五区| 亚洲国产成人精品电影| 日韩三级一区二区三区| 91美女视频网站| 日韩视频免费在线播放| 日韩av密桃| 99re在线观看| 中文在线免费视频| 一本色道久久综合狠狠躁篇的优点 | 欧美在线免费播放| 久久精品日韩无码| 高清久久久久久| 无码无遮挡又大又爽又黄的视频| 91亚洲自偷观看高清| 97超碰人人看人人| 制服丝袜专区在线| 视频一区视频二区国产精品| 精品人妻一区二区三区含羞草 | 91丝袜超薄交口足| 精品999网站| 美女三级99| 99久久er| 欧美成人h版在线观看| 中文字幕日本人妻久久久免费 | 日本一区二区电影| y97精品国产97久久久久久| 国产色片在线观看| 日韩欧美一区视频| b站大片免费直播| 久久精品久久久精品美女| 欧美大片免费播放| 欧美18免费视频| 国产精品免费一区豆花| 国产系列电影在线播放网址| 91精品国产综合久久国产大片 | 欧美色图激情小说| 国产区亚洲区欧美区| 青春草免费在线视频| 亚洲免费高清视频| 无码人妻丰满熟妇精品| 尤物在线观看一区| 亚洲熟妇无码av| 亚洲人成色777777精品音频| 亚洲国产精品二十页| 国产精品99久久久精品无码| 99热在线精品观看| 在线观看欧美激情| 日韩精品成人| 国产日韩在线看| 超黄网站在线观看| 亚洲天堂男人天堂女人天堂| 特级西西444www高清大视频| 香蕉成人伊视频在线观看| 国产人妻一区二区| 国产成人在线视频网址| 国产男女激情视频| 亚洲看片一区| 国产又粗又硬又长| 国产伦精品一区二区三区视频金莲| 在线一区二区日韩| www.com欧美| 欧美欧美午夜aⅴ在线观看| 国产一级性生活| 亚洲欧美综合在线精品| 精品人妻一区二区三区日产| 高清在线观看日韩| 亚洲午夜激情影院| 久久欧美肥婆一二区| 亚洲综合首页| 久久91精品| 国产一区在线免费| www一区二区三区| 欧美一区二区.| 日本在线视频www鲁啊鲁| 中文字幕一区电影| 青青草免费在线| 亚洲国产91精品在线观看| 国内精品久久久久久久久久| 欧美日韩精品一区二区三区蜜桃| 成人免费a视频| 亚洲成人在线网站| 日韩免费在线视频观看| 亚洲一区二区三区中文字幕| 羞羞色国产精品| 你懂的在线免费观看| 日韩成人小视频| 韩国av在线免费观看| 8x福利精品第一导航| 久久精品视频5| 欧美性少妇18aaaa视频| 国偷自拍第113页| 五月婷婷综合网| 国产一级片免费| 亚洲制服丝袜在线| 在线观看成人毛片| 亚洲免费观看视频| 久久伊人成人网| 一区二区三区欧美激情| 麻豆精品一区二区三区视频| 亚洲精品第1页| 国产精品99无码一区二区| 亚洲国产综合视频在线观看| 国产精品a成v人在线播放| 精品欧美激情精品一区| 九九热在线免费观看| 狠狠色狠狠色综合日日五| 久久网中文字幕| 婷婷久久综合九色综合绿巨人 | 五月天国产视频| 国产精品白丝av| 日韩av成人网| 丁香网亚洲国际| 香蕉网在线播放| 久久久精品免费观看| av网站免费在线看| 中文字幕av资源一区| 182在线观看视频| 洋洋av久久久久久久一区| 精品无码人妻一区二区三| 狠狠色狠狠色综合日日五| 午夜视频网站在线观看| 欧美挠脚心视频网站| www香蕉视频| 亚洲视频国产视频| 日本在线人成| 欧美高清一级大片| 日韩免费电影| 91精品国产综合久久香蕉的用户体验| 国产精品1区在线| 国产精品久久久久久免费观看 | 国产视频精品va久久久久久| 国产高清免费在线播放| 久久亚洲国产精品成人av秋霞| 手机av在线播放| 欧美一级片在线播放| 日韩三区在线| 成人免费视频网站入口| 国产一卡不卡| 中文字幕日韩精品无码内射| 午夜在线一区二区| 国产精品久久久久久久99| 99久久精品国产一区二区三区| 欧美 日韩 成人| 亚洲一区影音先锋| 91久久久久国产一区二区| 亚洲成人亚洲激情| 成人免费黄色网页| 2020欧美日韩在线视频| 亚洲色图图片| 久久网这里都是精品| 熟妇女人妻丰满少妇中文字幕| 久久久久久影视| 老女人性淫交视频| 色婷婷国产精品综合在线观看| 国产黄色大片网站| 亚洲一区av在线播放| 黄色在线看片| 成人久久久久爱| 久久av资源| 日本一区午夜艳熟免费| 久久久久久黄| 亚洲精品乱码久久久久久蜜桃图片| 中文字幕成人网| 天天综合网入口| 亚洲成人网久久久| 国产在线看片| 国产精品中文在线| 精品国产一区二区三区噜噜噜| 男女激情免费视频| 韩国理伦片一区二区三区在线播放| 日韩免费成人av| 欧美日韩国产一区在线| 国产成人精品a视频| 亚洲免费视频观看| 日韩伦理在线一区| 国产传媒一区| 欧美在线亚洲| 色哟哟在线观看视频| 国产精品麻豆欧美日韩ww| 天码人妻一区二区三区在线看| 日韩久久精品成人| 91av久久| www 成人av com| 亚洲网站在线| 女人扒开双腿让男人捅| 自拍偷在线精品自拍偷无码专区 | 亚洲一区二区美女| 91福利在线观看视频| 国产一区二区精品丝袜| 欧美片第一页| 欧美不卡在线一区二区三区| 亚洲乱码久久| 91九色蝌蚪porny| 亚洲一区二区三区四区在线| 亚洲xxx在线| 孩xxxx性bbbb欧美| 久久综合五月婷婷| 亚洲人精品午夜射精日韩 | 91精品人妻一区二区| 亚欧色一区w666天堂| 人妻精品无码一区二区| 26uuu久久噜噜噜噜| 亚洲丝袜美腿一区| 欧美成人黑人猛交| 国产精品欧美精品| 国产三级按摩推拿按摩| 在线午夜精品自拍| 国产精品一站二站| 成年丰满熟妇午夜免费视频 | 91美女福利视频高清| 婷婷久久一区| 成人一区二区三区仙踪林| 精品国产户外野外| 欧美精品少妇| 日韩av不卡电影| 久久久国产精品| 国产一级黄色录像| 色狠狠综合天天综合综合| 国产三级视频在线看| 国产女精品视频网站免费| 欧美在线三区| 三级男人添奶爽爽爽视频| 91九色02白丝porn| 日韩另类在线| 麻豆av一区| 亚洲经典在线| 人妻av无码一区二区三区| 欧美综合一区二区| 毛片在线播放a| 成人午夜电影免费在线观看| 一本久道久久综合狠狠爱| 久久精品一区二区三区四区五区 | 国产在线精品自拍| 亚洲网站啪啪|