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

SpringBoot注解詳解,建議收藏!

開發 項目管理
SpringBoot 為開發者提供了多少注解呢?我們該如何使用?

一、簡介

基于 SpringBoot 平臺開發的項目數不勝數,與常規的基于Spring開發的項目最大的不同之處,SpringBoot 里面提供了大量的注解用于快速開發,而且非常簡單,基本可以做到開箱即用!

那 SpringBoot 為開發者提供了多少注解呢?我們該如何使用?

針對此問題,小編特意對其進行了一番整理,內容如下,個人感覺還是比較清晰的,今天我們就一起來整一整每個注解的含義和用法,以免踩坑!

二、注解總結

2.1. SpringMVC 相關注解

  • @Controller

通常用于修飾controller層的組件,由控制器負責將用戶發來的URL請求轉發到對應的服務接口,通常還需要配合注解@RequestMapping使用。

  • @RequestMapping

提供路由信息,負責URL到Controller中具體函數的映射,當用于方法上時,可以指定請求協議,比如GET、POST、PUT、DELETE等等。

  • @RequestBody

表示請求體的Content-Type必須為application/json格式的數據,接收到數據之后會自動將數據綁定到Java對象上去

  • @ResponseBody

表示該方法的返回結果直接寫入HTTP response body中,返回數據的格式為application/json。

比如,請求參數為json格式,返回參數也為json格式,示例代碼如下:

/**
* 登錄服務
*/
@Controller
@RequestMapping("api")
public class LoginController {

/**
* 登錄請求,post請求協議,請求參數數據格式為json
* @param request
*/
@RequestMapping(value = "login", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity login(@RequestBody UserLoginDTO request){
//...業務處理
return new ResponseEntity(HttpStatus.OK);
}
}
  • @RestController

和@Controller一樣,用于標注控制層組件,不同的地方在于:它是@ResponseBody和@Controller的合集,也就是說,在當@RestController用在類上時,表示當前類里面所有對外暴露的接口方法,返回數據的格式都為application/json,示范代碼如下:

@RestController
@RequestMapping("api")
public class LoginController {

/**
* 登錄請求,post請求協議,請求參數數據格式為json
* @param request
*/
@RequestMapping(value = "login", method = RequestMethod.POST)
public ResponseEntity login(@RequestBody UserLoginDTO request){
//...業務處理
return new ResponseEntity(HttpStatus.OK);
}
}
  • @RequestParam

用于接收請求參數為表單類型的數據,通常用在方法的參數前面,示范代碼如下:

/**
* 登錄請求,post請求協議,請求參數數據格式為表單
*/
@RequestMapping(value = "login", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity login(@RequestParam(value = "userName",required = true) String userName,
@RequestParam(value = "userPwd",required = true) String userPwd){
//...業務處理
return new ResponseEntity(HttpStatus.OK);
}
  • @PathVariable

用于獲取請求路徑中的參數,通常用于restful風格的api上,示范代碼如下:

/**
* restful風格的參數請求
* @param id
*/
@RequestMapping(value = "queryProduct/{id}", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity queryProduct(@PathVariable("id") String id){
//...業務處理
return new ResponseEntity(HttpStatus.OK);
}
  • @GetMapping

除了@RequestMapping可以指定請求方式之外,還有一些其他的注解,可以用于標注接口路徑請求,比如GetMapping用在方法上時,表示只支持get請求方法,等價于@RequestMapping(value="/get",method=RequestMethod.GET)。

@GetMapping("get")
public ResponseEntity get(){
return new ResponseEntity(HttpStatus.OK);
}
  • @PostMapping

用在方法上,表示只支持post方式的請求。

@PostMapping("post")
public ResponseEntity post(){
return new ResponseEntity(HttpStatus.OK);
}
  • @PutMapping

用在方法上,表示只支持put方式的請求,通常表示更新某些資源的意思。

@PutMapping("put")
public ResponseEntity put(){
return new ResponseEntity(HttpStatus.OK);
}
  • @DeleteMapping

用在方法上,表示只支持delete方式的請求,通常表示刪除某些資源的意思。

@DeleteMapping("delete")
public ResponseEntity delete(){
return new ResponseEntity(HttpStatus.OK);
}

2.2. bean 相關注解

  • @Service

通常用于修飾service層的組件,聲明一個對象,會將類對象實例化并注入到bean容器里面。

@Service
public class DeptService {

//具體的方法
}
  • @Component

泛指組件,當組件不好歸類的時候,可以使用這個注解進行標注,功能類似于于@Service。

@Component
public class DeptService {

//具體的方法
}
  • @Repository

通常用于修飾dao層的組件,@Repository注解屬于Spring里面最先引入的一批注解,它用于將數據訪問層 (DAO層 ) 的類標識為Spring Bean,具體只需將該注解標注在 DAO類上即可,示例代碼如下:

@Repository
public interface RoleRepository extends JpaRepository<Role,Long> {

//具體的方法
}

為什么現在使用的很少呢?

主要是因為當我們配置服務啟動自動掃描dao層包時,Spring會自動幫我們創建一個實現類,然后注入到bean容器里面。當某些類無法被掃描到時,我們可以顯式的在數據持久類上標注@Repository注解,Spring會自動幫我們聲明對象。

  • @Bean

相當于 xml 中配置 Bean,意思是產生一個 bean 對象,并交給spring管理,示例代碼如下:

@Configuration
public class AppConfig {

//相當于 xml 中配置 Bean
@Bean
public Uploader initFileUploader() {
return new FileUploader();
}

}
  • @Autowired

自動導入依賴的bean對象,默認時按照byType方式導入對象,而且導入的對象必須存在,當需要導入的對象并不存在時,我們可以通過配置required = false來關閉強制驗證。

@Autowired
private DeptService deptService;
  • @Resource

也是自動導入依賴的bean對象,由JDK提供,默認是按照byName方式導入依賴的對象;而@Autowired默認時按照byType方式導入對象,當然@Resource還可以配置成通過byType方式導入對象。

/**
* 通過名稱導入(默認通過名稱導入依賴對象)
*/
@Resource(name = "deptService")
private DeptService deptService;

/**
* 通過類型導入
*/
@Resource(type = RoleRepository.class)
private DeptService deptService;
  • @Qualifier

當有多個同一類型的bean時,使用@Autowired導入會報錯,提示當前對象并不是唯一,Spring不知道導入哪個依賴,這個時候,我們可以使用@Qualifier進行更細粒度的控制,選擇其中一個候選者,一般于@Autowired搭配使用,示例如下:

@Autowired
@Qualifier("deptService")
private DeptService deptService;
  • @Scope

用于生命一個spring bean的作用域,作用的范圍一共有以下幾種:

  • singleton:唯一 bean 實例,Spring 中的 bean 默認都是單例的。
  • prototype:每次請求都會創建一個新的 bean 實例,對象多例。
  • request:每一次 HTTP 請求都會產生一個新的 bean,該 bean 僅在當前 HTTP request 內有效。
  • session:每一次 HTTP 請求都會產生一個新的 bean,該 bean 僅在當前 HTTP session 內有效。
/**
* 單例對象
*/
@RestController
@Scope("singleton")
public class HelloController {

}

2.3. JPA 相關注解

  • @Entity和@Table

表明這是一個實體類,這兩個注解一般一塊使用,但是如果表名和實體類名相同的話,@Table可以省略。

  • @Id

表示該屬性字段對應數據庫表中的主鍵字段。

  • @Column

表示該屬性字段對應的數據庫表中的列名,如果字段名與列名相同,則可以省略。

  • @GeneratedValue

表示主鍵的生成策略,有四個選項,分別如下:

  • AUTO:表示由程序控制,是默認選項 ,不設置就是這個
  • IDENTITY:表示由數據庫生成,采用數據庫自增長,Oracle 不支持這種方式
  • SEQUENCE:表示通過數據庫的序列生成主鍵ID,MYSQL 不支持
  • Table:表示由特定的數據庫產生主鍵,該方式有利于數據庫的移植
  • @SequenceGeneretor

用來定義一個生成主鍵的序列,它需要與@GeneratedValue聯合使用才有效,以TB_ROLE表為例,對應的注解配置如下:

@Entity
@Table(name = "TB_ROLE")
@SequenceGenerator(name = "id_seq", sequenceName = "seq_repair",allocationSize = 1)
public class Role implements Serializable {

private static final long serialVersionUID = 1L;

/**
* 主鍵ID,采用【id_seq】序列函數自增長
*/
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "id_seq")
private Long id;


/* 角色名稱
*/
@Column(nullable = false)
private String roleName;

/**
* 角色類型
*/
@Column(nullable = false)
private String roleType;
}

  • @Transient

表示該屬性并非與數據庫表的字段進行映射,ORM 框架會將忽略該屬性。

/**
* 忽略該屬性
*/
@Column(nullable = false)
@Transient
private String lastTime;
  • @Basic(fetch=FetchType.LAZY)

用在某些屬性上,可以實現懶加載的效果,也就是當用到這個字段的時候,才會裝載這個屬性,如果配置成fetch=FetchType.EAGER,表示即時加載,也是默認的加載方式!

/**
* 延遲加載該屬性
*/
@Column(nullable = false)
@Basic(fetch = FetchType.LAZY)
private String roleType;
  • @JoinColumn

用于標注表與表之間關系的字段,通常與@OneToOne、@OneToMany搭配使用,例如如下:

@Entity
@Table(name = "tb_login_log")
public class LoginLog implements Serializable {

/**
* 查詢登錄的用戶信息
*/
@OneToOne
@JoinColumn(name = "user_id")
private User user;

//...get、set
}
  • @OneToOne、@OneToMany和@ManyToOne

這三個注解,相當于hibernate配置文件中的一對一,一對多,多對一配置,比如下面的客戶地址表,通過客戶 ID,實現客戶信息的查詢。

@Entity
@Table(name="address")
public class AddressEO implements java.io.Serializable {

@ManyToOne(cascade = { CascadeType.ALL })
@JoinColumn(name="customer_id")
private CustomerEO customer;

//...get、set
}

2.4. 配置相關注解

  • @Configuration

表示聲明一個 Java 形式的配置類,Spring Boot 提倡基于 Java 的配置,相當于你之前在 xml 中配置 bean,比如聲明一個配置類AppConfig,然后初始化一個Uploader對象。

@Configuration
public class AppConfig {

@Bean
public Uploader initOSSUploader() {
return new OSSUploader();
}

}
  • @EnableAutoConfiguration

@EnableAutoConfiguration可以幫助SpringBoot應用將所有符合條件的@Configuration配置類,全部都加載到當前SpringBoot里,并創建對應配置類的Bean,并把該Bean實體交給IoC容器進行管理。

某些場景下,如果我們想要避開某些配置類的掃描(包括避開一些第三方jar包下面的配置,可以這樣處理。

@Configuration
@EnableAutoConfiguration(exclude = { org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class})
public class AppConfig {

//具有業務方法
}
  • @ComponentScan

標注哪些路徑下的類需要被Spring掃描,用于自動發現和裝配一些Bean對象,默認配置是掃描當前文件夾下和子目錄下的所有類,如果我們想指定掃描某些包路徑,可以這樣處理。

@ComponentScan(basePackages = {"com.xxx.a", "com.xxx.b", "com.xxx.c"})
  • @SpringBootApplication

等價于使用@Configuration、@EnableAutoConfiguration、@ComponentScan這三個注解,通常用于全局啟動類上,示例如下:

@SpringBootApplication
public class PropertyApplication {

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

把@SpringBootApplication換成@Configuration、@EnableAutoConfiguration、@ComponentScan這三個注解,一樣可以啟動成功,@SpringBootApplication只是將這三個注解進行了簡化!

  • @EnableTransactionManagement

表示開啟事務支持,等同于 xml 配置方式的:

@SpringBootApplication
@EnableTransactionManagement`
public class PropertyApplication {

public static void main(String[] args) {
SpringApplication.run(PropertyApplication.class, args);
}
}
  • @Conditional

從 Spring4 開始,可以通過@Conditional注解實現按條件裝載bean對象,目前 Spring Boot 源碼中大量擴展了@Condition注解,用于實現智能的自動化配置,滿足各種使用場景。下面我給大家列舉幾個常用的注解:

  • @ConditionalOnBean:當某個特定的Bean存在時,配置生效
  • @ConditionalOnMissingBean:當某個特定的Bean不存在時,配置生效
  • @ConditionalOnClass:當Classpath里存在指定的類,配置生效
  • @ConditionalOnMissingClass:當Classpath里不存在指定的類,配置生效
  • @ConditionalOnExpression:當給定的SpEL表達式計算結果為true,配置生效
  • @ConditionalOnProperty:當指定的配置屬性有一個明確的值并匹配,配置生效

具體的應用案例如下:

@Configuration
public class ConditionalConfig {


/**
* 當AppConfig對象存在時,創建一個A對象
* @return
*/
@ConditionalOnBean(AppConfig.class)
@Bean
public A createA(){
return new A();
}

/**
* 當AppConfig對象不存在時,創建一個B對象
* @return
*/
@ConditionalOnMissingBean(AppConfig.class)
@Bean
public B createB(){
return new B();
}


/**
* 當KafkaTemplate類存在時,創建一個C對象
* @return
*/
@ConditionalOnClass(KafkaTemplate.class)
@Bean
public C createC(){
return new C();
}

/**
* 當KafkaTemplate類不存在時,創建一個D對象
* @return
*/
@ConditionalOnMissingClass(KafkaTemplate.class)
@Bean
public D createD(){
return new D();
}


/**
* 當enableConfig的配置為true,創建一個E對象
* @return
*/
@ConditionalOnExpression("${enableConfig:false}")
@Bean
public E createE(){
return new E();
}


/**
* 當filter.loginFilter的配置為true,創建一個F對象
* @return
*/
@ConditionalOnProperty(prefix = "filter",name = "loginFilter",havingValue = "true")
@Bean
public F createF(){
return new F();
}
}
  • @value

可以在任意 Spring 管理的 Bean 中通過這個注解獲取任何來源配置的屬性值,比如你在application.properties文件里,定義了一個參數變量!

config.name=zhangsan

在任意的bean容器里面,可以通過@Value注解注入參數,獲取參數變量值。

@RestController
public class HelloController {

@Value("${config.name}")
private String config;

@GetMapping("config")
public String config(){
return JSON.toJSONString(config);
}
}
  • @ConfigurationProperties

上面@Value在每個類中獲取屬性配置值的做法,其實是不推薦的。

一般在企業項目開發中,不會使用那么雜亂無章的寫法而且維護也麻煩,通常會一次性讀取一個 Java 配置類,然后在需要使用的地方直接引用這個類就可以多次訪問了,方便維護,示例如下:

首先,在application.properties文件里定義好參數變量。

config.name=demo_1
config.value=demo_value_1

然后,創建一個 Java 配置類,將參數變量注入即可!

@Component
@ConfigurationProperties(prefix = "config")
public class Config {

public String name;

public String value;

//...get、set
}

最后,在需要使用的地方,通過ioc注入Config對象即可!

  • @PropertySource

這個注解是用來讀取我們自定義的配置文件的,比如導入test.properties和bussiness.properties兩個配置文件,用法如下:

@SpringBootApplication
@PropertySource(value = {"test.properties","bussiness.properties"})
public class PropertyApplication {

public static void main(String[] args) {
SpringApplication.run(PropertyApplication.class, args);
}
}
  • @ImportResource

用來加載 xml 配置文件,比如導入自定義的aaa.xml文件,用法如下:

@ImportResource(locations = "classpath:aaa.xml")
@SpringBootApplication
public class PropertyApplication {

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

2.5. 異常處理相關注解

  • @ControllerAdvice和@ExceptionHandler

通常組合使用,用于處理全局異常,示例代碼如下:

@ControllerAdvice
@Configuration
@Slf4j
public class GlobalExceptionConfig {

private static final Integer GLOBAL_ERROR_CODE = 500;

@ExceptionHandler(value = Exception.class)
@ResponseBody
public void exceptionHandler(HttpServletRequest request, HttpServletResponse response, Exception e) throws Exception {
log.error("【統一異常處理器】", e);
ResultMsg<Object> resultMsg = new ResultMsg<>();
resultMsg.setCode(GLOBAL_ERROR_CODE);
if (e instanceof CommonException) {
CommonException ex = (CommonException) e;
if(ex.getErrCode() != 0) {
resultMsg.setCode(ex.getErrCode());
}
resultMsg.setMsg(ex.getErrMsg());
}else {
resultMsg.setMsg(CommonErrorMsg.SYSTEM_ERROR.getMessage());
}
WebUtil.buildPrintWriter(response, resultMsg);
}


}

2.6. 測試相關注解

  • @ActiveProfiles

一般作用于測試類上, 用于聲明生效的 Spring 配置文件,比如指定application-dev.properties配置文件。

  • @RunWith和@SpringBootTest

一般作用于測試類上, 用于單元測試用,示例如下:

@ActiveProfiles("dev")
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestJunit {

@Test
public void executeTask() {
//測試...
}
}

三、小結

整個篇幅內容比較多,比較干,大家在看的過程中,也沒有必要去記住,可以先收藏起來,等到需要用到的時候,再把它拿出來看看!

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2020-12-18 08:03:00

插件MyBatis Executor

2021-10-26 11:45:22

Vue面試前端

2025-01-14 17:00:00

SpringBoot開發代碼

2023-09-27 16:22:51

SpringMySQL原子性

2021-01-26 09:25:02

Nginx開源軟件服務器

2022-08-24 11:54:10

Pandas可視化

2021-05-27 05:34:22

Git開源控制系統

2020-12-09 16:57:15

數據分析大數據

2022-05-23 10:55:19

華為數字化轉型架構藍圖

2022-05-18 11:35:17

Python字符串

2021-10-12 13:35:30

C++Set紅黑樹

2025-02-26 08:50:00

2019-09-03 10:55:20

Python函數lambad

2022-07-20 00:15:48

SQL數據庫編程語言

2020-03-12 09:06:05

數據挖掘聚類分析學習

2020-07-06 11:53:08

TCP三次握手協議

2025-04-02 09:10:00

LinuxShell腳本

2022-07-20 09:05:06

Python編程語言

2024-07-31 08:33:17

2020-09-24 10:00:50

SpringBoo
點贊
收藏

51CTO技術棧公眾號

精品国产丝袜高跟鞋| 精品人妻一区二区三区免费看| 亚洲欧洲一二区| 自拍偷拍欧美精品| yy111111少妇影院日韩夜片| 国产情侣在线视频| 第一会所亚洲原创| 日韩亚洲欧美一区| 成年人免费在线播放| 在线免费av网站| 成人美女视频在线观看| 国产精品91在线| a级片在线观看免费| 中文字幕av一区二区三区人| 欧美美女bb生活片| 国产91对白刺激露脸在线观看| 在线免费观看的av网站| 91亚洲男人天堂| 国产日韩欧美成人| 国产成人在线免费视频| 亚欧美无遮挡hd高清在线视频 | 六月丁香激情网| 色三级在线观看| 97久久精品人人爽人人爽蜜臀| 国产一区二区在线播放| 欧美特黄aaaaaa| 欧美成人首页| 日韩一区av在线| 91成人破解版| 林ゆな中文字幕一区二区| 欧美精品xxxxbbbb| 宅男噜噜噜66国产免费观看| 国产福利电影在线播放| 国产精品久久久久影院老司| 久久国产精品 国产精品| av老司机久久| 美女免费视频一区二区| 欧美在线观看网站| 国产精品 欧美 日韩| 亚洲精品二区三区| 亚洲精品乱码久久久久久按摩观| 波多结衣在线观看| 在线观看福利电影| 午夜久久久久久电影| 超碰10000| 91在线中文| 亚洲少妇30p| 正在播放一区| 尤物在线视频| 国产精品丝袜黑色高跟| 日韩午夜视频在线观看| 精品视频一二三| 久久一夜天堂av一区二区三区| 国产免费一区| 日韩一级片免费在线观看| 福利电影一区二区三区| 91精品在线播放| 91精品国产乱码久久久久| 日韩成人dvd| 国产精品久久久久久久久久小说| 国产又黄又猛又粗又爽| 亚洲精品美女| 97视频免费观看| 亚洲s码欧洲m码国产av| 久久国产99| 国产精彩精品视频| 中文字幕av片| 久久99精品久久只有精品| 国产区亚洲区欧美区| 国产精品毛片一区视频播| 国产美女视频91| 国产精品免费在线 | 精品偷拍各种wc美女嘘嘘| 亚洲精品中文字幕在线播放| 欧美性生活一级片| 亚洲香蕉成人av网站在线观看| 国产三级av在线播放| 精品一区二区三区在线| xvideos亚洲人网站| 天天做夜夜爱爱爱| 黄色免费成人| 日韩免费观看视频| 91丨porny丨在线中文 | 国产一区不卡在线观看| 亚洲 欧美 自拍偷拍| 久久精品视频在线免费观看| 亚洲va韩国va欧美va精四季| av免费在线观看网站| 亚洲高清在线视频| 久草在在线视频| 国产一区二区高清在线| 亚洲成人精品视频| 欧美狂猛xxxxx乱大交3| 婷婷亚洲最大| 91av在线播放视频| 亚洲综合精品国产一区二区三区 | 欧美日韩免费一区二区三区| 三区视频在线观看| 国产精品极品在线观看| 国产亚洲精品久久久优势 | 国产高清视频在线观看| 亚洲日本电影在线| 欧美国产激情视频| 电影91久久久| 精品视频—区二区三区免费| 国产性生活大片| 香蕉久久国产| 91免费版黄色| 国产98在线| 亚洲大片免费看| 国产一级片自拍| 亲子伦视频一区二区三区| 久久精品国产精品亚洲| 国产精品久免费的黄网站| 国产精品一区专区| 亚洲激情啪啪| 天堂在线中文网官网| 6080国产精品一区二区| aaaaa级少妇高潮大片免费看| 亚洲国产成人精品女人| 国产国产精品人在线视| 五月天丁香视频| 亚洲欧洲中文日韩久久av乱码| 久久久久久久久久福利| 超碰在线成人| 欧美日韩第一页| 91精品国产综合久| 国产精品情趣视频| 麻豆av免费在线| 精品自拍偷拍| 欧美激情精品久久久久久蜜臀 | 国产污污视频在线观看| 国产精品一区二区久激情瑜伽| 日韩成人av网站| 欧美裸体视频| 亚洲高清久久网| 欧美日韩精品亚洲精品| 国产在线国偷精品产拍免费yy| 日本一区二区精品视频| 久久uomeier| 日韩经典第一页| 精品国产乱码一区二区| 成人丝袜高跟foot| 亚洲激情免费视频| 欧美午夜在线播放| 久久精品视频免费播放| 91麻豆视频在线观看| 国产精品久久久久9999吃药| 最新中文字幕免费视频| 欧美精品羞羞答答| 国产精品老女人精品视频| 户外极限露出调教在线视频| 欧美视频在线观看免费| 无套内谢大学处破女www小说| 在线欧美三区| 精品国产一区二区三区久久久久久| h片视频在线观看| 精品福利一区二区三区免费视频| 久久高清无码视频| www.激情成人| 欧美黄网站在线观看| 蜜臀久久99精品久久一区二区 | 国产一区二区三区在线免费| 亚洲超碰在线观看| 久久久久久久久综合| 欧美一级淫片免费视频魅影视频| 亚洲成av人综合在线观看| 网站免费在线观看| 老**午夜毛片一区二区三区| 欧美一区二区三区四区在线观看地址| 韩国三级一区| 中文字幕9999| www.色视频| 欧美日韩激情视频| 人人爽人人爽人人片| 韩国视频一区二区| 国产资源在线免费观看| 亚洲图区在线| 91久久久久久久| av在线不卡免费| 国产亚洲精品久久久优势| 91av国产精品| 亚洲国产va精品久久久不卡综合| 国产特级黄色录像| 九一久久久久久| 大胆欧美熟妇xx| 九九视频精品全部免费播放| 成人精品视频久久久久| av在线加勒比| 日韩中文字幕亚洲| 人妻少妇精品无码专区久久| 欧洲一区在线观看| 久久精品亚洲无码| 国产亚洲精品中文字幕| 日本少妇一区二区三区| 亚洲一区国产| 蜜桃网站在线观看| 免费视频国产一区| 99久久自偷自偷国产精品不卡| 一根才成人网| 色综合久久久久久中文网| 国产精品视频二区三区| 亚洲第一视频网站| 一区二区小视频| 精品女厕一区二区三区| 黄色录像免费观看| 久久久久久久av麻豆果冻| 91精品国产高清91久久久久久| 久久婷婷丁香| 我的公把我弄高潮了视频| 久久社区一区| 蜜桃网站成人| 超碰成人97| 亚洲一区亚洲二区| 国产精品诱惑| 欧美综合在线观看| av福利在线导航| 久久久成人精品视频| 国产一区二区三区福利| 亚洲国产小视频在线观看| 国产精品久久久久久久久毛片 | 欧美日韩国产精品一区二区三区四区| 懂色av粉嫩av蜜臀av一区二区三区| av一二三不卡影片| 国产精品99精品无码视亚| 久久国产人妖系列| 999精品视频在线| 丝袜亚洲精品中文字幕一区| 国产综合中文字幕| 国语自产精品视频在线看8查询8| 一区二区三区四区欧美| 成人在线视频免费观看| 欧美精品久久久| 日韩美女精品| 精品无人区一区二区三区| 岛国精品一区| 国产精品青青草| 99久热这里只有精品视频免费观看| 91热精品视频| 精品国产第一国产综合精品| 成人午夜在线观看| 2019中文亚洲字幕| 成人精品aaaa网站| 久久视频免费| 亚洲自拍欧美色图| 亚洲高清在线一区| 国产精品美女黄网| 三级精品视频| 欧美亚洲爱爱另类综合| 色综合综合网| 色噜噜狠狠一区二区三区| 日本精品黄色| 中文字幕一区二区三区5566| 99国产**精品****| 亚洲黄色网址在线观看| 欧美久久综合| 超碰成人免费在线| 亚洲欧美日本国产专区一区| 日本www在线播放| 日韩精品欧美精品| 亚洲自拍第三页| 国产成人在线视频网站| 免费看91视频| 26uuu国产一区二区三区| 国产精品久久久久无码av色戒| 国产婷婷色一区二区三区四区| 极品蜜桃臀肥臀-x88av| 亚洲色图在线视频| 久久精品欧美一区二区| 色婷婷激情久久| 亚洲综合精品国产一区二区三区| 日韩三级av在线播放| 无码国产伦一区二区三区视频| 亚洲天堂免费在线| 国产精品剧情| 777精品视频| 激情久久99| 成人av中文| 亚洲8888| 韩国黄色一级大片| 亚洲麻豆av| 特级丰满少妇一级| 国产成+人+日韩+欧美+亚洲| 日本japanese极品少妇| 国产精品视频观看| 精品少妇theporn| 在线看日本不卡| 午夜久久久久久久久久| 亚洲天堂成人在线视频| 1区2区3区在线视频| 欧美中文在线字幕| 国产精品成人3p一区二区三区| 好吊妞www.84com只有这里才有精品| 你微笑时很美电视剧整集高清不卡 | 国产白丝袜美女久久久久| 日韩电影免费一区| 91九色蝌蚪porny| 国产精品毛片高清在线完整版 | 久草资源在线观看| 55夜色66夜色国产精品视频| 日韩城人网站| 蜜桃999成人看片在线观看| 亚洲不卡av不卡一区二区| 91精品91久久久中77777老牛| 狠狠久久亚洲欧美| 波多野结衣a v在线| 亚洲宅男天堂在线观看无病毒| 一级黄色av片| 亚洲精品动漫100p| 羞羞视频在线观看免费| 国产精品青草久久久久福利99| 精品视频自拍| www.国产在线播放| 国产一区在线不卡| 欧美成人久久久免费播放| 五月婷婷另类国产| 亚洲精品视频专区| 久久久成人精品| 欧美jizz18| 一区二区三区色| 亚洲成人av免费在线观看| 亚洲精品欧美二区三区中文字幕| 日韩免费不卡视频| 日韩亚洲欧美一区二区三区| 淫片在线观看| 国产精品成人免费电影| 日韩精选在线| 欧美日韩黄色一级片| 成人午夜av影视| 久久久国产成人| 欧美一区二区三区喷汁尤物| aiai在线| 国产精品狼人色视频一区| 国产精品探花在线观看| 国产网站免费在线观看| 成人18精品视频| 在线看成人av| 欧美精品一区男女天堂| 高清电影在线观看免费| 国产精华一区| 精品av久久久久电影| 亚洲国产精品第一页| 夜夜亚洲天天久久| 亚洲男人第一天堂| 久久久久久久久久久人体| 超碰成人97| 国产成人无码a区在线观看视频| 成人免费毛片片v| 91香蕉在线视频| 日韩精品亚洲精品| 奇米777日韩| 水蜜桃亚洲精品| 精品在线播放免费| 成人免费观看网址| 男人的天堂久久| 久久久999视频| 久久久精品2019中文字幕之3| 免费的毛片视频| 国产一区二区黄| 激情小说亚洲| 国产尤物av一区二区三区| 成人深夜视频在线观看| 精品国产免费观看| 国产一区二区三区在线看| 成人激情视屏| av磁力番号网| 成人性生交大片| 精品欧美一区二区三区免费观看| 亚洲九九九在线观看| av成人亚洲| 国产一二三四区在线观看| 成人一级片网址| 日韩精品久久久久久免费| 最近更新的2019中文字幕| 欧美国产亚洲精品| 内射国产内射夫妻免费频道| 久久久99精品久久| 国产又大又粗又硬| 欧美精品aaa| 国产一区三区在线播放| 91在线第一页| 丁香五六月婷婷久久激情| 永久免费在线观看视频| 成人毛片网站| 日本在线不卡视频一二三区| 国产精品国产精品88| 亚洲国产精品视频在线观看| 色猫猫成人app| 男人插女人视频在线观看| 中文字幕欧美激情一区| 亚洲老妇色熟女老太| 国产精品高潮呻吟久久av野狼| 欧美另类视频| 少妇视频在线播放| 亚洲电影免费观看| 久久精品资源| 国产日产欧美视频| 亚洲品质自拍视频| 国产三区四区在线观看| 999视频在线免费观看|