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

10000 字講清楚 Spring Boot 注解原理

共 6892字,需瀏覽 14分鐘

 ·

2021-10-10 03:51

今日推薦

借助Redis鎖,完美解決高并發(fā)秒殺問題

還在直接用JWT做鑒權(quán)?JJWT真香

Spring Boot 操作 Redis 的各種實(shí)現(xiàn)

Fluent Mybatis 牛逼!

Nginx 常用配置清單

這玩意比ThreadLocal叼多了,嚇得我趕緊分享出來。

首先,先看SpringBoot的主配置類:
@SpringBootApplication
public?class?StartEurekaApplication
{
????public?static?void?main(String[]?args)
????
{
????????SpringApplication.run(StartEurekaApplication.class,?args);
????}
}

點(diǎn)進(jìn)@SpringBootApplication來看,發(fā)現(xiàn)@SpringBootApplication是一個(gè)組合注解。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters?=?{
??????@Filter(type?=?FilterType.CUSTOM,?classes?=?TypeExcludeFilter.class),
??????@Filter(type?
=?FilterType.CUSTOM,?classes?=?AutoConfigurationExcludeFilter.class)?})
public?@interface?SpringBootApplication?
{

}

首先我們先來看 @SpringBootConfiguration:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public?@interface?SpringBootConfiguration?{
}

可以看到這個(gè)注解除了元注解以外,就只有一個(gè)@Configuration,那也就是說這個(gè)注解相當(dāng)于@Configuration,所以這兩個(gè)注解作用是一樣的,它讓我們能夠去注冊一些額外的Bean,并且導(dǎo)入一些額外的配置。

那@Configuration還有一個(gè)作用就是把該類變成一個(gè)配置類,不需要額外的XML進(jìn)行配置。所以@SpringBootConfiguration就相當(dāng)于@Configuration。進(jìn)入@Configuration,發(fā)現(xiàn)@Configuration核心是@Component,說明Spring的配置類也是Spring的一個(gè)組件。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public?@interface?Configuration?{
????@AliasFor(
????????annotation?=?Component.class
????)
????String?value()?default?""
;
}

繼續(xù)來看下一個(gè)@EnableAutoConfiguration,這個(gè)注解是開啟自動配置的功能。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public?@interface?EnableAutoConfiguration?
{
????String?ENABLED_OVERRIDE_PROPERTY?=?"spring.boot.enableautoconfiguration";

????Class[]?exclude()?default?{};

????String[]?excludeName()?default?{};
}

可以看到它是由 @AutoConfigurationPackage,@Import(EnableAutoConfigurationImportSelector.class)這兩個(gè)而組成的,我們先說@AutoConfigurationPackage,他是說:讓包中的類以及子包中的類能夠被自動掃描到spring容器中。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import({Registrar.class})
public?@interface?AutoConfigurationPackage?
{
}

使用@Import來給Spring容器中導(dǎo)入一個(gè)組件 ,這里導(dǎo)入的是Registrar.class。來看下這個(gè)Registrar:

static?class?Registrar?implements?ImportBeanDefinitionRegistrar,?DeterminableImports?{
????????Registrar()?{
????????}

????????public?void?registerBeanDefinitions(AnnotationMetadata?metadata,?BeanDefinitionRegistry?registry)?{
????????????AutoConfigurationPackages.register(registry,?(new?AutoConfigurationPackages.PackageImport(metadata)).getPackageName());
????????}

????????public?Set?determineImports(AnnotationMetadata?metadata)?{
????????????return?Collections.singleton(new?AutoConfigurationPackages.PackageImport(metadata));
????????}
????}

就是通過以上這個(gè)方法獲取掃描的包路徑,可以debug查看具體的值:

那metadata是什么呢,可以看到是標(biāo)注在@SpringBootApplication注解上的DemosbApplication,也就是我們的主配置類Application:

其實(shí)就是將主配置類(即@SpringBootApplication標(biāo)注的類)的所在包及子包里面所有組件掃描加載到Spring容器。因此我們要把DemoApplication放在項(xiàng)目的最高級中(最外層目錄)。

看看注解@Import(AutoConfigurationImportSelector.class),@Import注解就是給Spring容器中導(dǎo)入一些組件,這里傳入了一個(gè)組件的選擇器:AutoConfigurationImportSelector。

可以從圖中看出AutoConfigurationImportSelector 繼承了 DeferredImportSelector 繼承了 ImportSelector,ImportSelector有一個(gè)方法為:selectImports。將所有需要導(dǎo)入的組件以全類名的方式返回,這些組件就會被添加到容器中。

public?String[]?selectImports(AnnotationMetadata?annotationMetadata)?{
????if?(!this.isEnabled(annotationMetadata))?{
????????return?NO_IMPORTS;
????}?else?{
????????AutoConfigurationMetadata?autoConfigurationMetadata?=?AutoConfigurationMetadataLoader.loadMetadata(this.beanClassLoader);
????????AutoConfigurationImportSelector.AutoConfigurationEntry?autoConfigurationEntry?=?
????????this.getAutoConfigurationEntry(autoConfigurationMetadata,?annotationMetadata);
????????return?StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());
????}
}

會給容器中導(dǎo)入非常多的自動配置類(xxxAutoConfiguration);就是給容器中導(dǎo)入這個(gè)場景需要的所有組件,并配置好這些組件。

有了自動配置類,免去了我們手動編寫配置注入功能組件等的工作。那是如何獲取到這些配置類的呢,看看下面這個(gè)方法:

