国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

SpringBootCache源碼解析:Cache自動(dòng)配置

共 7238字,需瀏覽 15分鐘

 ·

2022-04-25 07:52


SpringBootCache源碼解析

Spring Boot 支持了多種緩存的自動(dòng)配置,其中包括 Generic、JCache、EhCache 2.x、Hazelcast、 Infinispan、 Couchbase、 Redis 、Caffeine 和 Simple。早期版本還支持Guava 的緩存,但目前已經(jīng)廢棄。本章將重點(diǎn)講解緩存的自動(dòng)配置 CacheAutoConfiguration和默認(rèn)的 SimpleCacheConfiguration 自動(dòng)配置及相關(guān)內(nèi)容。


Cache 簡(jiǎn)介

隨著項(xiàng)目的發(fā)展,往往會(huì)出現(xiàn)- -些瓶頸, 比如與數(shù)據(jù)庫(kù)的交互、與遠(yuǎn)程服務(wù)器的交互等。

此時(shí),緩存便派上了用場(chǎng)。而在 Spring 3.1 中引入了基于注解的 Cache 的支持在spring-context 包 中 定 義 了
org.springframework.cache. CacheManager 和org.springframework.cache.Cache 接口,用來(lái)統(tǒng)一-不同的緩存的技術(shù)。

CacheManager 是 Spring 提供的各種緩存技術(shù)管理的抽象接口,而 Cache 接口包含緩存的增加、刪除、讀取等常用操作。針對(duì) CacheManager, Spring 又提供了多種實(shí)現(xiàn),比如基于Collection 來(lái) 實(shí) 現(xiàn) 的 SimpleCacheManager 、 基 于 ConcurrentHashMap 實(shí) 現(xiàn) 的
Concurrent-MapCacheManager、基于 EhCache 實(shí)現(xiàn)的 EhCacheCacheManager 和基于JCache 標(biāo)準(zhǔn)實(shí)現(xiàn)的 JCacheCacheManager 等。

Spring Cache 的實(shí)現(xiàn)與 Spring 事務(wù)管理類似,都是基于 AOP 的方式。其核心思想是:第一次調(diào)用緩存方法時(shí),會(huì)把該方法參數(shù)和返回結(jié)果作為鍵值存放在緩存中,當(dāng)同樣的參數(shù)再次請(qǐng)求方法時(shí)不再執(zhí)行該方法內(nèi)部業(yè)務(wù)邏輯,而是直接從緩存中獲取結(jié)果并返回。

Spring Cache 提供了@CacheConfig、@Cacheable 、@CachePut 、@CacheEvict 等注解來(lái)完成緩存的透明化操作,相關(guān)功能如下。.@CacheConfig:用于類上,緩存一些公共設(shè)置。

.@Cacheable:用于方法上,根據(jù)方法的請(qǐng)求參數(shù)對(duì)結(jié)果進(jìn)行緩存,下次讀取時(shí)直接讀取緩存內(nèi)容。

.@CachePut: 用于方法上,能夠根據(jù)方法的請(qǐng)求參數(shù)對(duì)其結(jié)果進(jìn)行緩存,和@Cacheable不同的是,它每次都會(huì)觸發(fā)真實(shí)方法的調(diào)用。

.@CacheEvict: 用于方法上,清除該方法的緩存,用在類上清除整個(gè)類的方法的緩存。

在了解了 Spring Cache 的基本作用的和定義之后,下面來(lái)看在 SpringBoot 中是如何對(duì)Cache 進(jìn)行自動(dòng)配置的。


Cache 自動(dòng)配置

在 Spring Boot 中,關(guān)于 Cache 的默認(rèn)自動(dòng)配置類只有 CacheAutoConfiguration,主要用于緩存抽象的自動(dòng)配置,當(dāng)通過(guò)@EnableCaching 啟用緩存機(jī)制時(shí),根據(jù)情況可創(chuàng)建CacheManager。對(duì)于緩存存儲(chǔ)可以通過(guò)配置自動(dòng)檢測(cè)或明確指定。

CacheAutoConfiguration 同樣在 ME TA-INF/spring.factories 文件中配置注冊(cè)。

# . Auto Configure
org. springframework. boot. autoconfigure . EnableAutoConfiguration=\
org. springframework . boot . autoconfigure . cache . CacheAutoConfiguration, \
下面先來(lái)看 CacheAutoConfiguration 類的注解部分代碼實(shí)現(xiàn)。
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass (CacheManager. class)
@ConditionalOnBeanCacheAspectSupport . class)
@ConditionalOnMissingBean(value = CacheManager .class, name = "cacheResolve
r"
)
@EnableConfigurationProperties (CacheProperties. class)
@AutoConfigureAfter({ CouchbaseAutoConfiguration. class, HazelcastAutoConfig
uration. class,
HibernateJpaAutoConfiguration. class, RedisAutoConfigur
ation.class })
@Import(CacheConfigurat ionImportSelector.class)
public class CacheAutoConfiguration {
}

@ConditionalOnClass 指 定 需 要 在 classpath 下 存 在 CacheManager 類 。關(guān) 于CacheManager 類是一個(gè)緩存管理器的接口,管理各種緩存(Cache) 組件。針對(duì)不同的緩存技術(shù),會(huì)有不同的實(shí)現(xiàn)類。比如,在 Spring 中提供了 SimpleCacheManager (測(cè)試)、
Concurrent-MapCacheManager ( 默 認(rèn) ) 、 NoOpCacheManager ( 測(cè) 試 ) 、EhCacheCacheManager ( 基于 EhCache)、RedisCacheManager (基于 Redis) 等實(shí)現(xiàn)類。CacheManager 接口提供了兩個(gè)方法:根據(jù)名稱獲取緩存和獲取緩存名稱集合,相關(guān)代碼如下。

