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

歡迎訪問 生活随笔!

生活随笔

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

javascript

SpringBoot基础-Environment解析

發布時間:2023/12/16 javascript 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringBoot基础-Environment解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

獲取屬性源碼跟蹤解析

入口方法

@Component public class EnvironmentDebugger implements CommandLineRunner, EnvironmentAware {private Environment environment;@Overridepublic void run(String... args) throws Exception {String study2 = environment.getProperty("study2");}@Overridepublic void setEnvironment(Environment environment) {this.environment = environment;} }

實現EnvironmentAware 接口,獲取Environment對象
實現CommandLineRunner接口,在容器啟動完成后,獲取key的值,作為源碼跟蹤的入口

源碼跟蹤

根據入口environment.getProperty,一直點進入org.springframework.core.env.PropertySourcesPropertyResolver#getProperty(java.lang.String, java.lang.Class, boolean),可以看到最基礎的實現

@Nullable protected <T> T getProperty(String key, Class<T> targetValueType, boolean resolveNestedPlaceholders) {if (this.propertySources != null) {for (PropertySource<?> propertySource : this.propertySources) {if (logger.isTraceEnabled()) {logger.trace("Searching for key '" + key + "' in PropertySource '" +propertySource.getName() + "'");}Object value = propertySource.getProperty(key);if (value != null) {if (resolveNestedPlaceholders && value instanceof String) {value = resolveNestedPlaceholders((String) value);}logKeyFound(key, propertySource, value);return convertValueIfNecessary(value, targetValueType);}}}if (logger.isTraceEnabled()) {logger.trace("Could not find key '" + key + "' in any property source");}return null; }

方法中可以看出通過key獲取屬性值,遍歷propertySources中存放的PropertySource,并且從中依次取出屬性,如果所有都沒有取到,則返回NULL


可以看出propertySources中共存在7中類型的屬性,可以找到我們設置的默認屬性,并且已鍵值對存放數據

PropertySource源碼

public abstract class PropertySource<T> {protected final Log logger = LogFactory.getLog(getClass());protected final String name;protected final T source; }

source為存放屬性的具體實現

通過獲取屬性可以看出所有的屬性都存放在:propertySources中,只需要搞懂spring容器在啟動的時候是如何裝載自定義的屬性進propertySources就可以

Environment加載屬性

入口函數

springApplication.run(args) --> prepareEnvironment

prepareEnvironment