protected?AutoConfigurationImportSelector.AutoConfigurationEntry?
??getAutoConfigurationEntry(AutoConfigurationMetadata?autoConfigurationMetadata,?AnnotationMetadata?annotationMetadata)?
{
????if?(!this.isEnabled(annotationMetadata))?{
????????return?EMPTY_ENTRY;
????}?else?{
????????AnnotationAttributes?attributes?=?this.getAttributes(annotationMetadata);
????????List?configurations?=?this.getCandidateConfigurations(annotationMetadata,?attributes);
????????configurations?=?this.removeDuplicates(configurations);
????????Set?exclusions?=?this.getExclusions(annotationMetadata,?attributes);
????????this.checkExcludedClasses(configurations,?exclusions);
????????configurations.removeAll(exclusions);
????????configurations?=?this.filter(configurations,?autoConfigurationMetadata);
????????this.fireAutoConfigurationImportEvents(configurations,?exclusions);
????????return?new?AutoConfigurationImportSelector.AutoConfigurationEntry(configurations,?exclusions);
????}
}

我們可以看到getCandidateConfigurations()這個(gè)方法,他的作用就是引入系統(tǒng)已經(jīng)加載好的一些類,到底是那些類呢:

protected?List?getCandidateConfigurations(AnnotationMetadata?metadata,?AnnotationAttributes?attributes)?{
????List?configurations?=?SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(),?this.getBeanClassLoader());
????Assert.notEmpty(configurations,?
????"No?auto?configuration?classes?found?in?META-INF/spring.factories.?If?you?are?using?a?custom?packaging,?make?sure?that?file?is?correct.");
????return?configurations;
}
public?static?List?loadFactoryNames(Class?factoryClass,?@Nullable?ClassLoader?classLoader)?{
????String?factoryClassName?=?factoryClass.getName();
????return?(List)loadSpringFactories(classLoader).getOrDefault(factoryClassName,?Collections.emptyList());
}

會從META-INF/spring.factories中獲取資源,然后通過Properties加載資源:

private?static?Map>?loadSpringFactories(@Nullable?ClassLoader?classLoader)?{
????MultiValueMap?result?=?(MultiValueMap)cache.get(classLoader);
????if?(result?!=?null)?{
????????return?result;
????}?else?{
????????try?{
????????????Enumeration?urls?=?classLoader?!=?
??????????null???classLoader.getResources("META-INF/spring.factories")?:?ClassLoader.getSystemResources("META-INF/spring.factories");
????????????LinkedMultiValueMap?result?=?new?LinkedMultiValueMap();

????????????while(urls.hasMoreElements())?{
????????????????URL?url?=?(URL)urls.nextElement();
????????????????UrlResource?resource?=?new?UrlResource(url);
????????????????Properties?properties?=?PropertiesLoaderUtils.loadProperties(resource);
????????????????Iterator?var6?=?properties.entrySet().iterator();

????????????????while(var6.hasNext())?{
????????????????????Map.Entry?entry?=?(Map.Entry)var6.next();
????????????????????String?factoryClassName?=?((String)entry.getKey()).trim();
????????????????????String[]?var9?=?StringUtils.commaDelimitedListToStringArray((String)entry.getValue());
????????????????????int?var10?=?var9.length;

????????????????????for(int?var11?=?0;?var11?????????????????????????String?factoryName?=?var9[var11];
????????????????????????result.add(factoryClassName,?factoryName.trim());
????????????????????}
????????????????}
????????????}

????????????cache.put(classLoader,?result);
????????????return?result;
????????}?catch?(IOException?var13)?{
????????????throw?new?IllegalArgumentException("Unable?to?load?factories?from?location?[META-INF/spring.factories]",?var13);
????????}
????}
}

可以知道SpringBoot在啟動的時(shí)候從類路徑下的META-INF/spring.factories中獲取EnableAutoConfiguration指定的值,將這些值作為自動配置類導(dǎo)入到容器中,自動配置類就生效,幫我們進(jìn)行自動配置工作。以前我們需要自己配置的東西,自動配置類都幫我們完成了。如下圖可以發(fā)現(xiàn)Spring常見的一些類已經(jīng)自動導(dǎo)入。

接下來看@ComponentScan注解,@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) }),這個(gè)注解就是掃描包,然后放入spring容器。

@ComponentScan(excludeFilters?=?{
??@Filter(type?=?FilterType.CUSTOM,classes?=?{TypeExcludeFilter.class}),?
??@Filter(type?
=?FilterType.CUSTOM,classes?=?{AutoConfigurationExcludeFilter.class})})
public?@interface?SpringBootApplication?
{}

總結(jié)下@SpringbootApplication:就是說,他已經(jīng)把很多東西準(zhǔn)備好,具體是否使用取決于我們的程序或者說配置。

接下來繼續(xù)看run方法:

public?static?void?main(String[]?args)?{
????????SpringApplication.run(Application.class,?args);
????}

來看下在執(zhí)行run方法到底有沒有用到哪些自動配置的東西,我們點(diǎn)進(jìn)run:

public?ConfigurableApplicationContext?run(String...?args)?{
????//計(jì)時(shí)器
????StopWatch?stopWatch?=?new?StopWatch();
????stopWatch.start();
????ConfigurableApplicationContext?context?=?null;
????Collection?exceptionReporters?=?new?ArrayList();
????this.configureHeadlessProperty();
????//監(jiān)聽器
????SpringApplicationRunListeners?listeners?=?this.getRunListeners(args);
????listeners.starting();

????Collection?exceptionReporters;
????try?{
????????ApplicationArguments?applicationArguments?=?new?DefaultApplicationArguments(args);
????????ConfigurableEnvironment?environment?=?this.prepareEnvironment(listeners,?applicationArguments);
????????this.configureIgnoreBeanInfo(environment);
????????Banner?printedBanner?=?this.printBanner(environment);
????????//準(zhǔn)備上下文
????????context?=?this.createApplicationContext();
????????exceptionReporters?=?this.getSpringFactoriesInstances(SpringBootExceptionReporter.class,???????????????????????new?Class[]{ConfigurableApplicationContext.class},?context);
????????//預(yù)刷新context
????????this.prepareContext(context,?environment,?listeners,?applicationArguments,?printedBanner);
????????//刷新context
????????this.refreshContext(context);
????????//刷新之后的context
????????this.afterRefresh(context,?applicationArguments);
????????stopWatch.stop();
????????if?(this.logStartupInfo)?{
????????????(new?StartupInfoLogger(this.mainApplicationClass)).logStarted(this.getApplicationLog(),?stopWatch);
????????}

????????listeners.started(context);
????????this.callRunners(context,?applicationArguments);
????}?catch?(Throwable?var10)?{
????????this.handleRunFailure(context,?var10,?exceptionReporters,?listeners);
????????throw?new?IllegalStateException(var10);
????}

????try?{
????????listeners.running(context);
????????return?context;
????}?catch?(Throwable?var9)?{
????????this.handleRunFailure(context,?var9,?exceptionReporters,?(SpringApplicationRunListeners)null);
????????throw?new?IllegalStateException(var9);
????}
}

那我們關(guān)注的就是 refreshContext(context); 刷新context,我們點(diǎn)進(jìn)來看。

private?void?refreshContext(ConfigurableApplicationContext?context)?{
???refresh(context);
???if?(this.registerShutdownHook)?{
??????try?{
?????????context.registerShutdownHook();
??????}
??????catch?(AccessControlException?ex)?{
?????????//?Not?allowed?in?some?environments.
??????}
???}
}

我們繼續(xù)點(diǎn)進(jìn)refresh(context);

protected?void?refresh(ApplicationContext?applicationContext)?{
???Assert.isInstanceOf(AbstractApplicationContext.class,?applicationContext);
???((AbstractApplicationContext)?applicationContext).refresh();
}

他會調(diào)用 ((AbstractApplicationContext) applicationContext).refresh();方法,我們點(diǎn)進(jìn)來看:

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.
?????????postProcessBeanFactory(beanFactory);
?????????//?Invoke?factory?processors?registered?as?beans?in?the?context.
?????????invokeBeanFactoryPostProcessors(beanFactory);
?????????//?Register?bean?processors?that?intercept?bean?creation.
?????????registerBeanPostProcessors(beanFactory);
?????????//?Initialize?message?source?for?this?context.
?????????initMessageSource();
?????????//?Initialize?event?multicaster?for?this?context.
?????????initApplicationEventMulticaster();
?????????//?Initialize?other?special?beans?in?specific?context?subclasses.
?????????onRefresh();
?????????//?Check?for?listener?beans?and?register?them.
?????????registerListeners();
?????????//?Instantiate?all?remaining?(non-lazy-init)?singletons.
?????????finishBeanFactoryInitialization(beanFactory);
?????????//?Last?step:?publish?corresponding?event.
?????????finishRefresh();
??????}catch?(BeansException?ex)?{
?????????if?(logger.isWarnEnabled())?{
????????????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;
??????}finally?{
?????????//?Reset?common?introspection?caches?in?Spring's?core,?since?we
?????????//?might?not?ever?need?metadata?for?singleton?beans?anymore...
?????????resetCommonCaches();
??????}
???}
}

由此可知,就是一個(gè)spring的bean的加載過程。繼續(xù)來看一個(gè)方法叫做 onRefresh():

protected?void?onRefresh()?throws?BeansException?{
???//?For?subclasses:?do?nothing?by?default.
}

他在這里并沒有直接實(shí)現(xiàn),但是我們找他的具體實(shí)現(xiàn):

比如Tomcat跟web有關(guān),我們可以看到有個(gè)ServletWebServerApplicationContext:

@Override
protected?void?onRefresh()?{
???super.onRefresh();
???try?{
??????createWebServer();
???}
???catch?(Throwable?ex)?{
??????throw?new?ApplicationContextException("Unable?to?start?web?server",?ex);
???}
}

可以看到有一個(gè)createWebServer();方法他是創(chuàng)建web容器的,而Tomcat不就是web容器,那是如何創(chuàng)建的呢,我們繼續(xù)看:

private?void?createWebServer()?{
???WebServer?webServer?=?this.webServer;
???ServletContext?servletContext?=?getServletContext();
???if?(webServer?==?null?&&?servletContext?==?null)?{
??????ServletWebServerFactory?factory?=?getWebServerFactory();
??????this.webServer?=?factory.getWebServer(getSelfInitializer());
???}
???else?if?(servletContext?!=?null)?{
??????try?{
?????????getSelfInitializer().onStartup(servletContext);
??????}
??????catch?(ServletException?ex)?{
?????????throw?new?ApplicationContextException("Cannot?initialize?servlet?context",
???????????????ex);
??????}
???}
???initPropertySources();
}

factory.getWebServer(getSelfInitializer());他是通過工廠的方式創(chuàng)建的。

public?interface?ServletWebServerFactory?{
???WebServer?getWebServer(ServletContextInitializer...?initializers);
}

可以看到 它是一個(gè)接口,為什么會是接口。因?yàn)槲覀儾恢故荰omcat一種web容器。

我們看到還有Jetty,那我們來看TomcatServletWebServerFactory:

@Override
public?WebServer?getWebServer(ServletContextInitializer...?initializers)?{
???Tomcat?tomcat?=?new?Tomcat();
???File?baseDir?=?(this.baseDirectory?!=?null)???this.baseDirectory
?????????:?createTempDir("tomcat");
???tomcat.setBaseDir(baseDir.getAbsolutePath());
???Connector?connector?=?new?Connector(this.protocol);
???tomcat.getService().addConnector(connector);
???customizeConnector(connector);
???tomcat.setConnector(connector);
???tomcat.getHost().setAutoDeploy(false);
???configureEngine(tomcat.getEngine());
???for?(Connector?additionalConnector?:?this.additionalTomcatConnectors)?{
??????tomcat.getService().addConnector(additionalConnector);
???}
???prepareContext(tomcat.getHost(),?initializers);
???return?getTomcatWebServer(tomcat);
}