public interface CacheManager {
//根據(jù)名稱獲取緩存
@Nullable
Cache getCache(String name);
//獲取緩存名稱集合
Collection getCacheNames();
}

在 CacheManager 接 口 中 只 定 義 了 上 面 兩 個(gè) 方 法 , 但 在 其 抽 象 實(shí) 現(xiàn) 類AbstractCache-Manager 中便擴(kuò)展了新增 Cache、更新 Cache 等方法。

@ConditionalOnBean 指定需要存在 CacheAspectSupport 的 Bean 時(shí)才生效,換句話說(shuō),就 是 需要在使用 了 @EnableCaching 時(shí) 才 有 效 。這 是 因 為 該 注 解 隱 式 的 導(dǎo) 致 了CacheInter-ceptor 對(duì)應(yīng)的 Bean 的初始化,而 CacheInterceptor 為 CacheAspectSupport的子類。

@ConditionalOnMissingBean 指定名稱為 cacheResolver 的 CacheManager 對(duì)象不存在時(shí)生效。

@
EnableConfigurationProperties 加 載 緩 存 的 CacheProperties 配 置 項(xiàng) , 配 置 前 綴 為spring.cache.

@AutoConfigureAfter 指定該自動(dòng)配置必須在緩存數(shù)據(jù)基礎(chǔ)組件自動(dòng)配置之后進(jìn)行,這里包括 Couchbase、 Hazelcast、 HibernateJpa 和 Redis 的自動(dòng)配置

想要實(shí)現(xiàn)緩存,需要先集成對(duì)應(yīng)的緩存框架或組件。這里以 Redis 為例,它的自動(dòng)配置類RedisAutoConfiguration 中 便 完 成 了 Redis 相 關(guān) 的 Redis Template 和 StringRedisTemplate 的實(shí)例化。而 RedisAutoConfiguration 中導(dǎo)入類
JedisConnectionConfiguration又完成了 Redis 使用 Jedis 連接的配置

@Ilmport 導(dǎo)入
CacheConfigurationlmportSelector,其實(shí)是導(dǎo)入符合條件的 Spring Cache 使用的各類基礎(chǔ)緩存框架(或組件)的配置。該類的實(shí)現(xiàn)就位于 CacheAutoConfiguration 中,代碼如下。

static class CacheConfigurat ionImportSelector implements ImportSelector {
public String[] selectImports(Annotat ionMetadata importingClassMetadata)
CacheType[] types = CacheType.values();
for(inti=0:i1t+)5
imports[i] = CacheConfigurations . getConfigurat ionClass(types[i]);
return imports; }
}

導(dǎo)入類的獲取是通過(guò)實(shí)現(xiàn) ImportSelector 接口來(lái)完成的,具體獲取步驟位于 selectlmports方法中。該方法中,首先獲取枚舉類 CacheType 中定義的緩存類型數(shù)據(jù),CacheType 中定義支 持的緩存類型如下。

//支持的緩存類型(按照優(yōu)先級(jí)定義)
public enum CacheType {
//使用上下文中的 Cache Bean 進(jìn)行通用緩存
GENERIC,
// JCache(JSR- 107) 支持的緩存
JCACHE,
// EhCache 支持的緩存
EHCACHE,
// Hazelcast 支持的緩存
HAZELCAST,
// Infinispan 支持的緩存
INFINISPAN,
// Couchbase. 支持的緩存
COUCHBASE,
// Redis.支持的緩存
REDIS,
// Caffeine 支持的緩存
CAFFEINE,
//內(nèi)存基本的簡(jiǎn)單緩存
SIMPLE,
// 不支持緩存
NONE
}

枚舉類 CacheType 中定義了以上支持的緩存類型,而且上面的緩存類型默認(rèn)是按照優(yōu)先級(jí)從前到后的順序排列的。

selectlmports 方法中,當(dāng)獲取 Cache Type 中定義的緩存類型數(shù)組之后,遍歷該數(shù)組并通過(guò)CacheConfigurations 的 getConfigurationClass 方法獲得每種類型緩存對(duì)應(yīng)的自動(dòng)配置類( 注解@Configuration 的類)。

CacheConfigurations 相關(guān)代碼如下。