private ConfigurableEnvironment prepareEnvironment(SpringApplicationRunListeners listeners,DefaultBootstrapContext bootstrapContext, ApplicationArguments applicationArguments) {// Create and configure the environmentConfigurableEnvironment environment = getOrCreateEnvironment();configureEnvironment(environment, applicationArguments.getSourceArgs());ConfigurationPropertySources.attach(environment);listeners.environmentPrepared(bootstrapContext, environment);DefaultPropertiesPropertySource.moveToEnd(environment);configureAdditionalProfiles(environment);bindToSpringApplication(environment);if (!this.isCustomEnvironment) {environment = new EnvironmentConverter(getClassLoader()).convertEnvironmentIfNecessary(environment,deduceEnvironmentClass());}ConfigurationPropertySources.attach(environment);return environment; }

在prepareEnvironment中,共進行了一下的進步操作:

  • 創建Environment對象:getOrCreateEnvironment()
  • 配置屬性:configureEnvironment()
  • 添加configurationProperties屬性:ConfigurationPropertySources.attach(environment)
  • 通過事件發布器發布environment事件:listeners.environmentPrepared(bootstrapContext, environment);
  • 將defaultProperties屬性移到最后面,因為是默認,所有在后面兜底:DefaultPropertiesPropertySource.moveToEnd(environment)
  • 加載profile配置文件屬性:configureAdditionalProfiles(environment)
  • 綁定SpringApplication對象到Environment中:bindToSpringApplication(environment)
  • getOrCreateEnvironment

    private ConfigurableEnvironment getOrCreateEnvironment() {if (this.environment != null) {return this.environment;}switch (this.webApplicationType) {case SERVLET:return new StandardServletEnvironment();case REACTIVE:return new StandardReactiveWebEnvironment();default:return new StandardEnvironment();} }
    • 通過:webApplicationType判斷當前容器環境,創建不同的Environment對象

    SERVLET環境舉例

    public class StandardEnvironment extends AbstractEnvironment {/** System environment property source name: {@value}. */public static final String SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME = "systemEnvironment";/** JVM system properties property source name: {@value}. */public static final String SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME = "systemProperties";@Overrideprotected void customizePropertySources(MutablePropertySources propertySources) {propertySources.addLast(new PropertiesPropertySource(SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME, getSystemProperties()));propertySources.addLast(new SystemEnvironmentPropertySource(SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME, getSystemEnvironment()));}@Overridepublic void initPropertySources(@Nullable ServletContext servletContext, @Nullable ServletConfig servletConfig) {WebApplicationContextUtils.initServletPropertySources(getPropertySources(), servletContext, servletConfig);} }

    可以看出在類種定義了方法:customizePropertySources,
    customizePropertySources:

    • 添加:servletContextInitParams屬性集
    • 添加:servletConfigInitParams屬性集
    • 如果jndi環境,添加jndiProperties屬性集
    • 調用付類customizePropertySources方法,初始化java及系統屬性參數

    supper.customizePropertySources()

    public static final String SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME = "systemEnvironment";public static final String SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME = "systemProperties";@Override protected void customizePropertySources(MutablePropertySources propertySources) {propertySources.addLast(new PropertiesPropertySource(SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME, getSystemProperties()));propertySources.addLast(new SystemEnvironmentPropertySource(SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME, getSystemEnvironment())); }


    在StandardServletEnvironment類中,并沒有發現在哪里調用:customizePropertySources().此時查看類圖,它的的上層父類:StandardEnvironment也沒有調用,繼續查看上層父類:AbstractEnvironment,此時發現在構造函數中調用了customizePropertySources()

    public AbstractEnvironment() {customizePropertySources(this.propertySources); }

    只是由于java在實例化的時候,會先調用父類的構造函數,所在執行了customizePropertySources(),完成相關屬性的初始化工作

    • 此時environment中的屬性只有四種
      servletConfigInitParams、servletContextInitParams、systemProperties、systemEnvironment

    configureEnvironment

    protected void configureEnvironment(ConfigurableEnvironment environment, String[] args) {// 添加解析器if (this.addConversionService) {ConversionService conversionService = ApplicationConversionService.getSharedInstance();environment.setConversionService((ConfigurableConversionService) conversionService);}configurePropertySources(environment, args);configureProfiles(environment, args); }

    在方法中通過:configurePropertySources方法來添加:

    • 添加默認屬性值
    • 添加命令行屬性值

    configurePropertySources

    protected void configurePropertySources(ConfigurableEnvironment environment, String[] args) {MutablePropertySources sources = environment.getPropertySources();DefaultPropertiesPropertySource.ifNotEmpty(this.defaultProperties, sources::addLast);if (this.addCommandLineProperties && args.length > 0) {String name = CommandLinePropertySource.COMMAND_LINE_PROPERTY_SOURCE_NAME;if (sources.contains(name)) {PropertySource<?> source = sources.get(name);CompositePropertySource composite = new CompositePropertySource(name);composite.addPropertySource(new SimpleCommandLinePropertySource("springApplicationCommandLineArgs", args));composite.addPropertySource(source);sources.replace(name, composite);}else {sources.addFirst(new SimpleCommandLinePropertySource(args));}} }

    1.通過函數:DefaultPropertiesPropertySource.ifNotEmpty(this.defaultProperties, sources::addLast) 將硬編碼的defaultProperties對象屬性添加在sources中

    public static void main(String[] args) throws InterruptedException {SpringApplication springApplication = new SpringApplication((SpringBootDemoApplication.class));Properties properties = new Properties();properties.setProperty("study1", "value_study1");springApplication.setDefaultProperties(properties);springApplication.run(args); }//springApplication.setDefaultProperties(properties) public void setDefaultProperties(Properties defaultProperties) {this.defaultProperties = new HashMap<>();for (Object key : Collections.list(defaultProperties.propertyNames())) {this.defaultProperties.put((String) key, defaultProperties.get(key));} }

    2.判斷是否需要添加命令行參數及args是否傳入的信息,構建一個SimpleCommandLinePropertySource對象添加到屬性列表中
    new SimpleCommandLinePropertySource(args)

    public SimpleCommandLinePropertySource(String... args) {super(new SimpleCommandLineArgsParser().parse(args)); }

    調用SimpleCommandLineArgsParser解析器,解析傳入的參數信息

    SimpleCommandLineArgsParser.parse

    class SimpleCommandLineArgsParser {/*** Parse the given {@code String} array based on the rules described {@linkplain* SimpleCommandLineArgsParser above}, returning a fully-populated* {@link CommandLineArgs} object.* @param args command line arguments, typically from a {@code main()} method*/public CommandLineArgs parse(String... args) {CommandLineArgs commandLineArgs = new CommandLineArgs();for (String arg : args) {if (arg.startsWith("--")) {String optionText = arg.substring(2);String optionName;String optionValue = null;int indexOfEqualsSign = optionText.indexOf('=');if (indexOfEqualsSign > -1) {optionName = optionText.substring(0, indexOfEqualsSign);optionValue = optionText.substring(indexOfEqualsSign + 1);}else {optionName = optionText;}if (optionName.isEmpty()) {throw new IllegalArgumentException("Invalid argument syntax: " + arg);}commandLineArgs.addOptionArg(optionName, optionValue);}else {commandLineArgs.addNonOptionArg(arg);}}return commandLineArgs;}}

    可以看出只對-- 開頭的字符串進行解析,根據鍵值對來獲取key,value,添加到屬性中

    • 此時environment中的屬性值
      servletConfigInitParams、servletContextInitParams、systemProperties、systemEnvironment、commandLineArgs、defaultProperties

    ConfigurationPropertySources.attach

    public static void attach(Environment environment) {Assert.isInstanceOf(ConfigurableEnvironment.class, environment);MutablePropertySources sources = ((ConfigurableEnvironment) environment).getPropertySources();PropertySource<?> attached = sources.get(ATTACHED_PROPERTY_SOURCE_NAME);if (attached != null && attached.getSource() != sources) {sources.remove(ATTACHED_PROPERTY_SOURCE_NAME);attached = null;}if (attached == null) {sources.addFirst(new ConfigurationPropertySourcesPropertySource(ATTACHED_PROPERTY_SOURCE_NAME,new SpringConfigurationPropertySources(sources)));} }

    主要設置configurationProperties屬性值

    • 此時environment屬性值
      servletConfigInitParams、servletContextInitParams、systemProperties、systemEnvironment、commandLineArgs、defaultProperties、 configurationProperties

    listeners.environmentPrepared

    DefaultPropertiesPropertySource.moveToEnd

    public static final String NAME = "defaultProperties";public static void moveToEnd(MutablePropertySources propertySources) {PropertySource<?> propertySource = propertySources.remove(NAME);if (propertySource != null) {propertySources.addLast(propertySource);} }

    先將defaultProperties刪除,然后在添加,目的是將defaultProperties存到最后一個節點,用作兜底操作

    configureAdditionalProfiles

    private void configureAdditionalProfiles(ConfigurableEnvironment environment) {if (!CollectionUtils.isEmpty(this.additionalProfiles)) {Set<String> profiles = new LinkedHashSet<>(Arrays.asList(environment.getActiveProfiles()));if (!profiles.containsAll(this.additionalProfiles)) {profiles.addAll(this.additionalProfiles);environment.setActiveProfiles(StringUtils.toStringArray(profiles));}} }

    獲取當前需要加載的配置文件后綴

    bindToSpringApplication

    protected void bindToSpringApplication(ConfigurableEnvironment environment) {try {Binder.get(environment).bind("spring.main", Bindable.ofInstance(this));}catch (Exception ex) {throw new IllegalStateException("Cannot bind to SpringApplication", ex);} }

    將spring.main屬性值賦值給:SpringApplication中對應的屬性

    ConfigurationClassParser

    • 添加@PropertySources屬性集,在run的refresh中調用

    org.springframework.context.annotation.ConfigurationClassParser#processPropertySource

    private void processPropertySource(AnnotationAttributes propertySource) throws IOException {String name = propertySource.getString("name");if (!StringUtils.hasLength(name)) {name = null;}String encoding = propertySource.getString("encoding");if (!StringUtils.hasLength(encoding)) {encoding = null;}String[] locations = propertySource.getStringArray("value");Assert.isTrue(locations.length > 0, "At least one @PropertySource(value) location is required");boolean ignoreResourceNotFound = propertySource.getBoolean("ignoreResourceNotFound");Class<? extends PropertySourceFactory> factoryClass = propertySource.getClass("factory");PropertySourceFactory factory = (factoryClass == PropertySourceFactory.class ?DEFAULT_PROPERTY_SOURCE_FACTORY : BeanUtils.instantiateClass(factoryClass));for (String location : locations) {try {String resolvedLocation = this.environment.resolveRequiredPlaceholders(location);Resource resource = this.resourceLoader.getResource(resolvedLocation);addPropertySource(factory.createPropertySource(name, new EncodedResource(resource, encoding)));}catch (IllegalArgumentException | FileNotFoundException | UnknownHostException | SocketException ex) {// Placeholders not resolvable or resource not found when trying to open itif (ignoreResourceNotFound) {if (logger.isInfoEnabled()) {logger.info("Properties location [" + location + "] not resolvable: " + ex.getMessage());}}else {throw ex;}}} }private void addPropertySource(PropertySource<?> propertySource) {String name = propertySource.getName();MutablePropertySources propertySources = ((ConfigurableEnvironment) this.environment).getPropertySources();if (this.propertySourceNames.contains(name)) {// We've already added a version, we need to extend itPropertySource<?> existing = propertySources.get(name);if (existing != null) {PropertySource<?> newSource = (propertySource instanceof ResourcePropertySource ?((ResourcePropertySource) propertySource).withResourceName() : propertySource);if (existing instanceof CompositePropertySource) {((CompositePropertySource) existing).addFirstPropertySource(newSource);}else {if (existing instanceof ResourcePropertySource) {existing = ((ResourcePropertySource) existing).withResourceName();}CompositePropertySource composite = new CompositePropertySource(name);composite.addPropertySource(newSource);composite.addPropertySource(existing);propertySources.replace(name, composite);}return;}}if (this.propertySourceNames.isEmpty()) {propertySources.addLast(propertySource);}else {String firstProcessed = this.propertySourceNames.get(this.propertySourceNames.size() - 1);propertySources.addBefore(firstProcessed, propertySource);}this.propertySourceNames.add(name); }

    總結

    以上是生活随笔為你收集整理的SpringBoot基础-Environment解析的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    中文字幕大全 | 色香蕉在线视频 | 视频1区2区 | 九九视频免费观看视频精品 | 中文字幕在线乱 | 男女激情免费网站 | 国产成人亚洲在线电影 | 天天搞天天干天天色 | 国产精品视频线看 | 日韩精品在线免费播放 | 亚洲欧美日韩国产 | 久艹在线免费观看 | 亚洲国产一区在线观看 | 色偷偷中文字幕 | a级免费观看 | 99精品美女| 天天天天天天天操 | 一区二区三区四区影院 | 激情xxxx| 免费高清看电视网站 | 精品一二区 | 国产aa精品 | 欧美在线视频不卡 | 成 人 黄 色 片 在线播放 | www.com.日本一级| 一区二区中文字幕在线播放 | 天天操天天射天天操 | 成年人在线播放视频 | 国产剧情在线一区 | 国产精品久久久久毛片大屁完整版 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 欧美日韩精品在线视频 | 国产精品福利一区 | 在线播放精品一区二区三区 | 日韩精品首页 | 精品v亚洲v欧美v高清v | 中文字幕亚洲精品日韩 | 色老板在线视频 | 国产成人性色生活片 | wwwwww黄| 色婷婷激情 | 国产在线91精品 | 日韩av成人 | 国产黑丝一区二区三区 | 日韩免费电影在线观看 | 欧美色综合天天久久综合精品 | 日av免费 | 久久97久久 | 国产成人久久 | 国产一区在线观看视频 | 欧美日在线 | 一区二区三区高清在线观看 | 久草在线费播放视频 | 久久久久久免费视频 | 五月情婷婷 | 日韩视频在线一区 | 特黄特色特刺激视频免费播放 | 成人av网站在线 | 黄色一集片 | av在线8| 亚洲精品播放 | www色综合 | 精品亚洲一区二区三区 | 国产精品 中文字幕 亚洲 欧美 | 97精品国产一二三产区 | av在线不卡观看 | 国产精品 日韩 欧美 | 黄色av在 | 狠狠干激情 | 99在线免费观看视频 | 国产中年夫妇高潮精品视频 | 国产理论一区二区三区 | 91香蕉视频黄 | 欧美一二三专区 | 国产一区二区三区高清播放 | 日韩视频区 | 亚洲精品网址在线观看 | 五月天免费网站 | 天天草天天干天天 | 91精品麻豆 | 成年人在线观看网站 | 亚洲精品18日本一区app | 国内外成人免费在线视频 | 日韩理论电影在线 | 天天综合网 天天综合色 | 成年人网站免费在线观看 | 国产精品欧美一区二区 | 日韩精品免费在线播放 | 欧美一区三区四区 | 国产成人精品久久久久蜜臀 | 欧美aaaxxxx做受视频 | 亚洲精品自拍视频在线观看 | 日韩欧美一区二区三区黑寡妇 | 特黄特黄的视频 | 国产福利av在线 | 91精品国自产在线 | 天堂av一区二区 | 狠狠干成人 | 成人a在线 | 一区二区电影在线观看 | 色五月成人 | 狠狠狠色丁香综合久久天下网 | 日本精品小视频 | 天天色视频 | av在线短片 | 久久久久久美女 | 青春草免费视频 | 日韩免费在线观看网站 | 日本中文乱码卡一卡二新区 | 国产中文字幕在线视频 | 视频在线观看日韩 | 91九色蝌蚪视频在线 | 婷婷六月综合亚洲 | 波多野结衣视频一区 | 久久视频一区二区 | 国产美女精品在线 | 中文字幕在线观看完整版 | 婷婷国产v亚洲v欧美久久 | av大全免费在线观看 | 黄色片网站免费 | 国产乱码精品一区二区蜜臀 | 欧美一级性生活 | 国产v在线 | 五月婷婷在线视频观看 | 国产精品9999 | 成年人三级网站 | 九九九热精品免费视频观看网站 | 狠狠色伊人亚洲综合成人 | 日韩动漫免费观看高清完整版在线观看 | 国产一级二级av | av黄色在线播放 | 久久免费视频一区 | 午夜体验区 | 精品视频123区在线观看 | 96精品视频 | 成人久久久精品国产乱码一区二区 | 国产在线观看不卡 | 午夜精品麻豆 | 久久不卡av| 日韩二区精品 | 久久九九久久九九 | 国产爽妇网 | 视频国产在线观看18 | 伊人色综合久久天天网 | 中文字幕成人 | 免费视频成人 | 成人一级影视 | 国内一级片在线观看 | 日韩视频图片 | 国产亚洲va综合人人澡精品 | 日日插日日干 | 久久国产精品99精国产 | 久久精品精品电影网 | 天天曰夜夜爽 | 欧美成人黄色片 | 亚洲精品乱码久久久久久按摩 | 人人爽久久久噜噜噜电影 | 日日日日干 | 亚洲激情电影在线 | 又爽又黄在线观看 | 丁香色婷婷 | 成人性生交大片免费观看网站 | 国产99视频在线观看 | 国产亚洲激情视频在线 | 国产精品免费在线视频 | 欧美在线18| 日韩乱码在线 | 精品国产自在精品国产精野外直播 | 国产精品久久久久aaaa九色 | 中文超碰字幕 | 99r在线| 久久中文精品视频 | 香蕉视频4aa | 国产日本高清 | 久久99视频免费 | 欧美性超爽 | av+在线播放在线播放 | 人人澡人人草 | 欧美在线观看小视频 | 日韩在线免费看 | 五月婷婷在线观看视频 | 国产h在线观看 | 操操操干干干 | av怡红院 | 日韩啪啪小视频 | 最近更新好看的中文字幕 | 欧美一区二区日韩一区二区 | 天天玩天天干 | 日韩午夜视频在线观看 | 久久久网页 | 婷婷在线精品视频 | 成人免费在线播放 | 丁香婷婷久久久综合精品国产 | 午夜精品久久久久久久久久久久久久 | 91人人澡 | 国产第一页在线播放 | 婷婷色 亚洲 | h动漫中文字幕 | 色婷婷六月 | 成人av在线影视 | www..com黄色片 | 久久久免费国产 | 亚洲黄色免费观看 | 亚洲成a人片77777kkkk1在线观看 | 国产成人av电影在线 | 免费看污黄网站 | 精品二区视频 | 国产糖心vlog在线观看 | 免费国产在线精品 | 色爽网站 | 91成人在线视频 | av中文字幕在线免费观看 | 97超碰福利久久精品 | 天天天操天天天干 | 国产精品入口久久 | 国产原创在线 | 亚洲 精品在线视频 | 久久色在线观看 | 韩日av一区二区 | 91干干干| 国产成人黄色av | 国产精品夜夜夜一区二区三区尤 | 国产一级免费在线观看 | 97超视频 | 亚洲国产精品一区二区久久hs | 69中文字幕| 亚洲免费av在线 | 91豆花在线 | 毛片3| 久久午夜影视 | 精精国产xxxx视频在线播放 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 婷婷国产在线 | 国产精品亚洲片在线播放 | 日韩网站在线免费观看 | 免费色视频网址 | 国产精品成人自产拍在线观看 | 国产色拍拍拍拍在线精品 | 天天色天天色天天色 | 亚洲精选在线 | 久久黄色a级片 | 国产综合精品一区二区三区 | 亚洲激情婷婷 | 久久草视频 | 日韩精品高清不卡 | 免费涩涩网站 | 天天色天天草天天射 | 亚洲va欧洲va国产va不卡 | 91高清视频在线 | 天天干人人干 | 黄av资源| 国产高清精品在线观看 | av理论电影 | 毛片激情永久免费 | 激情黄色av| 久久国产欧美日韩精品 | 国产成人黄色在线 | 超碰97.com| 国产精品av免费在线观看 | 国产欧美日韩一区 | 99热官网| 五月天色中色 | 肉色欧美久久久久久久免费看 | 日韩理论片 | 中文永久免费观看 | 亚洲精品国偷拍自产在线观看蜜桃 | 日韩精品久久久久久久电影99爱 | 成人免费视频在线观看 | 亚洲精品乱码久久久久v最新版 | 久久久黄视频 | 狠狠色噜噜狠狠狠狠2021天天 | 久久精品99国产精品酒店日本 | 高清不卡毛片 | 欧美一级电影免费观看 | 99国内精品久久久久久久 | 精品国产一区在线观看 | 中文字幕av最新更新 | www.69xx| 综合铜03| 蜜臀aⅴ精品一区二区三区 久久视屏网 | 精品国产中文字幕 | 亚洲国产精品视频 | 伊人官网| 91在线视频网址 | 欧美午夜性 | 18国产精品白浆在线观看免费 | 97超碰人人干 | 又黄又爽又刺激视频 | 国产精品久久久久久久午夜片 | 视频在线观看亚洲 | 日韩精品在线一区 | 精品91久久久久 | 在线免费观看视频一区 | 久草在线观 | www.天天综合 | 欧洲性视频 | 超碰97免费| 欧美精品你懂的 | 欧美日韩在线视频免费 | 日本在线观看视频一区 | 夜色资源站wwwcom | 久久艹在线 | 草久在线视频 | 91看片淫黄大片在线播放 | 伊人亚洲精品 | 国内久久精品视频 | 久久久.com | 日韩高清片 | 91九色蝌蚪视频网站 | 在线观看国产成人av片 | 色婷婷国产精品一区在线观看 | 91九色视频国产 | av中文字幕剧情 | 日韩在线视频观看免费 | av在线8| 黄色一级大片在线免费看产 | 久久精品99国产国产精 | 人人干97 | 国产精品99免视看9 国产精品毛片一区视频 | 中文字幕影片免费在线观看 | 黄色精品国产 | 激情网第四色 | 久热免费在线 | 992tv人人草| 97国产 | 日韩av在线免费播放 | 国产高清第一页 | 亚州av一区| 手机av看片| 天天插天天干 | 国产免费三级在线观看 | 日韩在线视频一区 | 欧美精品做受xxx性少妇 | 区一区二在线 | 亚洲 欧美 91 | 77国产精品| 最近中文字幕 | 丁香九月激情 | 欧美日韩中文国产一区发布 | 日韩精品视频一二三 | 国产成人精品一区二区在线 | 成人禁用看黄a在线 | 国内精品美女在线观看 | 国产免费一区二区三区最新6 | 国产福利av | 91久久国产露脸精品国产闺蜜 | 亚洲国产最新 | 国产成人在线观看 | 欧美一区二区精美视频 | 欧美人牲 | 伊人国产在线观看 | 99久久日韩精品视频免费在线观看 | av在线免费网站 | 国内精品久久久久影院日本资源 | 日韩精品三区四区 | 精品久久美女 | 波多野结衣电影一区二区 | 国产色网站 | 丁香六月婷婷开心 | 一区二区三区四区精品视频 | 国产精品免费观看国产网曝瓜 | 808电影免费观看三年 | 丝袜美腿亚洲综合 | 久久久久国产精品午夜一区 | 国产亚洲成人网 | 成片视频免费观看 | 久久婷婷一区二区三区 | av在线播放一区二区三区 | 天天草天天干天天 | 久久亚洲区 | 狠狠综合久久 | 欧美日韩精品在线免费观看 | 9热精品| 亚洲综合在线一区二区三区 | 在线观看国产日韩 | 91av在线国产 | 欧美一区在线观看视频 | 日韩在线一区二区免费 | 日韩xxxx视频 | 国产精华国产精品 | 亚洲综合成人婷婷小说 | 色噜噜日韩精品一区二区三区视频 | 中文av在线天堂 | 麻豆视频在线免费看 | 伊人手机在线 | 免费看十八岁美女 | 成人日韩av | 在线观看免费av网 | 91激情| 成全免费观看视频 | www.eeuss影院av撸 | 久久综合色婷婷 | 天天操天天干天天摸 | 五月婷婷中文网 | 激情丁香婷婷 | 欧美做受69| 国产第一页福利影院 | 久爱精品在线 | 一区二区国产精品 | 国产福利精品视频 | 国产精品色婷婷视频 | 美女视频久久 | 国产精品高清在线观看 | 亚洲精品美女久久 | 久久久久亚洲精品国产 | 日本亚洲国产 | 一本一本久久a久久精品综合 | 欧美视频日韩视频 | 国产日本亚洲 | 免费a级观看 | 国产精品久久久久久五月尺 | 精品在线观看一区二区三区 | 在线观看av片 | 一级黄色在线免费观看 | 久久免费看视频 | 二区精品视频 | www.啪啪.com | 色噜噜在线观看 | 不卡av在线播放 | 精品免费视频. | av免费在线观看1 | 爱av在线网 | 一区二区三区高清在线观看 | 成人在线观看免费视频 | 综合网久久| 国产一区二区三精品久久久无广告 | 成人黄色电影在线观看 | av动图| 久久成人高清视频 | 国产一区二区高清视频 | 久久人人干 | 午夜视频播放 | 国产精品美女久久久免费 | 亚洲精品高清一区二区三区四区 | 黄色三级免费网址 | 中文字幕乱在线伦视频中文字幕乱码在线 | 国产成人在线观看免费 | 欧美日韩首页 | 亚洲电影一区二区 | 国产福利91精品一区二区三区 | 国产91av视频在线观看 | 免费观看www7722午夜电影 | 国产精品18久久久久白浆 | 人人干人人模 | 亚洲一二区视频 | 天天爱天天操天天射 | 国产亚洲视频在线观看 | 久久99久久99免费视频 | 日韩av中文 | 91精品久久久久久久久久久久久 | 国产一线天在线观看 | 九九九九热精品免费视频点播观看 | 夜夜狠狠 | 欧美黑人巨大xxxxx | 91chinese在线 | 人人玩人人弄 | 麻豆视频免费在线观看 | 欧美一级乱黄 | 免费成人av在线看 | 99久久久国产精品免费99 | 天堂av影院 | 在线欧美日韩 | 欧美日韩在线第一页 | 国产一级视频在线观看 | 久艹视频免费观看 | 亚洲一区精品二人人爽久久 | 亚洲第一区在线播放 | av免费观看网址 | 国产91aaa| 精品国偷自产国产一区 | 久久成人亚洲欧美电影 | 久久无码精品一区二区三区 | 91麻豆精品国产自产在线游戏 | 亚洲精品视频在线观看网站 | 精品国产福利在线 | 午夜色站 | 狠狠色丁香久久婷婷综合_中 | 91成人免费电影 | 精品久久久久一区二区国产 | 亚洲片在线 | 国产伦精品一区二区三区照片91 | 黄色软件大全网站 | 国产伦理一区二区三区 | 国产精品久久视频 | 黄色毛片观看 | 999视频在线观看 | 人人插人人玩 | 激情综合五月 | 五月天天色 | 成人国产精品久久久久久亚洲 | 久久综合爱 | 国产免码va在线观看免费 | 午夜久久美女 | 99这里只有精品视频 | 亚洲作爱视频 | 亚洲精品免费在线视频 | 久久综合狠狠综合久久激情 | 人人爽影院 | 欧美日韩精品综合 | 日本精品一区二区 | 亚州精品成人 | 国产一级做a爱片久久毛片a | 最新中文在线视频 | 99国产在线 | 在线观看一区 | 久久1区| 日韩经典一区二区三区 | 欧美亚洲国产一卡 | 亚欧日韩av| 久久成人精品电影 | 精品国产一区二区三区av性色 | 日韩在线视频免费观看 | 免费男女羞羞的视频网站中文字幕 | 日韩系列在线观看 | 91成人免费电影 | 国产免费影院 | 蜜臀久久99精品久久久无需会员 | 免费黄色av. | 在线中文字幕视频 | 久久久www成人免费精品张筱雨 | 99久久精品久久久久久清纯 | 国产精品大片免费观看 | 国产精品系列在线观看 | 亚洲一区精品人人爽人人躁 | 成年人免费看片网站 | 欧美日韩国产高清视频 | 一区二区在线不卡 | 久久久影片 | 日韩三级在线观看 | 久久久久久高潮国产精品视 | 99热精品免费观看 | 精品久久久久久久 | 国产精品初高中精品久久 | 在线午夜电影神马影院 | 国内精品中文字幕 | 天天插一插 | av免费网站 | a天堂免费| 亚洲人成免费 | 成人aⅴ视频 | 欧美日韩中文另类 | 在线观看久草 | 一区二区不卡 | 91亚色视频 | 成人国产精品电影 | 在线观看视频三级 | 中文字幕一区二区三区乱码在线 | 国产又粗又长又硬免费视频 | 中文字幕 影院 | 久久久免费观看完整版 | 黄色一级动作片 | 久久人人爽爽人人爽人人片av | 93久久精品日日躁夜夜躁欧美 | 久久久久欧美精品999 | 天天综合网国产 | 91精品国产99久久久久久久 | 免费视频久久久久久久 | av一级片| 亚洲电影影音先锋 | 日一日操一操 | 久久视频在线观看 | 最近日本中文字幕 | 欧美 日韩 成人 | 日本精品一 | 最新三级在线 | 成人在线免费观看网站 | 久久www免费人成看片高清 | 免费看一级特黄a大片 | 日本性生活免费看 | 久操中文字幕在线观看 | 国产高清中文字幕 | 在线观影网站 | 国产在线高清 | av久久久 | 国内精品久久久久久 | 91精彩视频在线观看 | av资源免费观看 | 国产片网站 | 免费色黄| 日韩成人不卡 | 国产精品v欧美精品 | 丁香花在线观看视频在线 | 一二区av | 国产免费人成xvideos视频 | 9色在线视频 | 丁香狠狠| 97夜夜澡人人爽人人免费 | 成人免费在线观看av | 国产精品久久久久久久免费观看 | 人人爽人人看 | 五月婷婷狠狠 | 婷婷在线五月 | 99精品久久只有精品 | av中文字幕在线电影 | 国产精品免费成人 | 日本在线观看中文字幕无线观看 | 超碰在线最新网址 | 日韩草比 | 精品国产一区二区三区四区在线观看 | 久久国产剧场电影 | 毛片网免费 | 久久99精品国产91久久来源 | 日日夜夜添 | 久久久久久久久综合 | 久草视频资源 | 欧美日韩不卡在线观看 | 国产a精品| 黄色精品视频 | 国产欧美高清 | 中文av日韩| 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 三级免费黄 | 亚洲综合丁香 | 中文字幕在线观看视频一区二区三区 | 激情黄色av | 久久久精品国产一区二区 | 亚洲激色 | 亚洲天堂首页 | 看av免费 | 婷婷午夜 | 一本—道久久a久久精品蜜桃 | 中文字幕av免费观看 | 麻豆视频免费网站 | 免费看在线看www777 | 久久久久久免费视频 | 人人爽人人澡人人添人人人人 | 久久国产精品二国产精品中国洋人 | 毛片网站免费 | 日日夜夜精品免费观看 | 四虎成人精品永久免费av | 亚洲成人av在线播放 | 日本巨乳在线 | 久久中文欧美 | 在线观看免费高清视频大全追剧 | 一区二区视频免费在线观看 | 亚洲精品 在线视频 | 女人18片 | 久久99亚洲热视 | 亚洲一区二区三区四区在线视频 | 99国产视频在线 | 91黄色小网站 | 久久97久久 | 日韩伦理片hd | 在线视频久久 | 精品久久久久久亚洲综合网站 | av中文字幕亚洲 | 婷婷在线资源 | 超碰免费在线公开 | 天天婷婷 | 久久黄色影院 | 特级毛片爽www免费版 | 久久免费视频在线观看 | 日韩精品视频免费专区在线播放 | 91av在线不卡 | 欧美日韩亚洲在线观看 | 最新极品jizzhd欧美 | 黄网站app在线观看免费视频 | 97国产精品一区二区 | 欧美另类69 | 91丨九色丨高潮丰满 | 中文免费观看 | 久草干| 国产一区二区在线影院 | 日韩黄色在线电影 | 久久久免费精品国产一区二区 | 欧美成人久久 | 国产一区国产二区在线观看 | 在线一区二区三区 | 808电影 | 国产最新在线 | 成人av免费看 | 免费三级在线 | 欧美午夜精品久久久久久浪潮 | 亚洲春色成人 | 一区二区三区免费在线 | 久草视频视频在线播放 | 国产在线精品一区二区 | 亚洲美女精品区人人人人 | 99精品在线| 在线播放91 | 91麻豆精品国产91久久久久 | 国产色啪| 午夜av免费在线观看 | 亚洲成人精品在线 | av中文字幕在线免费观看 | 欧美日韩高清一区二区 | 久久精品99国产精品酒店日本 | 中文字幕一区二区三区乱码在线 | 精品一区二区亚洲 | 亚洲日韩精品欧美一区二区 | 国产一区二区精品91 | 国产又粗又猛又黄 | 天天狠狠| www.久热 | 国产在线久草 | 黄色av电影一级片 | 成人91在线 | 国产一区成人 | 日韩久久久久久久久久久久 | 国产在线观看免费观看 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 成人在线观看网址 | 欧美日高清视频 | 国产黄色看片 | 亚洲最新av | 天天做天天射 | 二区三区av | 91麻豆精品国产91久久久使用方法 | 园产精品久久久久久久7电影 | 美女免费电影 | 亚洲3级| 一区二区三区精品在线视频 | 久久毛片视频 | 日韩高清免费在线 | 超碰国产在线观看 | 激情欧美一区二区三区免费看 | 日日夜色 | 精品久久精品久久 | 久久精视频 | 精品视频在线免费观看 | 日韩久久久久久久久 | 久久香蕉电影网 | 日韩在线不卡视频 | 四虎天堂 | 久久尤物电影视频在线观看 | 色99色| 黄色免费在线视频 | 日韩剧 | www免费看片com | 91福利国产在线观看 | 97人人爽| 狠狠色丁香九九婷婷综合五月 | 国产一二三在线视频 | 香蕉视频亚洲 | 亚洲欧美日韩不卡 | 精品久久国产精品 | 天天操夜 | 久久免费视频8 | 黄色电影网站在线观看 | 五月婷婷毛片 | 欧美日韩综合在线观看 | 日韩欧美专区 | 日韩夜夜爽 | 久久午夜色播影院免费高清 | 国产精品久久久久久久久久久久午夜 | 中文网丁香综合网 | 日韩欧美69 | 国产va饥渴难耐女保洁员在线观看 | 日日天天 | 日本久久免费电影 | 一区二区视频在线免费观看 | 国产成人精品综合久久久久99 | 免费久久精品视频 | 欧美成人xxxx | 91黄色小网站 | 亚洲激情视频在线观看 | 日日日操 | 中文在线a∨在线 | 天天色天天草天天射 | 国内精品久久久久影院一蜜桃 | 激情丁香综合 | 国产一级大片在线观看 | 97在线资源 | 在线看片91 | 亚洲人成在线电影 | 日韩视频在线观看视频 | 综合国产视频 | 日韩中文字幕亚洲一区二区va在线 | 97av超碰| 国产精品大尺度 | 久久福利综合 | 日韩一级成人av | 91av大全| 在线视频日韩一区 | 国产精品日韩精品 | 永久免费av在线播放 | 免费网址你懂的 | 日韩精品中文字幕久久臀 | 久久免费的视频 | 色婷五月| 久久毛片网 | 一区二区三区视频网站 | 日韩专区在线播放 | 手机在线永久免费观看av片 | 国产精品女视频 | 国产午夜亚洲精品 | 91传媒激情理伦片 | 91片在线观看 | www.五月天婷婷 | 伊人天堂久久 | 日日天天干 | 国产精品精| 天天在线免费视频 | 国内毛片毛片 | h视频在线看 | 色午夜影院 | 中文字幕在线影院 | 亚洲伦理精品 | 天天色天天综合 | 久久99精品久久久久久久久久久久 | 午夜男人影院 | 97精品国产97久久久久久久久久久久 | 中文字幕在线免费观看 | 亚洲欧美怡红院 | 人人干人人爽 | 欧美一区二区精品在线 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 亚洲一级电影在线观看 | 亚洲 欧美 另类人妖 | 最近中文国产在线视频 | av电影在线观看完整版一区二区 | 亚洲高清不卡av | 国产高清一| av在线永久免费观看 | 人人插人人艹 | 日本精品久久 | 欧美精品久久人人躁人人爽 | 中文在线www | 国产韩国日本高清视频 | 在线精品观看国产 | 欧美激情综合五月色丁香 | 91秒拍国产福利一区 | 免费看污污视频的网站 | 久久视频在线看 | 深夜视频久久 | 久 久久影院| 亚洲1区 在线 | 国产在线观看免费 | 国产麻豆精品传媒av国产下载 | 亚洲精品乱码久久久久久9色 | 久久亚洲私人国产精品va | 亚洲毛片一区二区三区 | 亚洲.www | 国产涩涩在线观看 | 亚洲深夜影院 | 最新精品视频在线 | 天堂激情网 | 91黄色视屏 | 国产小视频在线看 | 一区二区精品视频 | 香蕉影视在线观看 | 人人澡人人爽欧一区 | av网站免费线看精品 | 午夜色大片在线观看 | 国产精品手机看片 | 国产精品视频永久免费播放 | 久久手机免费视频 | 精品日韩视频 | 美女久久一区 | 欧美天天射 | 五月激情视频 | 伊人久在线 | 国产日产精品久久久久快鸭 | 808电影免费观看三年 | 97超碰在线久草超碰在线观看 | www夜夜操| av 一区二区三区四区 | 国产黄a三级 | 不卡av电影在线 | 天天躁天天狠天天透 | 久久夜色精品国产亚洲aⅴ 91chinesexxx | 毛片网在线 | 国产精品永久在线 | 女人18精品一区二区三区 | 欧美精品久久99 | 久草网首页 | 青青河边草免费观看完整版高清 | 久久综合久久综合久久综合 | 91精品国产一区 | 99热播精品 | 青青河边草免费观看 | 亚洲一区天堂 | 国产精品激情在线观看 | 黄色精品一区二区 | 亚洲在线 | 久免费 | 日本色小说视频 | 狠狠操狠狠干天天操 | 免费一级黄色 | 在线v片 | 久久久久久国产精品999 | 日韩久久影院 | 玖玖玖影院 | 中文字幕一区二区三区在线视频 | 69绿帽绿奴3pvideos| 国产1区2区 | 人人爽人人插 | wwxxxx日本 | 国产一区在线播放 | 在线观看完整版 | 国产午夜精品理论片在线 | 亚洲精品视频二区 | 超碰在线天天 | 九九九九热精品免费视频点播观看 | 国产一区二区三区久久久 | 亚洲综合精品在线 | 96精品视频 | 狠狠干天天色 | 亚洲国产婷婷 | 亚洲成人网在线 | 国产在线视频一区二区三区 | 91精品国自产拍天天拍 | 91黄视频在线 | 中文免费观看 | 国产不卡在线视频 | 中文字幕黄网 | 日韩成人精品一区二区 | 欧美日韩不卡一区二区三区 | 新版资源中文在线观看 | 日本久久精品 | 日本黄色免费播放 | 日韩高清一二区 | 91pony九色丨交换 | 伊人久久国产精品 | 婷婷在线视频观看 | 成人在线一区二区 | 国内小视频 | 国产精品白虎 | 日韩免费三区 | 视频在线亚洲 | 成片视频免费观看 | 日韩久久精品一区二区三区 | 在线成人国产 | 日韩91在线 | 99视频在线免费播放 | 久久这里只有精品久久 | 日韩视频免费观看高清完整版在线 | 国产黄色播放 | 国产精品99久久久久久有的能看 | 精品国产观看 | 国产最新91 | 91精品欧美一区二区三区 | 精品一区二区精品 | 黄在线 | 不卡在线一区 | 国产一区在线不卡 | 久久欧美视频 | 中文字幕日韩电影 | 久久成人国产精品免费软件 | 91资源在线免费观看 | 免费日韩| 99久久精品国产毛片 | 国产精品高潮久久av | 色网站免费在线观看 | 久久综合婷婷国产二区高清 | 在线观看黄网站 | 日韩欧美在线视频一区二区 | 国产高清av免费在线观看 | 国产高清视频色在线www | 欧美精彩视频在线观看 | 日韩激情av在线 | 日本精品一区二区三区在线播放视频 | av黄色在线观看 | 高清不卡毛片 | 日本中文乱码卡一卡二新区 | 麻豆传媒在线视频 | 久久电影中文字幕视频 | 国产 欧美 在线 | av在线最新 | 日韩欧美观看 | 婷婷色五 | 国产色视频 | 午夜久久久久久久 | 午夜视频在线瓜伦 | 在线 国产 亚洲 欧美 | 久久久久黄色 | 日韩国产精品久久久久久亚洲 | 欧美特一级片 | 99热最新精品 | 一区二区三区 亚洲 | 激情黄色一级片 | 亚洲国产欧美在线人成大黄瓜 | 波多野结衣在线观看一区 | 午夜丰满寂寞少妇精品 | 中文字幕一区在线 | 欧美激情精品久久 | 天天色天天草天天射 | 国产欧美高清 | 国产精品免费观看网站 | 在线看国产一区 | 综合国产视频 | 久久久免费精品国产一区二区 | 国内精品一区二区 | 高清av中文在线字幕观看1 | www久| 色综合网在线 | 在线免费中文字幕 | 欧美福利视频一区 | 久草精品在线播放 | 超黄视频网站 | 亚洲第一区精品 | 日韩免费电影 | 国产一级在线免费观看 | 96久久| v片在线播放 | 久久爱992xxoo| 国产精品成人免费精品自在线观看 | 美女福利视频网 |