那這塊代碼,就是我們要尋找的內(nèi)置Tomcat,在這個(gè)過程當(dāng)中,我們可以看到創(chuàng)建Tomcat的一個(gè)流程。

如果不明白的話, 我們在用另一種方式來理解下,大家要應(yīng)該都知道stater舉點(diǎn)例子。

<dependency>
????<groupId>org.springframework.bootgroupId>
????<artifactId>spring-boot-starter-data-redisartifactId>
dependency>
<dependency>
????<groupId>org.springframework.bootgroupId>
????<artifactId>spring-boot-starter-freemarkerartifactId>
dependency>

首先自定義一個(gè)stater。

<parent>
????<groupId>org.springframework.bootgroupId>
????<artifactId>spring-boot-starter-parentartifactId>
????<version>2.1.4.RELEASEversion>
????<relativePath/>
parent>
<groupId>com.zgwgroupId>
<artifactId>gw-spring-boot-starterartifactId>
<version>1.0-SNAPSHOTversion>

<dependencies>
????<dependency>
????????<groupId>org.springframework.bootgroupId>
????????<artifactId>spring-boot-autoconfigureartifactId>
????dependency>
dependencies>

我們先來看maven配置寫入版本號,如果自定義一個(gè)stater的話必須依賴spring-boot-autoconfigure這個(gè)包,我們先看下項(xiàng)目目錄。

public?class?GwServiceImpl??implements?GwService{
????@Autowired
????GwProperties?properties;

????@Override
????public?void?Hello()
????
{
????????String?name=properties.getName();
????????System.out.println(name+"說:你們好啊");
????}
}

我們做的就是通過配置文件來定制name這個(gè)是具體實(shí)現(xiàn)。

@Component
@ConfigurationProperties(prefix?=?"spring.gwname")
public?class?GwProperties?{

????String?name="zgw";

????public?String?getName()?{
????????return?name;
????}

????public?void?setName(String?name)?{
????????this.name?=?name;
????}
}

這個(gè)類可以通過@ConfigurationProperties讀取配置文件。

@Configuration
@ConditionalOnClass(GwService.class)??//掃描類
@EnableConfigurationProperties(GwProperties.class)?//讓配置類生效
public?class?GwAutoConfiguration?
{

????/**
????*?功能描述?托管給spring
????*?@author?zgw
????*?@return
????*/

????@Bean
????@ConditionalOnMissingBean
????public?GwService?gwService()
????
{
????????return?new?GwServiceImpl();
????}
}

這個(gè)為配置類,為什么這么寫因?yàn)?,spring-boot的stater都是這么寫的,我們可以參照他仿寫stater,以達(dá)到自動配置的目的,然后我們在通過spring.factories也來進(jìn)行配置。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.gw.GwAutoConfiguration
然后這樣一個(gè)簡單的stater就完成了,然后可以進(jìn)行maven的打包,在其他項(xiàng)目引入就可以使用。
來自:博客園

鏈接:cnblogs.com/cmt/p/14553189.html


推薦文章


1、一款高顏值的 SpringBoot+JPA 博客項(xiàng)目
2、超優(yōu) Vue+Element+Spring 中后端解決方案
3、推薦幾個(gè)支付項(xiàng)目!
4、推薦一個(gè) Java 企業(yè)信息化系統(tǒng)
5、一款基于 Spring Boot 的現(xiàn)代化社區(qū)(論壇/問答/社交網(wǎng)絡(luò)/博客)
瀏覽 46
點(diǎn)贊
評論
收藏
分享

手機(jī)掃一掃分享

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

手機(jī)掃一掃分享