final class CacheConfigurations {
private static final Map> MAPPINGS;
//定義 CacheType 5@Conf iguration 之間的對(duì)應(yīng)關(guān)系
static {
Map> mappings = new EnumMap<>(CacheType.class);
mappings . put(CacheType . GENERIC, GenericCacheConfiguration.class);mappings . put(CacheType . EHCACHEEhCacheCacheConfiguration. class);
mappings . put (CacheType . HAZELCAST, HazelcastCacheConfiguration. class);
mappings . put(CacheType . INF INISPAN, InfinispanCacheConfiguration.class);
mappings . put (CacheType . JCACHE, JCacheCacheConfiguration. class);
mappings . put (CacheType . COUCHBASE, CouchbaseCacheConfiguration. class);
mappings . put (CacheType. REDIS, RedisCacheConfiguration.class);
mappings . put(CacheType . CAFFEINE, CaffeineCacheConfiguration. class);
mappings . put(CacheType . SIMPLE, SimpleCacheConfiguration.class);
mappings . put(CacheType . NONE, NoOpCacheConfiguration.class);
MAPPINGS = Collections . unmodifiableMap(mappings);
//根據(jù) CacheType
型獲得對(duì)應(yīng)的@Configuration 類
static String getConfigurationClass(CacheType cacheType) {
Class configurationClass = MAPPINGS . get(cacheType);
Assert.state(configurationClass != null, () -> "Unknown cache type ”+
cacheType) ;
return configurationClass . getName();
}
}

經(jīng)過(guò)以上步驟,我們會(huì)發(fā)現(xiàn)通過(guò)@Import 注解,CacheAutoConfiguration 導(dǎo)入了 CacheType中定義的所有類型的自動(dòng)配置,也就是 Spring Boot 目前支持的緩存類型。而具體會(huì)自動(dòng)配置哪種類型的緩存,還需要看導(dǎo)入的自動(dòng)配置類里面的生效條件。

我們以 GenericCacheConfiguration 為例進(jìn)行了解,源代碼如下。

@Configurat ion(proxyBeanMethods = false)
@ConditionalOnBean(Cache . class)
@ConditionalOnMissingBean(CacheManager . class)
@Conditional(CacheCondition. class)
class GenericCacheConfiguration {
@Bean
SimpleCacheManager cacheManager(CacheManagerCustomizers customizers, Coll
ection
caches) {
SimpleCacheManager cacheManager = new SimpleCacheManager();
cacheManager . setCaches(caches);
return customizers . customize(cacheManager);
}}

在 GenericCacheConfiguration 的注解部分,@ConditionalOnBean 指定當(dāng) Cache 的 Bean存在時(shí)進(jìn)行實(shí)例化操作,@ConditionalOnMissingBean 指定當(dāng) CacheManager 的 Bean 不存在時(shí)進(jìn)行實(shí)例化操作,@Conditional 指定當(dāng)滿足 CacheCondition 指定的條件時(shí)進(jìn)行實(shí)例化操作。

CacheManager 我們前面已經(jīng)介紹過(guò),不再贅述。Cache 是一 個(gè)定義了緩存通用操作的接口,其中定義了緩存名稱獲取、緩存值獲取、清除緩存、添加緩存值等操作。對(duì)應(yīng)的緩存組件或框架實(shí)現(xiàn)該接口,并根據(jù)組件自身的情況提供對(duì)應(yīng)的操作方法實(shí)現(xiàn)。

下面看 CacheCondition 類中定義的條件。

class CacheCondition extends SpringBootCondition {
@Override
public ConditionOutcome getMatchOutcome (ConditionContext context, Annot
ated-
TypeMetadata metadata) {
String sourceClass =
if (metadata instanceof ClassMetadata) {
sourceClass = ((ClassMetadata) metadata). getClassName() ;
Condit ionMessage . Builder message = ConditionMessage . forCondition("C
ache"
,
sourceClass);
Environment environment = context . getEnvironment( ) ;
try {
//創(chuàng)建指定環(huán)境的 Binder, 然后綁定屬性到對(duì)象上
BindResult<CacheType> specified = Binder . get( environment) . bind
("spring.
cache. type"
, CacheType . class);
//如果未綁定,則返回匹配
if (!specified. isBound())
{
return ConditionOutcome . match(message . because("automatic ca
che type"
));
//獲取所需的緩存類型
CacheType required = CacheConfigurations . getType(((AnnotationMe
tadata)
metadata) . getClassName());
//如果已綁定,并且綁定的類型與所需的緩存類型相同,則返回匹配
if (specified.get() == required) {return Conditi onOutcome . match(message. because(specified. get
() +”cache type"));
} catch (BindException ex) {
//其他情況則返回不匹配
return ConditionOutcome . noMatch(message . because("
unknown cache typ
e"));
}
}

CacheCondition 的核心邏輯就是首先通過(guò) Binder 進(jìn)行指定屬性和類的綁定,然后通過(guò)綁定結(jié)果( BindResult)進(jìn)行判斷:如果判斷結(jié)果是未綁定,則直接返回條件匹配;否則,判斷綁定的緩存類型與所需的緩存類型是否相等,如果相等則返回條件匹配;其他情況則返回條件不匹配。

當(dāng) GenericCacheConfiguration 滿足注解指定的條件后,便會(huì)通過(guò) cacheManager 方法進(jìn)行SimpleCacheManager 類的實(shí)例化操作。首先創(chuàng)建 SimpleCacheManager 對(duì)象,然后將緩存 集 合 設(shè) 置 到 對(duì) 象 中 , 最 后 通 過(guò) CacheManagerCustomizers 的 customize 方 法 對(duì)SimpleCacheManager 進(jìn)行定制化處理。

SimpleCacheManager 類是接口 CacheManager 的一個(gè)實(shí)現(xiàn)類,通過(guò)集合來(lái)實(shí)現(xiàn)緩存功能,源代碼如下。

public class SimpleCacheManager extends AbstractCacheManager {
private Collection caches = Collections . emptySet();
//設(shè)置緩存集合
public void setCaches (Collection caches) {
this.caches = caches;
//獲取緩存集合
@Override
protected Collection loadCaches() {
return this. caches;
}
}

通過(guò)以上代碼可以看出,SimpleCacheManager 的實(shí)現(xiàn)極其簡(jiǎn)單, 就是基于 Cache 的集合來(lái)實(shí)現(xiàn)的,它提供了設(shè)置緩存集合和獲取緩存集合的方法。同樣,由于實(shí)現(xiàn)比較簡(jiǎn)單,它往往被用于測(cè)試環(huán)境和簡(jiǎn)單緩存場(chǎng)景中。

上面我們以 GenericCacheConfiguration 為例講解了@Import 引入的緩存組件配置,關(guān)于其他的類型緩存注解的配置就不再一-講解了。

下 我 繼 看 @Ilmport 的
CacheManagerEntityManagerFactoryDependsOnPostProcess-or類。該類同樣為 CacheAutoConfiguration 的內(nèi)部類。

@ConditionalOnClass(LocalContainerEnt ityManagerFactoryBean. class)
@Conditiona lOnBean(AbstractEntityManagerFactoryBean.class)
static class CacheManagerEntityManagerFactoryDependsOnPostProcessor
extends EntityManagerFactoryDependsOnPostProcessor {
CacheManagerEntityManagerFactoryDependsOnPostProcessor() {
super("cacheManager");}
}

該 類 實(shí) 現(xiàn) 了
EntityManagerFactoryDependsOnPostProcessor, 本質(zhì)上是BeanFactoryPost-Processor 的 一 個(gè) 實(shí) 現(xiàn) 類 。當(dāng) classpath中存在LocalContainerEntityManagerFactoryBean類和實(shí)現(xiàn)了抽象類AbstractEntityManagerFactoryBean 的類的 Bean 時(shí),才會(huì)進(jìn)行實(shí)例化操作。

在該類的構(gòu)造方法中調(diào)用父類構(gòu)造方法并傳遞值"cacheManager”。因此,動(dòng)態(tài)聲明了所有類型為 EntityManagerFactory 的 Bean 都必須依賴于名稱為 cacheManager 的 Bean。


最后,我們看一下 CacheAutoConfiguration 中其余的代碼。

//實(shí)例化 CacheManagerCus tomizers
@Bean
@ConditionalOnMissingBean
public CacheManagerCustomizers cacheManagerCustomizers(
ObjectProvider> customizers) {
return new CacheManagerCustomizers(
customi zers . orderedStream(). collect(Collectors . toList()));
}

cacheManagerCustomizers 方法初始化了 CacheManagerCustomizers 對(duì)象的 Bean,主要是 將 容 器 中 存 在 的 一 一 個(gè) 或 多 個(gè) CacheManagerCustomizer 的 Bean 組 件 包 裝 為CacheManager-Customizers,并將 Bean 注入容器。

//實(shí)例化 CacheManagerVal idator
@Bean
public CacheManagerValidator cacheAutoConfigurat ionValidator(CachePropert
ies-
cachePropert
ies,
objectProvid
er cacheManager) {
return new CacheManagerValidator(cacheProperties, cacheManager);
// CacheManagerVal idator 的具體定義,用于檢查并拋出有意義的異常 static class
CacheManagerValidator implements InitializingBean {private final CacheProperties cacheProperties;
private final objectProvider cacheManager;
CacheManagerValidator(CacheProperties cacheProperties, objectProviderkCac
he-
Manager> cacheManager) {
this. cacheProperties = cacheProperties;
this. cacheManager = cacheManager;
}
@Override
public void afterPropertiesSet() {
Assert . notNull(this . cacheManager . getIfAvailable(),
) -> "No cache manager could be auto- configured, check
your configuration (caching ”+ "
type is” + this. cacheProperties .getType
() + "')");
}
}


cacheAutoConfigurationValidator 方法初始化了 CacheManagerValidator 的 Bean,該 Bean用于確保容器中存在一個(gè) CacheManager 對(duì)象, 以達(dá)到緩存機(jī)制可以繼續(xù)被配置和使用的目的,同時(shí)該 Bean 也用來(lái)提供有意義的異常聲明。

至此關(guān)于 Spring Boot 中 cache 的 CacheAutoConfiguration 自動(dòng)配置講解完畢,隨后我們會(huì)繼續(xù)講一下Spring Boot 中默認(rèn)的自動(dòng)配置。

本文給大家講解的內(nèi)容是SpringBootCache源碼解析:Cache自動(dòng)配置

  1. 下篇文章給大家講解的是SpringBootCache源碼解析:默認(rèn)Cache配置;

  2. 覺(jué)得文章不錯(cuò)的朋友可以轉(zhuǎn)發(fā)此文關(guān)注小編;

  3. 感謝大家的支持!

本文就是愿天堂沒(méi)有BUG給大家分享的內(nèi)容,大家有收獲的話可以分享下,想學(xué)習(xí)更多的話可以到微信公眾號(hào)里找我,我等你哦。


瀏覽 31
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 亚洲二区后入极品| 日韩无码AV一区二区三区| 中文字幕无吗| 蜜臀AV一区二区三区免费看| 精品成人| www.狠狠| 青青超碰| 色综合中文字幕| 色天堂污| 91.n| 亚洲成人动漫免费| 久久综合久久鬼色| 大鸡吧成人视频| 亚洲精品成人无码| 五月天婷婷视频| 国产精品黄色视频| av在线免费观看网站| av超碰在线| 国产欧美综合一区二区| 91久久精品一区二区三区| 北条麻妃无码精品AV怎么看| 你懂的在线视频| 久久久999| av三级片在线观看| 欧美成人午夜| 日韩黄片免费看| BBB搡BBB搡BBB搡BBB| 国产色色视频| 婷婷无码成人精品俺来俺去| 国产精品色哟哟| 亚洲成人a片| 欧美一区二区三区激情| 日本天堂Tv视频在线观看| 18国产免费视频| 熟女人妻人蜜桃视频| 东京热一区二区三区| 国产日韩欧美综合在线| 亚洲av图片| 嫩草久久99www亚洲红桃| 亚洲第一色| 中文字幕无码播放| 成人免费av| 成人影片在线观看18| 大香蕉网站在线观看| 欧美黄色大香蕉| 日韩在线观看| 狼友视频在线观看18| 亚洲黄色大片| 国产丨熟女丨国产熟女视频| 91狠狠综合久久久久久| 黄片视频在线免费观看| 亚洲精品第一页| 巜痴漢電車~凌脔版2| 天天操夜夜操人人操| 成人高清无码在线观看| 丁香五月天av| 青青草精品在线视频| 欧美日韩在线视频免费| 国内自拍视频网| 操逼网站在线看| 影音先锋三级资源| 最新亚洲无码在线观看| 欧洲亚洲无码| 中文字幕一二三四| 国产免费啪啪视频| 精品国产999久久久免费| 91国产精品在线视频| 国产成人tv| 亚洲精品天堂无码| 久久大伊人| 日本高清视频网站| 伊人久久AV诱惑悠悠| 国产欧美激情| 波多野结衣av在线观看窜天猴| 男人天堂中文字幕| 精品国产乱码一区二区| 99re6热在线精品视频功能| 日韩一级一片内射视频4K| 性感成人在线| 成人精品一区二区三区视频| 小泽玛利亚一区二区免费| www.五月天婷婷| 香蕉成人视频| 日韩成人激情| 福利老湿69| 日韩无码黄色片| 啪啪人妻| 青草香蕉视频| 人人操91| 精品人妻在线| 97人人操人人| 豆花视频一区二区| 色小说在线| 大香蕉伊人综合网| 在线视频一区二区三区四区| 青青草免费观看视频| 丰满人妻无码| 7777AV| 囯产精品久久久久久久久| 亚洲黄片视频| 婷婷五月精品中文字幕| 特级444WWW大胆高清| 欧美做爱网站| 中文字幕无码视频| 小泽玛利亚一区二区免费| 看毛片视频| 久久国产精品伦子伦| 亚洲日韩网站| 欧美一级高清片免费一级a| www.青草视频| 黄色福利视频在线观看| 色色五月丁香婷婷| 乱伦综合网| 国模一区二区| 日韩伊人| 日韩综合色| 无码免费在线视频| 丁香五月在线| 韩日无码人妻| 亚洲激情欧美激情| 日韩无码视频一区二区| 色777网站| 91干逼| 刘玥无码| 国精品伦一区一区三区有限公司 | 综合天堂网| 国产淫乱视频| 影音先锋婷婷| 亚洲国产成人久久| a片一级片| 大香蕉欧美在线| 国产不卡一区| 日韩毛片网站| 人人干人人爱| 亚洲图片激情乱伦小说| 69av天堂| 日产精品久久久| 欧美内射在线| 亚洲日韩成人在线| 美女日屄| 久久99热这里只频精品6学生| 一级AV片| 人妻无码A| 亚洲日韩AV电影| 日韩免费片| 可以免费看的黄色| 亚洲乱码精品久久久久..| 国产黄色在线免费观看| 日韩一区二区视频| 成人av小说网站| 91久久久久久久91| 日韩午夜片| 久久婷婷在线| 欧美精品一级片| 26∪u∪成人网站| 热无码| 久久久久久久久久国产精品免费观看-百度| 日本高清视频网站| 成年片免费观看网站免费观看,亚洲+欧... | 国产一级特黄A片| 伊人大香蕉在线| av人人| 国产免费AV片在线无码| 91无码人妻精品1国产四虎| 丁香婷婷激情| 中文字幕精品在线观看| 青青国产| 午夜成人大片| 18禁网站在线播放| 国产成人自拍视频在线观看| 欧美丰满人妻| 91天堂| 欧洲尤物不卡播放六区| 中文字幕人成人乱| 久久久久黄片| 婷婷久久网| 91色婷婷综合久久中文字幕二区| 伊人在线| 久久系列观看完整指南| 福利在线看| 91人妻人人澡人人爽人妻| 中文无码日韩欧美久久| 亚洲性爱AV| 国产特黄| 亚洲美女网站免费观看网址| 超碰97av| AV在线免费观看网站| 中文字幕精品无码亚| 五月欧美激情| 免费草逼网站| 中文在线a∨在线| 夜夜骑天天操| AV免费激情影院| 91香蕉在线看| 麻豆AV在线播放| 精品乱子伦一区二区三区免费播成| 精品一二三| 亚洲视频一区二区三区| 久久99久久视频| 亚洲欧美在线视频免费| 成人免费视频一区二区| 午夜一区| 日本三级网址| 日本黄色片在线播放| 一级a免一级a做免费线看内裤的注意事项 | 黄色国产视频在线观看| 超碰免费人妻| 91综合视频| 中文字幕午夜福利| 四虎影院污| 日本一区二区三区在线播放 | 国产黄色三级| 免费AV网站| 黄色视频在线观看大全| 青青草在线免费视频| 五月天国产精品| 亚洲成人精品少妇| 69国产成人精品二区| 熟女AV888| 人人妻人人澡人人爽人人DVD | 麻豆91蜜桃传媒在线观看| 欧美一级黄色大片| 亚洲日韩AV在线| 亚洲一级二级片| 亚洲天堂影音先锋| 777免费视频| 另类老妇奶性生BBwBB| 成人免费高清| 韩国三级HD久久精品HD| 日韩人妻一区二区三区| 免费观看高清无码视频| 热久久在线观看| 玖玖爱国产| 丝袜人妻被操视频| 亚洲毛片亚洲毛片亚洲毛片| 特級西西444WWw高清大膽| 欧美色图在线视频| 亚洲av二区| 黄色电影天堂网| 午夜无码熟妇丰满人妻| 五月六月丁香激情视频| 秋霞福利影院| 久久艹视频| 亚洲中文无码第一页| 一区二区三区无码精品| 一区二区视频在线| 麻豆传媒视频观看| 地表最强网红八月未央道具大秀 | 一级片av| AV资源在线| 人成视频免费观看| 深夜福利av| 69AV在线| 青青久久91| 毛片高清无码| 成人视频免费在线观看| 青青久久91| 成人短视频在线观看| 麻豆乱婬一区二区三区| 国产精品无| 亚洲成人无码一区| 大香蕉97| 国精品无码人妻一区二区三区| 综合中文字幕| i美女福利视频| 日本黄色a片| 中文字幕免费视频在线观看| 大香蕉精品欧美色综合2025| 国产午夜精品一区二区三区牛牛 | 中文字幕在线观看完整av| 性色在线| 91aaa在线观看| 久久午夜福利视频| 亚洲男人的天堂网| 国产女18毛片多18精品| 日韩AV成人无码久久电影| 成人久久久久| 日韩一级免费| 欧美做受高潮白| 99久久精品国产精品有折扣吗| 国产免费黄色av| 九一亚洲精品| 99在线视频免费观看| 精品国产AV鲁一鲁一区| 国产乱子伦精品免费,| 欧美日韩在线观看视频| 第一福利导航大全| 国产成人在线免费视频| 成人影片亚洲| 午夜爽爽爽| 欧美自拍视频| av乱伦小说| 激情性爱五月天| 欧美日韩加勒比| 91黑人| 中文字幕高清AⅤ| 精品无码视频在线| 亚州AV| 无套内射在线播放| 亚洲无码专区在线观看| 国产精品久久久无码专区| 中文字幕黄色片| 操比视频| 18成人网站在线观看| 欧美午夜福利在线观看| 欧美黄片在线免费看| 射死你天天日| www.a日逼| 大香蕉免费| 91探花视频精选在线播放| 日韩欧美日韩| 91精品国产日韩91久久久久久| 国产毛片久久久久久国产毛片| 国产精品视频99| 久久福利导航| 伊人婷婷大香蕉| 精品在线免费观看| 息子交尾一区二区三区| 口爆av| 黄色片在线视频| 99日韩| 中文字幕乱码亚洲无线码按摩| 免费看黄色的视频| 日韩一级黄片| www俺来也com| 欧美日本国产| 亚洲黄色免费看| 91无码精品| 国产成人精品无码片子的价格| 巜人妻初尝按摩师BD中字| 国产精品无| 日韩中出| 夜夜天天人人| 中文字幕免费视频在线观看| 成人无码日本动漫电影| 亚洲成人AV在线观看| 日操操| 欧美Aⅴ| 尤物一区二区| 五月天国产| 亚洲三级网站在线观看| 激情综合久久| 国产手机AV在线| 国产免费一级片| 国精产品秘一区二区| 人人色人人操人人干| 日本高清版色视频| 日韩黄色免费电影| 国产精品18在线| 亚洲福利视频网站| 免费人成年激情视频在线观看 | 国产精品AV在线| 国产日逼片| 亚洲va国产va天堂va久久| 国产无码电影在线观看| 国产精品成人AV在线| 国产无码高清在线| 激情五月天网站| 美女91网站色| 999精品视频| 精品人妻一区二区三区阅读全文| 亚洲欧美综合| 日本欧美在线视频| 国产在线| 99久在线精品99re8| 日韩无码人妻系列| 亚洲最大的成人网站| jizz日本护士| 欧美福利| 久久一级A片| 一级片在线观看视频| 五月六月丁香| 婷婷午夜| 免费日韩毛片| 国产色婷婷一区二区| 中文熟女| 成人中文字幕网站| www.色五月| 波多野结衣AV在线观看| 六月色婷婷| 亚洲黄色电影在线| 空姐白洁| 特级婬片A片AAA毛片AA做头| 天天爽天天日| 影音先锋av资源在线| 亚洲黄色精品| 撸一撸成人在线做爱视频。| 天天操夜夜干| 大香蕉伊人综合| 欧美午夜精品一区二区蜜桃| 国产成人午夜精品无码区久久麻豆 | 亚洲经典免费视频| 国产看片网站| 亚洲色成人网站www永久四虎 | 一级a免一级a做免费线看内祥| 国产成人精品AV在线观| 波多野结衣在线观看一区二区| 亚洲AV成人无码网天堂| 国产91白丝在线播放| 亚洲精品一区二区三区| 蜜桃视频日韩| 亚洲天堂一区| 午夜激情久久| 久久伊人大香蕉| 成人网站无码| 日韩中文毛片| 青青国产在线| 国产精品午夜在线观看| 大香蕉操逼网| 无码欧精品亚洲日韩一区| 中文字幕偷拍| 特级西西人体444www高清| 五月天婷婷影院| 丁香五月天av| 无码精品一区二区三区在线播放| 思思热视频在线观看| 国产综合亚洲精品一区二| 99国产精品免费视频观看8| 中文字幕无码精品三级在线欧美| 亚洲精品大片| 高清视频一区| 日韩人妻无码精品| 日韩成人性爱| 久热中文在线观看精品视频| 91久久婷婷| 亚洲免费小黄片| 欧美口爆| 欧美在线视频一区| 亚洲成人77777| 高清无码视频在线播放| 在线观看免费一区| 午夜福利高清在线观看| 国产毛片一区二区| 人人操日本| 国产无遮挡又黄又爽免费网站 | 日p视频在线观看| 国产做受91| 99视频在线免费播放| 成人无码精品| 五月婷婷五月| 欧美A片在线免费观看| 九哥操逼视频| 黄色免费一级片| 国产美女操逼网站| 小黄片在线| 亚洲成人不卡| 欧美日韩一区二区三区在线电影| 国产黄色视频免费观看| 日韩码波多野结衣| 就爱操逼网| 一区二区三区无码在线观看| 成人网站欧美| 高清毛片AAAAAAAAA片| 黄色成人在线视频| 伊人综合大香蕉| 久草中文在线视频| 影音先锋aV成人无码电影| 国产黄色无码| 免费人成视频观看| 在线一区二区三区| 日韩无码免费播放| 国产在线视频网站| 91爱看| 综合天堂AV久久久久久久| 国产精品久久久久无码| 亚洲综合图色40p| 高清无码免费视频| 亚洲高清av| 精品人妻一区二区三区阅读全文| 一级a一级a爱片兔兔软件| 春色激情| 琪琪色在线视频| 国产免费www| 黄色一级生活片| 亚洲在线视频观看| 欧美成人性爱网站| 中文字幕巨肉乱码中文乱码| 青娱在线视频| 亚洲无码三级| 日逼网站免费观看| 久久九九热| 性欧美日韩| 亚洲精品字幕| 不卡AV在线| 操逼电影网站| 国产小视频在线免费观看| 麻豆国产成人AV一区二区三区| 91工厂露脸熟女| 激情黄色视频| 久热视频在线| 久久电影精品| 爱搞在线观看wwww| 在线观看视频一区| 亚洲人网站| av网站免费看| 欧美一级日韩| 国产一区在线观看视频| AV网站入口| 久草社区| 岛国AV免费看| 国产艹| 91丨九色丨熟女泻火| 国产字幕在线观看| 秋霞无码一区二区三区| 日本三级视频| 乱伦视频网站| 丰满人妻精品一区二区在线| 免费69视频看片| 免费污视频在线观看| 日韩精品毛片一区二区视频免费| 亚洲三级视频| 久久精品三级片| 国产成人自拍在线| 澳门四虎影院| 亚洲国产成人AV| 免费污视频在线观看| 丁香五月婷婷视频| 天天扣天天操| 在线无码| 日本不卡一区| 青青草无码成人天堂免费| 91蝌蚪网| 欧美成人免费电影| 人人射人人爱| 精品一区二区三区四区五区六区| 99爱爱视频| 大香蕉综合伊人| 日韩无码不卡电影| AV电影免费看| 日韩免费高清在线视频| 国产成人久久| www.骚逼| 日韩精品免费| 水蜜桃网址| 波多野结衣在线无码| 成人毛片| 国产A片免费| 97精品国产97久久久久久免费| 99性爱| 久久艹久久| 自拍亚洲欧美| 亚洲色图网站| 中文字幕视频免费| 黄色福利视频在线观看| 欧美日在线观看| 久久久永久免费视频| 1204手机看片| 99r6热只有精品免费观看| 老女人操屄| AV青青草原| 日韩欧美中文在线观看| 欧美精品在线免费| 黄色电影天堂网站| 麻豆三级精品| 人人操人人摸人人射| 欧美激情视频在线| 日韩肏屄视频在线观看| www.日韩系列| 欧美激情性爱网站| 日本亚洲欧洲免费| 亚洲成人人妻| 91视频黄| 中文字幕av网站| 亚洲欧洲精品成人久久曰影片| 日韩精品人妻| 一区无码精品| 人人操狠狠操| 激情播播网| 爱草在线| 欧美老女人性爱视频| 在线欧美亚洲| 国产艹| 男人天堂视频网| 就要草| 天天日天天插| AV在线天堂| 强伦人妻一区二区三区| 日韩无任何视频在线观看| 国产精品毛片A√一区| 91色视频在线观看| 亚洲成人在线一区| 亚洲无码人妻在线| 大地av| 黄色激情五月| 2018人人操| 91久久久久久| 51黄片库| 久久大香蕉视频| 夜夜嗨av无码一区二区三区| 苏妲己一级婬片A片| 69成人精品| 在线www| 91激情网| 99日韩| 日本少妇高潮| 久久久麻豆| 丰满人妻一区二区免费看| 成人性爱自拍| 国产精品一区二区免费| 国产精品高| 丰满人妻无码| 淫揉BBB揉揉揉BBBBB| 成人在线免费观看视频| 黄色电影免费网站| 精品人人操| 真实白嫖91探花无码| 黄色片视频| 色欲一区| 亚洲性爱AV| 日本久久人体视频| 亚洲乱乱| 人妻av中文无码| 无码人妻精品一区二区三区蜜桃91 | 激情综合网五月| av在线资源网| 国产成人午夜| 国产最新在线视频| 干老女人逼| 日韩免费小视频| 九色国产在线| 午夜激情在线观看| 北条麻妃一区二区三区在线观看 | 健身房被教练3p喷水了| 天天干天天操天天拍| 少妇搡BBBB搡BBB搡HD(| 熟女91视频| 亚洲视频在线观看免费| 五月婷婷性爱| 亚洲第一成人网址| 亚人精品中文字幕在线观看| 国产激情网站| 天天精品无码| 刘玥一级婬片A片AAA| 亚洲精品中文字幕在线观看| 人人插人人摸| 激情五月毛片| 天堂8在线视频| 大黄网站在线观看| 尤物视频网址| 大香蕉在线视频75| 天天色天| 人妻大屁股-91Porn| 午夜黄电影| 免费看黄色的网站| 天天日夜夜草| 91九色蝌蚪| 免费A级| 亚洲AV无码成人专区| 亚洲精品97久久中文字幕| 国产海角视频| 久草高清视频| 四虎av在线| 亚洲无码中文字幕在线观看| 亚洲最新在线观看| 婷婷国产精品| 国产女人在线| 四虎影院最新地址| 欧美搡BBBB搡BBB| 国产乱国产乱老熟300部视频| 亚洲午夜福利一区二区三区| 欧美性猛交XXXX乱大交HD| 亚洲欧美日韩国产| 色av网| 欧美中文字幕| 婷婷丁香激情五月天| 久久婷婷精品| 国产高清A片| 天天看天天操| 亚洲欧美日本在线| 日本特黄AA片免费视频| 操逼视频免费看| 动漫一区二区三区| 三级久久久| 色射影院| 国产精品欧美综合| 夜夜嗨老熟女AV一区二区三区 | 91精品国产乱码久久久| A一级黄色片| 亚洲三级片在线观看| 欧美黄色一级网站| 亚洲av电影网| 欧美成人一区二区三区片| 翔田千里在线播放| 久久蜜| 偷拍一区二区三区| 91网站在线看| 小黄片在线免费观看| 久久XXX| 亚洲猛男操逼欧美国产视频| 18禁一区二区| 久久精品视频在线| 日韩三区在线| 一级成人A片| 成人在线视频一区| 自拍视频在线观看| 天堂素人| 不卡日韩| 国产亚洲久一区二区写真| 久操久| 五月丁香在线视频| 超碰免费99| 亚洲国产激情| 国产一区免费观看| 丰满人妻一区二区三区精品高 | 三上悠亚无码破解69XXX| 国产精品三级片| 又黄又爽的视频| 婷婷激情综合| 性爱黄色视频| 伊人网在线视频| 人妻天天爽夜夜爽| 强伦轩人妻一区二区三区70后| 日韩色情在线| 天天色天天| 欧美噜噜| 黄色视频免费看| 天堂网亚洲| 亚洲中文字幕在线播放| 亚洲AV综合网| gay成人在线观看| 91人人操人人爽| 亚洲人气无码AV| 欧美国产三级| 国产g蝌蚪| 亚欧久久| 精品一本道| 久久女人视频| 成人手机在线视频| 久久久1| 丰满熟妇人妻无码视频| 91人妻人人操| 亚洲人妻影院| 国产操老女人| 无码秘人妻一区二区三-百度 | 日本高清版色视频| 欧美成人精品在线观看| 丁香五月婷婷综合网| 人人澡人人爱| 亚洲一二三四区| 先锋影音在线资源| 人人插人人澡| 欧美AAAAAA| 国产一区二区不卡亚洲涩情| 日本在线免费观看| 午夜69成人做爱视频网站| 国产精品久久久久久亚洲毛片| 日韩黄色视频网站| 国产成人三级片在线观看| 一级电影网站| 粉嫩99精品99久久久久| 欧美日韩逼| 日韩成人无码电影| 天堂网中文字幕| 97国产视频| 色五月在线视频| 91探花精品偷拍在线播放| 五月激情六月丁香| 三级A片视频| 丁香婷婷色五月激情综合三级三级片欧美日韩国 | 国产成人av网站| 欧美精品黄| 婷婷激情综合| 不卡的av在线| 色综合99久久久无码国产精品| 香蕉福利视频| 日韩AV无码一区二区三区| 台湾成人在线视频| 国产伦精品一区二区三区妓女| 丝袜一区二区三区| 水多多成人网站A片| 国产精品久久久精品| 人人超碰人人| 日本少妇激情视频| 苍井空一区| 大香蕉在线伊人| 韩国无码成人电影啊荒| 婷婷色导航| 日韩亚洲欧美在线观看| 久久久久久久久久久国产精品| 久久精品人妻| 国产91精品在线观看| 男人的天堂久久| 麻豆蜜桃wwww精品无码| 欧美性猛交XXXX乱大交蜜桃| 97国产资源| 干干影院| 欧美一区二区三区婷婷五月| 色婷婷在线观看视频| 超碰九九热| 亚洲伊人av| 欧美日韩免费在线观看| 免费黄色视频在线| 欧美一级特黄A片免费观看| 嫩草在线观看| 欧美日韩无码| 久久久精品欧美| 中文在线第一页| aaa少妇| 97人人插| 激情人妻AV| 亚洲毛片亚洲毛片亚洲毛片| 丝袜足交视频在线观看| 丁香五月av| 亚洲成人性爱网站| 国产色色网| 亚洲在线无码播放| AⅤ中文字幕在线免费观看 | 亚洲AV无码成人网站国产网站| 日韩高清无码一区二区| 亚洲精品无码中文字幕| 欧美区亚洲区| 日本少妇BBw| 天天扣天天操| 亚洲一二三| 狼友在线观看| 69xx视频| 成人无码精品亚洲| 国产a片视频| 天堂麻豆天美| 亚洲欧美成人在线| 国产黄A片免费网站免费| 色老板视频在线观看| 免费作爱视频| 欧美激情久久久| 好吊AV| 黄色日逼视频 | 五月天激情综合网| 免费成人一级片| 亚洲无码av电影| 120分钟婬片免费看| 亚洲国产精品自在自线| 五月婷婷在线观看| 2014天堂网| 日韩中文字幕人妻| 无码在线观看免费视频| 亚洲色鬼| 蜜臀久久精品久久久久| 亚洲一区图片| 国产一级在线观看| 国产一级特黄A片| 波多野结衣av在线播放| 国产69页| h片网站在线观看| www.欧美视频| 成人黄色AV网站| 久久九九国产精品怡红院| 夜夜AV| 亚洲色无码人妻激情| 欧美天堂在线| 翔田千里珍藏版无码| 韩国无码专区| 农村一级婬片A片AAA毛片古装| 蜜桃av秘无码一区三| 国产中文字幕波多| 超碰成人欧美| 无码AV电影在线观看| 欧美老女人的逼| 精品成人Av一区二区三区| 激情av在线观看| 操逼AV无码| 成人av小说网站| 青春草视频| 久久久影院| 国产综合第一页| 成人视频一区二区三区| 免费内射视频| 久久久久电影| 先锋影音一区二区| 三级片无码麻豆视频| 国产精品无码在线播放| 亚洲精品一区二区三区无码电影| 69人人| 少妇搡BBBB搡BBB搡小说| 欧美AAAAAAAAAA特级| 久久毛片基地| 免费三级怡红院| 国产成人精品久久二区二区91 | 成人视频在线观看免费| 天天添天天干| 欧美国产日韩在线| 欧美日韩成人在线视频| 全国最大成人网| www.第四色| 亚洲欧洲免费视频| 久久精品视频在线观看| 超碰免费在线观看| 亚洲人妻中文字幕| 欧美一级爱爱| 黄色日逼视频| 青青操逼| 999精品视频在线| 国产午夜精品视频| 国产激情内射| 操女人的网站| 男女一区二区三区| 久久精彩免费视频| 探花极品无套大学生| 无码水蜜桃一区二区| 精品国产午夜福利在线观看| 国产Av高清|