分享
舉報(bào)

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

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 婷婷五月丁香五月| 国产在线看片| 国产三级一区| 一级黄色影片| 久久午夜福利视频| 日批视频在线观看| 国产一区二区电影| 黄色在线不卡| 日本黄色片在线播放| 插穴网| 亚洲一区| 久精品视频| 亚洲中文字幕一区二区| 亚洲无码91| 精品丰满人妻一区二区三区免费观 | 97人妻精品| 熟妇人妻中文字幕无码老熟妇| 日韩高清成人无码| 欧美在线A| 精品国产999久久久免费| 一级片三级片| 日本三级片免费| 狠狠躁日日躁夜夜躁A片视频 | 操碰99| 国产人妻人伦精品1国产丝袜| 天天插天天| 新超碰在线观看| 黄色色情小说| 久久午夜无码鲁片午夜精品男男| 迷奸91| 夜夜骚AV一二三区无码| 国内操逼视频| 亚洲天堂久久| 国产黄色视频在线| 精品无码在线观看| 亚洲第一网站| 日韩操B| 五月天黄色电影| 五月丁香婷婷综合| 操逼A片| 中文字幕无码av| 免费a级毛片| 欧美综合第一页| 国产成人精品久久| 超碰一区二区三区| 三级片无码在线| 97人妻在线| 久色亚洲| 狠狠狠狠狠狠狠狠狠狠| 青青草视频免费观看| 精品视频导航| 美日韩一级| 岛国av无码免费| 黄网免费看| AV三级片网站| 美女视频一区二区三区| 土耳其电影《爱与罚》| 巨乳国产一区| 黄片在线免费观看| 国产精品国产伦子伦露看| 噜噜视频| 偷拍三区| 亚洲操逼图| 大香蕉一区二区三区| 国产AV一级| 久久婷婷国产| 人妻精品一区二区三区| 日本一级黃色大片看免费| 亚洲秘无码一区二区三区,| AA黄色片| 大香蕉999| 三级三级久久三级久久18| 天美精东蜜桃91| 欧美三级欧美成人高清| 日本性爱无码| 亚洲小说区图片区| 亚洲小说区图片区| 久久午夜无码鲁丝片午夜精| 国产人人看| 女人久久久| 亚洲毛片网| 91小仙女jK白丝袜呻吟| jiujiuav| 国产精品久久久久久久久久王安宇| 成人免费无码| 亚洲精品99| 麻豆91视频| 天天干天天操天天| 免费在线观看黄| 另类性姿势BBwBBW| 懂色AV| 加勒比黑人和翔田千里在线播放 | 国产农村乱婬片A片AAA图片| 息子交尾一区二区三区| 中国丰满妇BBwBBwHD| 亚洲欧美另类色图| 91搞| 91亚洲精选| 激情综合网五月| 欧美一卡| av色色| 四虎成人精品无码永久在线的客服 | 麻豆精品传媒2021md| 成人网站www污污污网站公司| 成人激情免费视频| 五月色丁香| 精品成人一区二区三区| 国产人妻精品| 日韩无码观看| 国内自拍偷拍| 亚洲性爱网站| 国产91一区在线精品| 黄总av| 夜夜撸天天日| 高清无码成人视频| 波多野结衣国产区42部| 免费看毛片网站| 国产精品三| 婷婷五月丁香激情| 玖玖爱国产| 精品在线免费视频| 欧美激情五月| 青草娱乐| 亚洲色婷| 色综合99久久久无码国产精品| 国产女人与禽zOz0性| 国产91探花精品一区二区| 欧美极品另类| 天天干视频在线| 亚洲专区在线| 亚洲欧美在线观看视频| 在线不卡| 91人妻视频| 无码免费中文字幕| 亚洲中文字幕无码在线观看| TheAV精尽人亡av| 午夜福利电影网| 爱爱视频天天干| 69AV在线播放| 久久久久大香蕉| 中文字幕一区二区三区四区| 五月天青青草超碰免费公开在线观看 | 狠狠操婷婷| 无码福利视频| 特級西西444WWw高清大膽| 一级黄色片在线观看| 中文字幕亞洲高清手機版第617 | 国产黄色三级片| 手机在线小视频| 中国女人如毛片| 高清在线无码视频| 狠狠操电影| 日韩在线播放视频| 国产理论电影在线观看| 无码国产精品一区二区免费96| 97精品视频| 444444免费高清在线观看电视剧的注意| 影音先锋色色| 黄色视频日本免费| 日韩AV小电影| 亚洲色欲色欲www在线成人网| 日韩av免费| 國產美女AV操逼網站| 黑人av在线观看| 人妻中文字幕av| 亚洲天堂视频在线播放| 日韩激情网站| 青娱乐99| 91大神久久| 一道本激情视频| 牛牛在线精品视频| 久久国产精品一区二区三区| 七十路の高齡熟妇无码| 国产成人精品AV在线观| 黄色一级aa片| 豆花视频在线免费观看| 久久99精品久久久久久水蜜桃 | jlzz18| 亚洲无码视频专区| 亚洲精品一二三区| 亚洲一区二区三区无码| 欧美日韩高清一区| 日本黄色直播| 人妻精品在线| 91乱子伦国产乱子伦!| 亚洲中文字幕在线观看视频网站| 91AV免费| 天堂网亚洲| 大香蕉久热| 天堂网在线视频| 黄色电影免费网站| 69成人精品| av在线中文| 少妇白洁在线观看| 欧美A片在线观看| 99久久爱re热6在播放| 色综合99久久久无码国产精品| 欧美精产国品一二三区别| 四季AV一区二区夜夜嗨| 毛片在线视频| 啊啊啊啊国产| 日韩色情网| 天天日天天撸| 麻豆AV96熟妇人妻| 欧美熟女一区二区| 国产三级黄色| 欧美疯狂做受XXXXX高潮| 98色色| 日色色色| 香蕉综合在线| 91青青草视频| 国产三级毛片| 日本大香蕉在线视频| 亚洲国产成人AV| 日本熟妇一区二区三区| 欧美视频在线观看| 成人中文字幕网站| 成人小视频在线| 99爱在线观看| 欧美性爱精品一区| 成人免费av| 精品国产午夜福利在线观看| 亚洲成人精品在线观看| 久久撸视频| 欧美另类极品| 九九草在线视频| 骚BBBB槡BBB槡BBB| 一道本无码在线观看| 黄色成人视频| 翔田千里与黑人50分钟| 色哟哟视频| 在线免费观看无码| 91在线无码精品秘国产三年 | 尻屄视频在线观看| 婷婷开心色四房播播免费| 2018中文字幕第一页| 四虎成人精品无码永久在线的客服 | 男女无码视频| 少妇在厨房| 欧美极品少妇| 成人啪啪网站| 乱伦中文| 蜜桃久久精品成人无码AV| 密臀AV在线| 丁香五月在线视频| 亚洲aaaaaa| 一本色道久久综合| 18禁日韩| 色哟哟一区二区三区四区| 欧美日韩在线看| 学生妹做爱视频| 国产二区视频| 黄色视频免费在线观看网站 | 逼特逼视频在线观看| 久草视频在线播放| 9色在线| 一区二区三区电影| 人操人人| 欧美深夜福利视频| 欧美成人第一页| 精品网站999www| 欧美性性性| 成年人A片| 海滩AV黑人| 亚洲婷婷在线视频| 麻豆国产精品一区| 久久丁香五月天| 久久无码在线观看| 4438成人网站| 欧美亚洲日韩中文字幕| 精品码一区二在线观看| 人人摸人人看| 国产aaaaaaaaaa| 99久久久久久久| 仙踪林777777野大粗| 蜜桃久久av一区| 九色PORNY自拍视频| 日韩中文字幕成人| 日韩一片| 亚洲高清无码免费| 国产精品乱伦片| 日本综合在线| 日产久久久| 欧美精品亚洲| 操逼逼网| 中文字幕第27页| 日本黄色视| 2025毛片| 天天爽天天爽夜夜爽毛片| 婷婷五月综合网| 天天干天天在线观看| 特级西西444www大精品| 一级操逼视频| aaa在线观看| 92无码| 苍井空中文字幕在线观看| 东京热视频免费观看| 色老板免费视频| 狠狠2021| 在线操逼| 中文字幕综合在线| 国产熟妇毛多久久久久一区| 午夜精品久久久久久不卡8050| 在线观看www视频| 91精品婷婷国产综合久久竹菊| 国产剧情一区二区| 中文字幕视频在线播放| 国内自拍青青| 亚洲美女免费视频| 亚洲无码AV麻豆| 黄色电影天堂网| 日韩人妻精品中文字幕免费| 江苏妇搡BBBB搡BBBB-百度 | 激情片AAA| 91久久电影| 国产无码自拍| 91在线成人电影| www.偷拍| 无码不卡在线播放| av在线一区二区| 久久影院三级片| 风流少妇一区二区三区91| 伊人三区| 色三区| 38D蜜桃臀| 农村三级片| 亚洲日韩精品中文字幕| 国产乱子伦一区二区三区免看| 黄网免费在线观看| 亚洲视频天天射| 日韩无码一区二区三区四区| 七区九区一区在线| 日韩无码人妻一区二区| 三级黄片免费看| 人妻乱码| 日本少妇久久| 久久精品夜色噜噜亚洲A∨| 亚洲人气无码AV| 91青青草在线| 羞羞色院91蜜桃| 综合网插菊花| 三级片久久| 韩国三级HD久久精品| 一区二区亚洲| 国产成人精品777777| 欧美成人视频在线观看| 抽插影院| 久热精品视频| 美女免费AV| 成人三级片在线观看| 性综合网| 人人爽人人爽| H片免费在线观看| 亚洲91视频| 丝袜毛片| 婷婷色777777| 91无码秘蜜桃一区二区三区-百度 精品人妻一区二区三区在线视频不卡 | 久草麻豆| 特级西西人体444WWw高清大胆| 成人小视频在线| 亚洲二区后入极品| 九九综合伊人7777777| 男女日日批黄色三级| 69福利视频| 久久99精品国产麻豆婷婷洗澡| 日本天天操| 黄网在线观看视频| 岛国免费AV| 国产AV无码一区| 欧美日本国产| 午夜福利视频无码| 日本无码视频在线观看| 激情小说在线观看| 天堂中文在线观看| 久久婷婷在线| 性感91影院| 久久久久成人精品无码| 青草成人在线视频| 麻豆视频一区| 久久思热国产| AV无码免费观看| 天天色操| 五月天福利导航| 无码二区三区| 成人做爱免费网站| 亚洲成人色色| 特级西西444www高清大胆免费看 | 国产三级网| yw尤物在线| 麻豆操逼| 怡红院成人av| 波多野吉衣视频| 三级无码中文| 欧美日韩中文在线观看| 午夜av影院| 另类老妇极品BBWBBw| 在线高清无码| 久久99久久99| 色丁香六月| 韩国一级av| 亚洲高清无码视频大全| 一区精品| 日韩亚洲天堂| 日狠狠| 黄色网在线| 91三级片网站| 成人黄色电影| 先锋av资源网| 婷婷在线观看免费| 日韩在线毛片| 人妻精品无码| 快播激情小说| 色欲av伊人久久大香线蕉影院 | 国产一级做a爱免费视频| 蜜桃久久99精品久久久酒店| 色黄网站在线观看| 成人福利影视| 色777| 9999re| 亚洲一区二区三区无码| 成人精品一区二区三区中文字幕| AA片免费| 巜人妻初尝按摩师BD中字| 国产视频999| 无码专区在线看v| 福利毛片| AAA片视频| 亚洲精品91| 亚洲精品不卡| 成人网站一区二区| 无码一区二区三区四区五区| 欧美日韩免费视频| 国产精品亚洲一区| 特级西西人体大胆无码| 农村三级片| 熟女少妇网站| 久久精品国产亚洲| 逼逼影院| 中文字幕乱码视频32| 国产综合AV| www伊人| 99re视频播放| 男女视频网站| 免费版成人久久幺| 亚洲色色视频| 国产肏屄视频| 好吊顶亚洲AV大香蕉色色| 91精品国产闺蜜国产在线闺蜜| 日韩av免费在线观看| 精品成人影视| 欧美熟女性爱视频| 一区二区黄色| 日韩WWW| 无码A级| 国产高清免费视频| 国产第一页在线播放| 亚洲成人A| 韩国AV在线| 国产中文在线观看| 国产精品秘国产精品88| 99热在线观看| 337p大胆色噜噜噜噜噜| 中文字幕中文| 大帝AV| 黄色免费大片| 国产精品无码免费视频| 亚洲成人77777| 亚洲v| 乖我硬了让老子cao你小视频| 天天爱天天插| 日国无码| 高清无码在线观看18| 黄色a级片| 亚洲色成人中文字幕在线| 人妻无码中文字幕免费视频蜜桃| 亚洲a∨| 国产成人精品久久二区二区91| 亚洲天堂女| 99热免费在线观看| 东北老女人操逼| 三级片AAAA| 好吊一区二区三区| 91在线一区二区| 一区二区三区四区五区| 国产一级a毛一级a做免费的视频 | 91鲁| 日本色中文字幕| 久久一区| 国产福利视频导航| 成人午夜精品无码区| 久久精品国产AV| 欧美视频一区二区三区| 91资源在线观看| 91精品成人电影| 亚洲无码手机在线| 国产区精品| 日本电影一区二区| 麻豆蜜桃91无码| 操逼网123| 亚洲国产成人综合| 国色天香网站| av一区在线| 亚洲成人少妇老妇a视频在线| 久久午夜视频| 婷婷五月欧美| 99热这里是精品| 成人性爱毛片| 婷婷一区二区| www| 日本无码网站| aV无码av天天aV天天爽第一| 欧美日韩免费在线播放电影在线播放电影在线播放电影免费 | 亚洲无码三区| 安徽妇搡BBBB搡BBBB袄爱直播 | 91九色丨国产丨爆乳| 久久久久久精| 先锋资源在线视频| 超碰九色| a√在线视频| AV解说| 日韩毛片网| 婷婷激情av| 地表最强网红八月未央道具大秀| 日日夜夜爱| 超碰超碰| 99视频精品在线| 欧美性爱天天操| 国产精品久久久大香蕉| 日韩v欧美v日本v亚洲v国产v| 伊人黄色| 婷婷久| 偷拍777| 黄色视频免费在线观看网站 | 中文字幕精品综合| 亚洲一区| 国产一区二区在线视频| 欧美午夜精品成人片在线播放| 农村三级片| AV成人无码| 欧美日韩国产a| 婷婷亚洲综合| 日本AV在线播放| 91秦先生在线播放| 91人妻无码精品一区二区三区| 婷婷亚洲五月色综合| 国产绿奴09-01| 超碰中文字幕| AV无码免费观看| 日韩AV一级片| 大香蕉综合视频| 探花一区二区| 亚洲AV片一区二区三区| 久久永久免费精品人妻专区| 国产高清无码在线| 色xxxx| 在线观看免费成人网站| 青娱乐免费视频| 操鸡视频在线观看| 51亚洲精品| 五月天色色婷婷| 91女人18毛片水多国产| 无码黄色片| 男人天堂视频网| 91亚洲综合| 天天色色天天| 免费人成视频观看| 精品无码二区| 日韩人妻无码专区一区二区| 久久黄色视频网站| 超碰人人操人人| 欧美疯狂做受XXXXX高潮| 成人久久av| 国产美女做爱视频| 国产精久久| 国产一级特黄| 黄色片大香蕉| 亚洲综合激情五月久久| 亚洲无码免费观看视频| 大香蕉官网| 亚洲综合在线网| 国产69精品久久久久久| 一区二区成人视频| 久久大香蕉91| 中国操逼电影| 日韩电影免费在线观看| b逼一区| 久操网站| 美女被操免费网站| 国产一区二区AV| 久热网| 微拍福利一区| 人人看人人摸人人搞| 蝌蚪窝免费视频| 日韩啊啊啊| 五月天成人导航| 在线成人毛片| 亚洲欧美高清视频| 国产欧美毛片| 亚洲在线高清视频| 亚洲成人网站在线观看| 日本黄色电影网址| AV天堂亚洲| 一区二区视频在线观看| 成人在线黄色| 99久在线精品99re8| 日本黄色录像| 天天日天天操天天摸天天干天日射天天插 | 亚洲69视频| 中文字幕高清在线| 欧美成人精品激情在线视频 | jiujiuav| 久久嫩草精品久久久久| 爱搞视频在线播放| 一级黄片免费观看| 欧美成人免费电影| 性一区| 三级片无码麻豆视频| 五月婷婷网| 午夜视频免费| 欧美日韩一区在线观看| 免费观看一区| 欧美AAA大片| 日韩欧美成人网| 粉嫩99国产精品久久久久久人妻| 肉色超薄丝袜脚交一区二区| 国内自拍99| 四虎在线视频观看96| 日韩在线中文字幕亚洲| 高清欧美日韩第一摸| 操久久| 免费黄色在线观看| 丁香五月天堂网| 青青草视频在线观看| 国产成人精品一区二区| 欧美A片在线观看| 欧一美一婬一伦一区二区三区自慰| 天天撸在线视频| 毛片毛片毛片毛片| 高清免费无码视频| 中文字幕在线网站| 中国一级A片| 思思99热| 国产特级毛片| 男人的天堂2019| 亚洲av资源| 国产十八岁在线观看| 伊人成色| 九九视频免费在线观看| 夜夜操影院| 亚洲成人A片| 三级片久久久| 国产黄色A片| 国产成人秘免费观看一区二区三区 | 蜜桃视频无码区在线观看| 超清无码在线| 丰满人妻一区二区三区四区不卡| 尤物网站在线观看| 久久久久999| 国产高清小视频| 麻豆91精品91久久久| 亚洲成人精品一区二区| 91精品日韩| 亚洲免费毛片| 一起草在线视频| 黄色电影中文字幕| 91在线无码精品秘入口国战| 岛国AV在线播放| 麻豆AV在线观看| 国产看片网站| 九色PORNY9l原创自拍| 日韩欧美成人在线| 欧美狠狠操| 成人黄片网站| 日日干日日操| 免费看成人747474九号视频在线观看| 精品无码国产一区二区三区51安| 操一操| www一个人免费观看视频www| 久久人妻无码| 亚洲欧洲免费看| 伊人二区| 国产夫妻露脸| 国产九九热| 日本免费不卡视频| 色吊丝中文字幕| 青青草原网站在线观看| 黄片小视频在线观看| 在线观看污网站| 亚洲成av人无码| 久久免费视频观看| www.插插插| 大香蕉精品| 国产一区二区三区在线| 一级调教看片| 免费黄色大片网站| 91视频福利网| 激情五月天在线视频| 婷婷五月天色综合| 黄色操逼大片| 免费无码又爽又黄又刺激网站| 再深点好爽灬轻点久久国产| 色综合一区二区| 伊人久久免费视频| 国产激情在线播放| 五月丁香色婷婷| 成人视频18| 在线观看高清无码中文字幕| 麻豆国产成人AV一区二区三区| 蜜桃传媒在线| 久久视频99| 亚洲AV无码国产精品久久不卡| 7799综合| 蜜臀av一区二区| 日韩一级电影在线观看| 黄色在线免费| 欧美成人黄色电影| 国产欧美一区二区三区视频| 欧洲肥胖BBBBBBBBBB| 中国极品少妇XXX| 青青无码视频| 91九色蝌蚪91POR成人| 国产高清无码在线观看视频| 日皮视频在线看| 黄色大片免费观看| 亚洲51| 操B网站| 亚洲色色视频| 伊人免费视频在线观看| 屁屁影院CCYYCOM国产| 欧美日韩国产性爱| 男女拍拍免费视频| 亚洲在线无码视频| AAA黄片| 三级片青青草| 色大香蕉伊人| 国精品无码人妻一区二区三区 | 少妇在厨房| 精品人妻一区二区三区日产乱码 | 一区二区三区久久久| 国产精品熟女| 国产香蕉AV| www.久热| 精品无码久久久| 色婷婷视频在线播放| 内射少妇18| 2025四虎在线视频观看| 日韩无码破解| 99爱爱视频| 51妺嘿嘿午夜福利在线| 玖玖成人电影| 欧美1区| 黄片在线免费观看| 亚洲av色图| 婷婷五月天色综合| 狠狠躁日日躁夜夜躁A片小说免费 色综合久久久无码中文字幕999 | 亚洲国产成人AV| 噜噜在线| 成年人网站在线免费观看| www.91av| 亚洲情在线| 国产中文字字幕乱码无限| 91成人视频在线免费观看| 大香蕉网伊| 国产精品成人AV在线| 91性爱嫩逼视频| www.大香蕉伊人| 亚洲男人的天堂av| 日韩中文字幕高清| 亚洲色久| 九九r在线精品观看视频| 国产SUV精品一区二区| 久久99精品国产.久久久久久 | 欧美性爱视频免费观看| 日韩久久综合| 大鸡巴导航| 欧美性BBwBBwBBwHD| 欧一美一婬一伦一区?| 中文字幕无码成人| 欧美日比视频| 草草网| 男女怕怕网站| 精品久久无码| 91无码AⅤ在线| 免费黄色成人视频| 免费爱爱视频| 先锋成人影音| 亚洲免费黄| 欧美一級黃色A片免費看| 中文无码av| 久久天堂影院| 日本老女人视频| 久久精品夜色噜噜亚洲A∨| 狠狠狠狠操| 色色色色色欧美网| www.操逼网| 人人鲁人人操| 青娱乐亚洲自拍| 日韩综合| 另类激情网| 天天躁夜夜躁狠狠躁AV| 国产综合AV| 熟女一区| 国产麻豆免费| 国产三级片无码| 在线中文无码| 黄色毛片网站| 狠狠撸综合| 理论片无码| 午夜成人在线观看| 91视频美女模特| 国产精品嫩草久久久久yw193| 伊人在线视频观看| 亚洲精品乱码久久久久久蜜桃91| sesese| 东京热一级片| 欧美色视频一区二区三区在线观看| 7799精品| 欧美精品A级片| 可以看的黄色视频| 成人四区| 妹子干综合| 黄色片视频日本| 粉嫩小泬BBBBBB免费看| 国产精品a片| 2025精品精品视频| 日本中文字幕在线免费观看| 亚洲www在线观看| 成人日韩| 狠狠精品| 怡春院院成人免费视频| 人人色在线| 成人在线乱码视频| 特爽特黄特级特色视频| 中文在线a∨在线| 欧美日韩激情| 国产亚洲综合无码| 三级黄色视频在线观看| 99热免费在线观看| 色色色成人视频| 精品人妻一区二区免费蜜桃| 青青草视频| 逼特逼视频| 人人操人人爱人人妻| 奇米影视狠狠干| 免费黄色av| 中文字幕资源在线| 综合大香蕉| 四川BBBB擦BBBB| 中文字幕精品一区久久久久| 国产成人亚洲综合AV婷婷| 蜜芽av在线| 日韩AV毛| 97人人干人人| 激情综合婷婷| 久久99影院| 超碰一区二区三区| 中文字幕AV播放| 男人天堂中文字幕| 青青草免费在线观看| 麻豆国产精品| 伊人在综合| 91丨PORN丨国产| 蜜桃av色偷偷av老熟女| 欧美人妻视频在线| 亚洲AV无码国产精品久久不卡| 日批网站在线观看| 亚州加勒比无码| 日中国老太太B| 春色av| 国产三级国产三级国产普通话| 黄色成人在线观看视频| 国产亚洲精品久久久久动| 高清无码免费在线视频| 热久久在线观看| 韩国精品无码一区二区三区18| 国产成人精品a视频| 天天天天天天天干| 成人毛片在线观看| 国产av电影网| 日本欧美一级| 免费一级黄色片| 人人爱人人操人人干| 中文字幕不卡在线| 国产午夜91人妻| 国产无遮挡又黄又爽又色视频| 嫩草在线观看| AA免费视频| 日韩AV一二三| 国产精品激情| 国产成人秘在线观看免费网站 | 一级a片在线播放| 欧美性受| 欧美一区二区三区激情| 亚洲伊人大香蕉| 熟女人妻人蜜桃视频| 婷婷爱五月天| 久久久久久久无码| 亚洲综合激情五月久久| 激情网站在线| 777久久久|