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

歡迎訪問 生活随笔!

生活随笔

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

javascript

Spring的使用

發布時間:2024/3/24 javascript 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Spring的簡單使用

1、傳統的三層架構問題

M:Model

? pojo service DAO

V:View

? HTML jsp

C:Controller

? Servlet

Controller------------------>Service-------------------->DAO

Servlet 提供事務 JDBC|dbutils

? 整合Controller的框架 以及DAO的框架

SpringMVC

我們可以這樣認為:Controller-----依賴---->Service-----依賴----->DAO

2、Spring是什么

Spring是一個用來做對象創建、以及管理對象之間依賴關系的 這樣一個框架

管理依賴關系:Controller-----依賴---->Service-----依賴----->DAO

對象創建:原來創建對象(new 反射 對象克隆)----有了Spring之后(Spring幫我們自動創建)

Spring:春天 程序員的春天來了

3、Spring能干什么

3.1、Spring在開發中到底能干嗎?

1、為業務邏輯層提供事務

2、整合第三方框架 相當于是整個結構中的一個粘合劑

3、提供了控制器的解決方案

4、提供了控制器的解決方案 JdbcTemplate

5、提供了郵件的整合方案

6、提供了Aop編程的這種思想

7、提供了Web支持的解決方案

8、IOC、DI

3.2、Spring中的七大模塊以及功能

Spring Core :IOC DI

Spring Aop :面向切面編程的一些東西

Spring DAO:DAO層的解決方案 ----------->JdbcTemplate

Spring ORM:這個包簡單的說 就是提供了 第三方數據庫訪問的框架的整合 (iBatis、Hibernate)

? O:Obeject

? R:Relation

? M:Mapping

JAVA對象通過映射關系 直接映射到 數據庫表 的這樣一門技術 其實就是DAO層的解決方案

Spring Web:提供了Web項目的一些支持

Spring WebMVC:Spring MVC------控制器的解決方案

Spring Context:主要提供的是上下文的支持

3.3、Spring的家族都有哪些框架

Spring SpringBoot SpringSecurity SpringCloud(不是一個框架 是一系列做微服務框架的集合)

###4、Spring中的IOC的問題

IOC:控制反轉

誰控制了誰?

? 以前我們創建Java對象的時候 自己創建的 new這種方式去完成

? JAVA對象的創建 就不再由我們去創建 而是由Spring自動去創建

? Spring控制了Java對象的創建

什么東西反轉了?

? 創建對象的權利給反轉了

5、Spring中DI問題

6、Spring的第一個HelloWorld程序

6.1、導包

<dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.3.7.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.3.7.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-web --><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.3.7.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.3.7.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-aop --><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>4.3.7.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-tx --><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>4.3.7.RELEASE</version></dependency>

6.2、在main下創建resources文件夾設置成資源文件

6.3、在resource下創建一個bean-base.xml文件

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:task="http://www.springframework.org/schema/task"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-4.0.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/taskhttp://www.springframework.org/schema/task/spring-task-3.1.xsd"> </beans>

6.4、準備一個java類

@Data @AllArgsConstructor @NoArgsConstructor public class User {private int id;private String userName;private String password; }

6.5、在xml中進行對象的申明

<!--說明需要生成一個java對象 然后放到IOC的容器中id:身份唯一的標識class:標識的是要生成java的類--><bean id="user" class="com.qf.cd.helloword.User"></bean>

6.6、測試文件

//第一步:我們需要獲取這個對象的容器(IOC容器)ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:bean-base.xml");//第二步:獲取這個Java對象User user = context.getBean(User.class);//第三步:打印這個對象System.out.println(user);

7、Spring的實現方式之XML

7.1、基本的配置

<!--說明需要生成一個java對象 然后放到IOC的容器中id:身份唯一的標識class:標識的是要生成java的類name:給當前這個類的對象取名字scope="prototype":表示的是多例 :多例的時候 java對象并沒有 放到容器 是你請求的時候生成對象 返回給你的"singleton":表示的是單例init-method="init" :對象放到IOC之前 初始化數據用的destroy-method:對象銷毀之前 還原對象 用的--><bean id="user111"name="userbobo"scope="singleton"init-method="init"destroy-method="destory"class="com.qf.cd.helloword.User"></bean>

7.2、有參數對象的對象的構建

<!--帶參數的對象怎么實例化?--><!--<bean id="user2" class="com.qf.cd.helloword.User">--><!--<constructor-arg index="0" value="1"></constructor-arg>--><!--<constructor-arg index="1" value="小波波"></constructor-arg>--><!--<constructor-arg index="2" value="小王子"></constructor-arg>--><!--</bean>--><!--<bean id="user3" class="com.qf.cd.helloword.User">--><!--<constructor-arg name="id" value="2"></constructor-arg>--><!--<constructor-arg name="userName" value="小波2"></constructor-arg>--><!--<constructor-arg name="password" value="小王2"></constructor-arg>--><!--</bean>-->

7.3、工廠創建對象的方式

<!--工廠創建對象的問題--><!--申明工廠--><!-- <bean id="userFactory" class="com.qf.cd.helloword.UserFactory"></bean>--><!--獲取Java對象factory-bean:這個是factory的工廠對象 注意:值是bean的id的值factory-method:工廠中創建對象的 非靜態的這個方法--><!-- <bean id="user4" factory-bean="userFactory" factory-method="getInstance1"></bean>--><!--靜態方法構建這樣一個對象factory-method:因為調用的是靜態的方法 所以后面是靜態方法的這個名字--><bean id="user4" class="com.qf.cd.helloword.UserFactory" factory-method="getStaticInstance"></bean>

7.4、出現的問題

通過類型找對象的時候、如果當前類的實例在IOC容器中存在多個的話 那么 是會報錯 因為他不知道你找到是哪一個Java對象

<!--lazy-init:這個是延遲對象的初始化 在你 getBean的時候 進行對象的初始化--><!--<bean id="user1" class="com.qf.cd.helloword.User" lazy-init="true"> </bean>--><!--<bean id="user2" class="com.qf.cd.helloword.User"></bean>--><!--depends-on="userDAO":這個屬性可以告訴咋們的IOC容器先初始化誰比較合適--><bean id="userService" class="com.qf.cd.helloword.UserService" depends-on="userDAO,user"></bean><bean id="user" class="com.qf.cd.helloword.User"></bean><bean id="userDAO" class="com.qf.cd.helloword.UserDAO"></bean>

8、Spring中的DI(依賴注入)

依賴:誰依賴于誰?

? 在開發中:Controller-----依賴于-----Service-------依賴于DAO

? 注入了什么東西?

? 1、JAVA對象

? 2、可以是注入的咋們的值

8.1、通過構造器進行注入(就是給這個對象賦值)

8.1.1、首先在bean.xml中進行申明
<!--這個是DAO接口--><bean id="userDAO" class="com.qf.cd.di.UserDAO"></bean><!--這個是業務實現--><bean id="userService" class="com.qf.cd.di.UserService"><!--如果是一個具體的值 那么就寫 Value寫值就可以了如果要注入的是一個對象 那么直接使用ref進行引用就可以了ref后面的值 一定是這個對象在容器中的這個id值--><constructor-arg name="userDAO" ref="userDAO"></constructor-arg></bean>
8.1.2、然后給一個構造器
public class UserService {private UserDAO userDAO;public UserService(UserDAO userDAO){this.userDAO=userDAO;}/*** 登陸*/public void login(){userDAO.aa();}}

8.2、通過Set方法進行注入

8.2.1、編寫類成員屬性的Set方法
private UserDAO userDAO1111;public void setUserDAO1111(UserDAO userDAO1111) {this.userDAO1111 = userDAO1111;}
8.2.2、編寫配置文件
<!--通過Set方法進行注入--><bean id="userDAO" class="com.qf.cd.di.UserDAO"></bean><bean id="userService" class="com.qf.cd.di.UserService"><!--property:表示的屬性name:填寫的是 成員變量的名稱--><property name="userDAO1111" ref="userDAO"></property></bean>

8.3、p標簽注入

8.3.1、首先編寫Set方法(p標簽的實質還是Set注入)
private UserDAO userDAO;// p:標簽注入的時候 底層實際上還是 Set注入的方式// 所以必須要有Set方法public void setUserDAO(UserDAO userDAO) {this.userDAO = userDAO;}
8.3.2、編寫配置文件
<!--這個是UserDAO的對象--><bean id="userDAO" class="com.qf.cd.di.UserDAO"></bean><bean id="userService" class="com.qf.cd.di.UserService" p:userDAO-ref="userDAO"></bean>

8.4、內部bean注入

8.4.1、編寫set方法
private UserDAO userDAO;// p:標簽注入的時候 底層實際上還是 Set注入的方式// 所以必須要有Set方法public void setUserDAO(UserDAO userDAO) {this.userDAO = userDAO;}
8.4.2、編寫配置文件
<!--下面玩下 內部bean注入--><bean id="userService" class="com.qf.cd.di.UserService"><property name="userDAO"><bean class="com.qf.cd.di.UserDAO"></bean></property></bean>

總結一下:對象的注入方式:Set注入、另外一種是構造器注入

9、自動裝配模型

<bean id="userDAO" class="com.qf.cd.di.UserDAO"></bean><!--autowire:自動裝配byName:通過名字自動的去找 名字相同的java對象 然后賦值給 當前類的成員變量byType:這個是通過類型進行裝配--><bean id="userService" class="com.qf.cd.di.UserService"></bean>

10、注解模式實現IOC、DI功能

@Component:這個注解表示的意思是將類生成對象放到IOC容器中 @Autowired :先通過類型找對象 找不到 再通過名字來找對象 注意 @Resource(type = UserDAO.class) :這個注解是先通過名字 再通過注解來找對象 注意 @PostConstruct:對象放到IOC容器之前 進行初始化的操作 @PreDestroy:對象要銷毀之前要進行對象的回收操作 @Repository:這個表示的是對象放到IOC容器中去 //這個注解一般用在DAO層 @Service:這個注解也是將對象放到IOC容器中

注意

@Override protected void finalize() throws Throwable {super.finalize(); } 每個對象的這個方法都可以干預對象在JVM回收數據的時候 不被回收

11、代理的設計模式

代理的設計模式解決了什么問題?

代理的設計模式 解決的問題:能夠動態的監控一個類 中所有方法的執行 以及在這個方法的執行的前后動態植入咋們的代碼

代理:簡單的說就是對原來的功能的增強

比如:為業務邏輯層提供事務

? @Configuration

? Spring整合iBatis

11.1、靜態代理

靜態代理的前提是 當前的類 必須實現接口否則沒法玩

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-615h7stg-1592395564225)(pic\1592288049671.png)]

11.1.1、被代理類的接口
public interface IUserService {void zz(); }
11.1.2、被代理類
public class UserService implements IUserService{/*** 轉賬這個方法*/public void zz(){System.out.println("鎖定張三的賬戶");System.out.println("張三的賬戶預減1000元");System.out.println("檢測李四的賬戶是否可用");System.out.println("李四的賬戶增加1000元");} }
11.1.3、代理類
public class UserServiceProxy implements IUserService{private IUserService userService;public UserServiceProxy(IUserService userService ){this.userService=userService;}@Overridepublic void zz() {System.out.println("添加事務");userService.zz();System.out.println("提交事務");} }

11.2、動態代理(JDK代理)

動態:被代理的類的對象是自動生成的

? 被代理的類是自動生成的

? 被代理的類的對象也是自動生成的

? JDK代理:原因是使用的是JDK本身的API

前提:被代理的類 必須要實現接口

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-mkxIXJu0-1592395564227)(pic\1592290057779.png)]

11.2.1、被代理類實現的接口
public interface IUserService {void zz(); }
11.2.2、被代理的類
public class UserService implements IUserService {/*** 轉賬這個方法*/public void zz(){System.out.println("鎖定張三的賬戶");System.out.println("張三的賬戶預減1000元");System.out.println("檢測李四的賬戶是否可用");System.out.println("李四的賬戶增加1000元");} }
11.2.3、代理類實現
public static void main(String[] args){/*** 第一個參數:classloader:表示的是類加載器 寫法是死的 類.class.getClassLoader* 第二個參數:interfaces:當前類實現的接口 之所以要這個東西 是因為 生成代理類的時候 需要實現接口* 1:被代理的是個類:類.class.getInterface* 2:被代理的是是個接口: new Class[]{接口.class}* 第三個參數:invationHandle* 方法的監聽的回調接口----當你執行這個接口中的某一個方法的時候就會自動的回調到這個方法中來*/IUserService userService= (IUserService) Proxy.newProxyInstance(UserService.class.getClassLoader(),UserService.class.getInterfaces(),new InvocationHandler() { //執行到每一個方法都會執行到這里來/**** @param proxy :代理對象* @param method :當前執行的方法* @param args :當前執行方法的參數封裝* @return* @throws Throwable*/@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//在方法執行的前后進行拓展System.out.println("打開事務");Object invoke = method.invoke(new UserService(), args);System.out.println("關閉事務");return invoke;}});

11.3、CGLIB代理

思考一個問題:

靜態代理和動態代理都有一個前提:被代理的類必須實現接口

假設一個類 沒有實現接口需要增強 怎么辦呢?

CGLIB代理在這種場景下 就應運而生了…

CGLIB代理本身是可以代理任意的一個類 這個類可以不實現接口 也可以實現接口

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-qQ4u2oCu-1592395564229)(pic\1592291117537.png)]

11.3.1、被代理的類
public class UserService{/*** 轉賬這個方法*/public void zz(){System.out.println("鎖定張三的賬戶");System.out.println("張三的賬戶預減1000元");System.out.println("檢測李四的賬戶是否可用");System.out.println("李四的賬戶增加1000元");} }
11.3.2、代理的類
public class UserServiceProxy{/*** 獲取這個代理類* @return*/public static UserService getUserServiceProxy(){Enhancer enhancer=new Enhancer();//設置生成的類的爹是誰enhancer.setSuperclass(UserService.class);//設置方法監聽的回調enhancer.setCallback(new MyMethodInterceptor());return (UserService) enhancer.create();}/*** 方法的監聽*/static class MyMethodInterceptor implements MethodInterceptor{/**** @param obj:代理對象* @param method :當前執行的方法* @param args :當前執行方法的參數* @param proxy :這個是方法代理* @return* @throws Throwable*/@Overridepublic Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {//在這里進行增強System.out.println("開啟事務");Object invoke = method.invoke(new UserService(), args);System.out.println("提交事務");return invoke;}} }

#####11.3.3、測試實現

public class Test001 {public static void main(String[] args){UserService userServiceProxy = UserServiceProxy.getUserServiceProxy();userServiceProxy.zz();} }

12、AOP面向切面的編程

什么叫面向切面編程?

就是在編程的時候 將我們的重復的代碼抽取出來形成方法 再形成一個類、這個類就是切面類、當我們在執行原來代碼的時候 使用代理的設計模式 動態植入我們抽取出來的代碼 的這種編程方式就稱為 面向切面編程

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-yY20B6hf-1592395564231)(pic\1592293344476.png)]

12.1、手動實現下面向切面編程(使用CGLIB代理來實現)

12.1.1、編寫業務類
@Component public class UserService {/*** 這是一個add的方法*/public void add(){System.out.println("添加數據完成....");}}
12.1.2、編寫aop類
@Component public class Aop {public void begin(){System.out.println("開啟事務");}public void commit(){System.out.println("提交事務");}}
12.1.3、編寫代理類
@Component public class UserServiceProxy implements MethodInterceptor {@AutowiredAop aop;/*** 獲取代理類* @return*/public UserService getUserServiceProxy(){Enhancer enhancer=new Enhancer();enhancer.setSuperclass(UserService.class);enhancer.setCallback(this);return (UserService) enhancer.create();}/*** 這里就是方法的攔截* @param obj* @param method* @param args* @param proxy* @return* @throws Throwable*/@Overridepublic Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {aop.begin();Object invoke = method.invoke(new UserService(), args);aop.commit();return invoke;} }
12.1.4、編寫配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:task="http://www.springframework.org/schema/task"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-4.0.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/taskhttp://www.springframework.org/schema/task/spring-task-3.1.xsd"><context:component-scan base-package="com.qf.cd.aop.sd"></context:component-scan></beans>
12.1.5、編寫測試類
public class Test001 {public static void main(String[] args){ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:bean-aop1.xml");UserService userServiceProxy = context.getBean(UserServiceProxy.class).getUserServiceProxy();userServiceProxy.add();} }

12.2、使用XML配置模式實現AOP編程

12.2.1、編寫業務類
public class UserService {public void zz(){System.out.println("轉賬功能實現.....");//int k=1/0;}public void pp(){System.out.println("這里實現了ppp的功能.....");}public void kb(){System.out.println("這里實現了口碑這個功能.....");} }
12.2.2、編寫AOP的類
public class Aop {public void begin(){System.out.println("打開事務....");}public void commit(){System.out.println("提交事務.....");}/*** 方法調用完成 執行返回的時候 就會自動執行這個方法*/public void returning(){System.out.println("這里是returning方法.....");}/*** 調用切入點表達式 的時候 如果 方法拋出了異常 那么 就執行這個方法*/public void afterThroeing(){System.out.println("拋出異常了....");}/*** 環繞*/public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {//這里有點類似那個 過濾器中的放行System.out.println("這里是環繞前");proceedingJoinPoint.proceed();System.out.println("這里是環繞后");}}
12.2.3、編寫配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:task="http://www.springframework.org/schema/task"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-4.0.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/taskhttp://www.springframework.org/schema/task/spring-task-3.1.xsd"><!--第一步:申明UserService對象--><bean id="userService" class="com.qf.cd.aop.xml.UserService"></bean><bean id="aop" class="com.qf.cd.aop.xml.Aop"></bean><!--進行aop的相關配置--><aop:config><!--配置切入點切入點:代碼植入的地方 在哪里植入就配置哪里的路徑id:隨便配expression:表達式的意思execution:當成語法記住第一個* :返回值不知道是啥類型 所以寫*com.qf.cd.aop.xml.* 這個*代表的是這個包下面的所有的類com.qf.cd.aop.xml.*.*第二個*代表的是這個類下面的所有方法(..):不知道方法的參數類型 所以寫..--><aop:pointcut id="pt" expression="execution(* com.qf.cd.aop.xml.*.*(..))"></aop:pointcut><!--這個里面就根據類型配置相應的方法了--><!--下面配置的是切面類--><aop:aspect ref="aop"><!--在執行上面切入點表達式的時候 之前要執行的方法 (前置)--><aop:before method="begin" pointcut-ref="pt"></aop:before><!--表示的是一個后置表達式 表示的意思是 在執行了 切入點表達式 方法之后 要執行的方法--><aop:after method="commit" pointcut-ref="pt"></aop:after><!--方法調用完成 執行返回的時候 就會自動執行這個方法--><aop:after-returning method="returning" pointcut-ref="pt"></aop:after-returning><!--我們調用方法的時候 如果拋出了異常那么就會執行這個--><aop:after-throwing method="afterThroeing" pointcut-ref="pt"></aop:after-throwing><!--環繞--><aop:around method="around" pointcut-ref="pt"></aop:around></aop:aspect></aop:config> </beans>
12.2.4、編寫測試文件
public static void main(String[] args){ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:bean-aop2.xml");UserService userService = context.getBean(UserService.class);userService.zz();}

12.3、使用注解模式完成AOP編程

12.3.1、注解的含義
@Aspect :表示的是當前這個類 是一個切面類 @Before:前置處理器 @After:后置處理器 @AfterReturning:這個表示的是在返回值的時候 進行調用 @AfterThrowing:這個表示的是在拋出異常的時候調用 @Around:環繞通知 @Pointcut:這個表示的是一個切入點表達式
12.3.2、編寫配置文件
<!--如果要使用到aop 那么必須配置 aop的自動使能--><aop:aspectj-autoproxy></aop:aspectj-autoproxy><context:component-scan base-package="com.qf.cd.aop.annotation"></context:component-scan>
12.3.3、編寫業務類
@Service public class UserService {public void zz(){System.out.println("轉賬功能實現.....");//int k=1/0;}public void pp(){System.out.println("這里實現了ppp的功能.....");}public void kb(){System.out.println("這里實現了口碑這個功能.....");} }
12.3.4、編寫Aop的類
@Component //放到IOC容器 @Aspect //表明是一個切面類 public class Aop {/*** 定義一個切入點表達式*/@Pointcut(value = "execution(* com.qf.cd.aop.annotation.UserService.*(..))")public void pt(){}@Before(value = "pt()")public void begin(){System.out.println("打開事務....");}@After(value = "pt()")public void commit(){System.out.println("提交事務.....");}/*** 方法調用完成 執行返回的時候 就會自動執行這個方法*/@AfterReturning(value = "pt()")public void returning(){System.out.println("這里是returning方法.....");}/*** 調用切入點表達式 的時候 如果 方法拋出了異常 那么 就執行這個方法*/@AfterThrowing(value = "pt()")public void afterThroeing(){System.out.println("拋出異常了....");}/*** 環繞*/@Around(value = "pt()")public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {//這里有點類似那個 過濾器中的放行System.out.println("這里是環繞前");proceedingJoinPoint.proceed();System.out.println("這里是環繞后");} }
12.3.5、測試
public static void main(String[] args){ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:bean-aop3.xml");UserService userService = context.getBean(UserService.class);userService.kb();}

13、Spring的DAO模塊

DAO模塊:類似于dbutils 這個工具類、主要用來訪問數據庫的

13.1、導入連接池的包

<!-- https://mvnrepository.com/artifact/com.alibaba/druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.22</version></dependency><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.0.7</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.3.7.RELEASE</version></dependency>

13.2、配置JdbcTemplate

<!--配置數據源--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="url" value="jdbc:mysql:///cd200101"></property><property name="driverClassName" value="com.mysql.jdbc.Driver"></property><property name="username" value="root"></property><property name="password" value="root"></property></bean><!--配置jdbcTemplate--><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean><context:component-scan base-package="com.qf.cd.dao"></context:component-scan>

13.3、編寫DAO

@Component public class UserDAO {@Autowiredprivate JdbcTemplate jdbcTemplate;public void update(){jdbcTemplate.update("insert into t_user(userName,password) values(?,?)","小波波","123");} }

13.4、測試

public static void main(String[] args){ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:bean-dao.xml");UserDAO userDAO = context.getBean(UserDAO.class);userDAO.update();}

14、Spring中的事務問題

說明個問題

事務無非就是具有原子性、一些列的操作 同時成功 或者同時失敗

假設你來設計個事務:怎么保證這一些列的操作同時成功 或者同時失敗呢?

開啟事務的時候 ----- 開始做記錄

? 把每一個操作都做一個記錄

當前的業務 如果做完了----如果沒有產生異常------直接結束就可以了

? 如果產生了異常---------把所有的記錄做一個還原

事務有哪些分類:

事務如果按照粗細程度來劃分:

? 粗粒度事務:給整個方法添加事務

? 細粒度事務:給這個方法中 某幾行代碼添加事務

事務如果按照范圍來劃分:

? 全局事務:跨數據庫的這樣一個事務

? 局部事務:所有的事務是在 一個庫里面

14.1、Spring中通過xml來配置事務

14.1.1、編寫數據訪問的類
@Component public class UserDAO implements IUserDAO{@Autowiredprivate JdbcTemplate jdbcTemplate;/*** 更新數據庫的操作*/public void update(){jdbcTemplate.update("update t_user set userName=?,password=?","鐵蛋","119");} }
14.1.2、編寫業務邏輯類
@Service public class UserService {@Autowiredprivate IUserDAO userDAO;public void update(){userDAO.update();int k=1/0;} }
14.1.3、編寫配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:task="http://www.springframework.org/schema/task"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-4.0.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/taskhttp://www.springframework.org/schema/task/spring-task-3.1.xsd"><!--配置數據源--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="url" value="jdbc:mysql:///cd200101"></property><property name="driverClassName" value="com.mysql.jdbc.Driver"></property><property name="username" value="root"></property><property name="password" value="root"></property></bean><!--配置JdbcTemplate--><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean><!--給JdbcTemplate配置事務--><bean id="tx-manager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><!--配置事務增強--><tx:advice id="tx-advice" transaction-manager="tx-manager"><tx:attributes><!--tx:method:表示要給哪些方法添加事務name:添加事務的方法的名字 * :表示的是給所有的方法都要添加事務timeout:設置請求的超時時間 默認-1 永遠等待read-only:事務的類型 false:表示的是不是只讀事務(就是讀寫事務)查詢數據的時候 不用添加事務也是對的 那么這個時候實際上用的是默認的事務類型只讀事務在進行增刪改的時候 只讀事務 就不能滿足我們的要求了 這個時候就需要讀寫事務了propagation:事務的傳輸類型REQUIRED:REQUIRED_NEW場景:業務邏輯層有事務 調用的DAO也添加了事務 如果你設置了傳輸類型是REQUIRED那么恭喜你 會以業務邏輯層的事務優先如果你設置的傳輸類型是REQUIRED_NEW 那么DAO層事務 和 業務邏輯層的事務是分割開的相互不會被影響isolation:設置的是事務的隔離級別 這個一般不設置no-rollback-for:表示的是出現某一類的異常不回滾rollback-for:出現某一類異常的時候 回滾--><tx:method name="*" read-only="false" /></tx:attributes></tx:advice><!--配置aop--><aop:config><!--配置一個切入點表達式--><aop:pointcut id="pt" expression="execution(* com.qf.cd.tx.UserService.*(..))"></aop:pointcut><!--配置事務增強--><aop:advisor advice-ref="tx-advice" pointcut-ref="pt"></aop:advisor></aop:config><!--配置aop的自動代理--><aop:aspectj-autoproxy></aop:aspectj-autoproxy><!--配置包的掃描--><context:component-scan base-package="com.qf.cd.tx"></context:component-scan> </beans>
14.1.4、編寫測試類
public static void main(String[] args){ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:bean-tx1.xml");UserService userService = context.getBean(UserService.class);userService.update();}

14.2、Spring中通過注解的模式來實現事務配置

14.2.1、編寫DAO類

同上

#####14.2.2、編寫Service類

@Service public class UserService {@Autowiredprivate IUserDAO userDAO;@Transactional //這個注解使用在類上面 那么就對所有的方法添加了事務public void update(){userDAO.update();int k=1/0;}
14.2.3、編寫配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:task="http://www.springframework.org/schema/task"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-4.0.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/taskhttp://www.springframework.org/schema/task/spring-task-3.1.xsd"><!--配置數據源--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="url" value="jdbc:mysql:///cd200101"></property><property name="driverClassName" value="com.mysql.jdbc.Driver"></property><property name="username" value="root"></property><property name="password" value="root"></property></bean><!--配置JdbcTemplate--><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean><!--給JdbcTemplate配置事務--><bean id="tx-manager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><!--使能事務的注解--><tx:annotation-driven transaction-manager="tx-manager"></tx:annotation-driven><!--配置aop的自動代理--><aop:aspectj-autoproxy></aop:aspectj-autoproxy><!--配置包的掃描--><context:component-scan base-package="com.qf.cd.tx2"></context:component-scan> </beans>
14.2.4、使用那注解
@Transactional

15、事務中屬性的測試

16、Spring中Java編寫配置文件的問題

16.1、發展史

Spring在1.x時代--------最先推出的是xml編寫配置文件

Spring在2.x時代-------推出了使用注解模式代替XML配置

Spring在3.x的時代-----推出了使用Java來編寫配置文件

16.2、設計到的注解

@Configuration //這個注解就表示的是當前的java文件是一個配置文件 //@ComponentScan(basePackages = {"com.qf.cd.javaconfig"}) //配置的是包的掃描 @PropertySource(value = "classpath:db.properties",ignoreResourceNotFound = false) //ignoreResourceNotFound這個表示的是沒找到這個文件是否要忽略 @ImportResource(value = {"classpath:bean-javaconfig.xml"}) //這個表示的是讀取外部的xml配置文件 @Value("${jdbcUrl}") //這個就表示的是將 properties中的鍵值對的值 映射到下面的成員變量中 private String jdbcUrl; @Bean //就表示的是要把下面方法返回的對象放到IOC容器中

16.3、測試的配置案例

@Configuration //這個注解就表示的是當前的java文件是一個配置文件 //@ComponentScan(basePackages = {"com.qf.cd.javaconfig"}) //配置的是包的掃描 @PropertySource(value = "classpath:db.properties",ignoreResourceNotFound = false) //ignoreResourceNotFound這個表示的是沒找到這個文件是否要忽略 @ImportResource(value = {"classpath:bean-javaconfig.xml"}) //這個表示的是讀取外部的xml配置文件 public class AppConfig {@Value("${jdbcUrl}") //這個就表示的是將 properties中的鍵值對的值 映射到下面的成員變量中private String jdbcUrl;@Value("${driverClass}")private String driverClass;@Value("${user}")private String user;@Value("${password}")private String password;/*** 注意:* @return*/ // @Bean //就表示的是要把下面方法返回的對象放到IOC容器中 // public UserDAO userDAO(){ // return new UserDAO(); // }// @Bean // public UserService userService(){ // return new UserService(); // }// @Bean // public DruidDataSource dataSource(){ // DruidDataSource druidDataSource = new DruidDataSource(); // //1001個步驟 // druidDataSource.setUrl(jdbcUrl); // druidDataSource.setDriverClassName(driverClass); // druidDataSource.setUsername(user); // druidDataSource.setPassword(password); // return druidDataSource; // } }

總結

以上是生活随笔為你收集整理的Spring的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

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

国产精品日韩在线观看 | av在线h| 新版资源中文在线观看 | 免费久久精品视频 | 国产99色| 中文字幕在线看 | 国产资源中文字幕 | 国产高清在线免费 | 国产精品久久久久久久久婷婷 | 正在播放亚洲精品 | 国产精品24小时在线观看 | 夜夜骑天天操 | 黄污网站在线观看 | 久久国产精品免费观看 | 三级av网站| 中文字幕在线播出 | 国产精品6999成人免费视频 | 精品视频久久久 | 国产福利在线免费观看 | 久久国产区 | 久久精品网站视频 | 国产精品wwwwww | 一色av | 国产福利资源 | 成人国产一区二区 | 日本久久久久久科技有限公司 | 国产成人免费高清 | 久久久久久美女 | 在线观看中文字幕第一页 | 美女黄濒 | 在线视频日韩一区 | 亚洲va综合va国产va中文 | 欧美人人爱 | 9在线观看免费高清完整 | 久久福利国产 | 欧美a级成人淫片免费看 | 高清色免费 | 婷婷色资源 | 午夜精选视频 | 91在线porny国产在线看 | 亚洲一区二区视频在线 | 国产精品2018 | 中文字幕在线视频网站 | 成人免费观看视频大全 | 久久夜夜夜 | 亚洲精品一区二区18漫画 | 久久狠狠婷婷 | 国产资源 | 色综合人人 | 狠狠搞,com| 国产不卡一 | 亚洲国产中文字幕在线视频综合 | 国产精品视频地址 | av中文资源在线 | 国产美女被啪进深处喷白浆视频 | 99精品乱码国产在线观看 | 中文字幕在线播放一区二区 | 日本中文字幕高清 | 四虎免费在线观看视频 | 久久久久国产精品视频 | 亚洲精品xx | 不卡的av电影 | 爱情影院aqdy鲁丝片二区 | 青青河边草观看完整版高清 | 麻豆精品在线视频 | av千婊在线免费观看 | 欧亚日韩精品一区二区在线 | 成人小视频在线观看免费 | 在线免费观看黄色 | 成年人免费观看国产 | www激情久久| 久久黄色影院 | 成人在线视频观看 | 国产精品国内免费一区二区三区 | 精品欧美乱码久久久久久 | 国产香蕉97碰碰久久人人 | 久久婷亚洲五月一区天天躁 | 亚州免费视频 | 在线91播放 | 久久久蜜桃一区二区 | 亚洲精品永久免费视频 | 久久视频在线免费观看 | 亚洲成av人片在线观看无 | 久久久精品二区 | 日韩成人免费在线 | 国产成人精品久久久久蜜臀 | 亚洲第一久久久 | 久久精品国产精品亚洲 | 国产精品毛片完整版 | 88av色| 久久99久| 娇妻呻吟一区二区三区 | 亚洲视屏在线播放 | 国产视频欧美视频 | 成年人免费看片网站 | 免费高清男女打扑克视频 | 999视频网站 | 在线免费观看羞羞视频 | 亚洲精品综合一区二区 | 一区二区三区四区久久 | 91av在线免费播放 | 久草在线视频首页 | 日韩精品无 | 亚洲成色777777在线观看影院 | av在线一级| 日韩三级一区 | 日韩免费电影一区二区 | 国产成人精品999 | 丁香综合激情 | 免费观看午夜视频 | 天天综合网入口 | 射综合网 | 国产精品美女久久久久久久久久久 | 日韩欧美成 | 成年人在线| 激情欧美丁香 | 久草在线视频在线 | 欧美精品视 | 色99网| 国产伦理一区二区三区 | 激情视频在线观看网址 | 在线国产中文字幕 | 91最新网址| 精品视频不卡 | 日本韩国欧美在线观看 | 精品国偷自产国产一区 | 夜夜视频| 久久久一本精品99久久精品66 | 日韩激情视频在线观看 | 九九热在线视频 | 国产 成人 久久 | 欧美日韩一区二区三区免费视频 | 久久伊人婷婷 | 久久兔费看a级 | 免费在线观看成年人视频 | 久久国产精品区 | 91亚洲狠狠婷婷综合久久久 | 国产在线一区二区三区播放 | 久久理论电影 | 国产伦理久久 | 精品一区二区三区香蕉蜜桃 | 在线a亚洲视频播放在线观看 | www.香蕉视频 | 四虎在线视频 | 永久免费av在线播放 | 黄网站色成年免费观看 | 天天综合天天综合 | 久久久久久久毛片 | 成人免费在线网 | 精品国内自产拍在线观看视频 | 日韩成片 | 91.精品高清在线观看 | 狠狠的干| 国产91精品看黄网站在线观看动漫 | 99re国产视频 | 婷婷性综合 | 欧美精品久久久久久久久久久 | 久久天天躁狠狠躁亚洲综合公司 | 日韩免费看 | 99视屏 | 最近日本韩国中文字幕 | 亚州精品天堂中文字幕 | 日韩精品一区二区三区丰满 | 久久久一本精品99久久精品66 | 国产一二区免费视频 | 国产黄在线播放 | 日韩专区在线 | 久久久久久久99 | 欧美黑人性猛交 | 奇米影视8888在线观看大全免费 | 日日日日| 探花视频网站 | 亚洲欧美日韩在线看 | 亚洲天堂网视频 | 国产专区日韩专区 | 国内免费的中文字幕 | 国产视频不卡一区 | 中文字幕在线看视频 | 久久在线精品 | 91丨精品丨蝌蚪丨白丝jk | 日韩欧美一区二区三区视频 | 91精品专区 | 一级片免费观看视频 | www.色在线| 日韩av午夜在线观看 | 欧美日韩一区二区在线 | 精品一区在线 | 在线小视频你懂的 | 69xx视频 | 一级片黄色片网站 | 免费观看完整版无人区 | 日韩欧美综合视频 | 国产h在线观看 | 欧美日韩精品综合 | 欧美精品亚洲精品 | 日韩二区在线播放 | 国产一区二区在线观看视频 | 欧美成人xxx | 国产精品美女久久久久久久久久久 | 国产精品99免费看 | 欧美一二区在线 | 国产精品ⅴa有声小说 | 午夜影视剧场 | 久爱精品在线 | 国产免费激情久久 | 激情综合站 | 啪嗒啪嗒免费观看完整版 | 国产无遮挡又黄又爽馒头漫画 | 一区在线播放 | 久黄色| 99超碰在线观看 | 久久精品999| 狠狠久久伊人 | 欧美专区亚洲专区 | 国产午夜精品一区二区三区欧美 | 婷婷黄色片 | 国产精品二区三区 | 成人久久久久久久久久 | 97福利在线观看 | 黄色一级大片免费看 | 国产美女精品视频 | 日本3级在线观看 | 在线中文字幕播放 | 国内精品视频一区二区三区八戒 | 国产精品久久婷婷六月丁香 | 亚洲欧美乱综合图片区小说区 | 免费情趣视频 | 国产亚洲精品美女久久 | 五月天婷婷狠狠 | 久草在线久草在线2 | 精品国产黄色片 | 狠狠色婷婷丁香六月 | 欧美韩国在线 | 四虎影视成人永久免费观看亚洲欧美 | av不卡中文字幕 | 九九热免费在线观看 | 午夜三级理论 | 国产精品福利无圣光在线一区 | 精品国产aⅴ麻豆 | 欧美xxxxx在线视频 | 亚洲一区久久久 | 中文字幕亚洲综合久久五月天色无吗'' | 在线免费观看国产 | 黄色a三级 | 久久久久欠精品国产毛片国产毛生 | 精品视频国产一区 | 又黄又爽又刺激视频 | 久久精品中文字幕免费mv | 69av视频在线 | 一级黄色片在线免费看 | 黄色在线观看免费网站 | 美女视频黄的免费的 | 96看片| 欧美日韩中字 | 天天综合天天做天天综合 | 天天综合天天综合 | 九九热在线观看视频 | 91精品久久香蕉国产线看观看 | 人人干人人爽 | 91视频黄色 | 成人免费一级 | 亚洲精品18日本一区app | 黄色中文字幕 | 欧洲av不卡| 97香蕉视频 | 91精品在线免费观看视频 | 成人羞羞视频在线观看免费 | 日韩免费播放 | 色偷偷男人的天堂av | 午夜视频福利 | 中文字幕一区二区三区在线播放 | 国产成人一区二区在线观看 | 亚洲五月婷婷 | 欧美日韩在线视频一区二区 | 久久久久一区二区三区四区 | 中文字幕丰满人伦在线 | 99综合影院在线 | 亚洲精品日韩在线观看 | 成人午夜在线观看 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 亚洲欧美精品一区 | 又黄又爽的免费高潮视频 | zzijzzij亚洲成熟少妇 | 久草97| 久久视频这里有精品 | 最新av免费在线观看 | 久热国产视频 | 狠狠色狠狠色综合日日92 | 亚洲伊人成综合网 | 免费久草视频 | 久久免费资源 | 日韩高清免费在线 | 国产一级视屏 | 蜜桃视频日本 | 久草在线最新 | 高清视频一区 | 日本精品久久久久中文字幕 | 成人午夜精品福利免费 | 天天综合亚洲 | 国产999视频 | 中文字幕在线观看免费高清电影 | 狠狠五月婷婷 | 国产精品中文字幕在线播放 | 久久香蕉国产 | 免费欧美精品 | 99性视频| www国产在线 | 午夜私人影院久久久久 | 日女人免费视频 | 国产伦精品一区二区三区四区视频 | 伊人天天狠天天添日日拍 | 国产在线观 | 又紧又大又爽精品一区二区 | a级国产乱理伦片在线观看 亚洲3级 | 天堂在线一区二区三区 | 亚洲天堂在线观看完整版 | 中文国产在线观看 | 久久视频免费 | 在线免费观看黄色 | 久久爱资源网 | 日日噜噜噜噜夜夜爽亚洲精品 | 日韩在线视频观看 | 国产视频在线免费 | 国产理论一区二区三区 | 99综合视频 | 亚洲欧洲久久久 | 日韩在线高清免费视频 | 日韩在线视频国产 | 黄色看片 | 99免在线观看免费视频高清 | 国产精品永久免费观看 | 国内揄拍国产精品 | 亚洲热视频 | 欧美性生活大片 | 青青河边草观看完整版高清 | 首页国产精品 | 中文字幕在线视频一区 | 天天干天天拍天天操 | 丁香午夜 | 久久电影国产免费久久电影 | 日韩高清在线观看 | 精品av网站 | 美女免费网站 | 九九热视频在线免费观看 | 黄色国产高清 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 在线观影网站 | 五月激情av| 日韩理论片在线 | 免费av看片 | 少妇bbbb搡bbbb桶 | 亚洲国产免费看 | 五月天中文字幕mv在线 | 91亚洲国产成人久久精品网站 | 婷婷中文字幕在线观看 | 成人黄在线观看 | 久久免费看a级毛毛片 | 日韩一区二区三免费高清在线观看 | 久久免费大片 | 天天在线操 | 最近中文字幕免费视频 | 96亚洲精品久久 | 超碰在线色 | 日韩乱码在线 | 在线免费中文字幕 | 久久久久久久久久久免费 | 亚洲女在线 | 99精品视频在线看 | 欧美日韩一级久久久久久免费看 | 免费精品视频在线 | 日韩视频一 | 亚洲精品国产免费 | 免费看日韩 | 视频国产一区二区三区 | 97精品国产一二三产区 | 亚洲www天堂com | 久久日韩精品 | 欧美日韩精品在线免费观看 | 亚洲三级影院 | 日韩国产精品久久 | 亚洲精品自拍视频在线观看 | 日韩欧美有码在线 | 亚洲国产精品影院 | 成人一级片在线观看 | 91黄色免费看 | 久久久久久久毛片 | 黄色小说视频在线 | 在线日韩亚洲 | www91在线观看| 91人人澡 | 久久久久免费精品视频 | 麻豆av电影 | 国产免费xvideos视频入口 | 毛片基地黄久久久久久天堂 | 精品视频免费看 | 成人av网页 | 九九热久久免费视频 | 亚洲永久精品在线观看 | 国产一级片不卡 | 欧美日韩一区久久 | 菠萝菠萝在线精品视频 | 欧洲亚洲精品 | 欧美小视频在线观看 | 久久综合五月天婷婷伊人 | 国产精品专区一 | 婷婷综合视频 | 欧美在线视频日韩 | 在线中文字幕电影 | 国产小视频在线免费观看视频 | 黄色www | 成人av观看 | 亚州精品在线视频 | 超碰激情在线 | 91在线看黄 | 黄污污网站 | 免费观看的黄色片 | 黄色动态图xx| 91精品国产成人观看 | 成人黄色av网站 | av一级片在线观看 | 久久国产精品久久精品 | 国产精品久久久久久久久久久免费看 | 五月婷婷中文字幕 | 九九视频精品免费 | 中文字幕在线免费观看视频 | 91禁在线观看 | 久久久久久久久久久久国产精品 | 国产在线色视频 | 国产在线观看一区 | 伊人亚洲精品 | 97精品国产97久久久久久久久久久久 | 五月天亚洲激情 | 中文字幕在线观看一区二区 | 久草综合在线 | www.99av | 麻豆传媒精品 | 久久这里精品视频 | 成年人天堂com | 91插插插免费视频 | 免费观看一级特黄欧美大片 | 亚洲专区在线 | 精品久久一区二区三区 | 91免费在线 | 在线视频区 | 色婷婷在线播放 | 精品影院 | 中文字幕在线看视频 | 91粉色视频| 国产精品麻豆果冻传媒在线播放 | 免费在线观看不卡av | av中文天堂在线 | 日日干美女 | 国产精品麻豆果冻传媒在线播放 | 四虎国产精品成人免费影视 | 中文字幕 第二区 | 在线探花 | 婷婷丁香激情综合 | 精品国产_亚洲人成在线 | 人人爽人人爽人人片av免 | 96av视频| 欧洲一区二区三区精品 | 天天射天天射天天射 | 日韩三级一区 | 成人免费xxx在线观看 | 日日成人网 | 国内精品久久久久久久久久久 | 在线免费观看一区二区三区 | 免费av网站观看 | 成人小电影在线看 | 国产在线精品观看 | 国内精品久久久久久中文字幕 | 日韩中文字幕免费视频 | 六月久久婷婷 | 91精品国产自产在线观看永久 | 欧美激情视频久久 | 国产精品一区二区av麻豆 | 亚洲成人av在线电影 | 国产精品免费在线 | 亚洲欧美日韩国产 | 日韩视频专区 | 99 精品 在线 | 国产精品一区二区av日韩在线 | 国产午夜精品一区 | 成人动漫一区二区 | 深夜成人av | 久久影视中文字幕 | www.天天射| 91亚色免费视频 | 亚洲国产wwwccc36天堂 | 精品超碰| 国产精品一区二区av | 免费一级片视频 | 国产又粗又猛又黄又爽的视频 | 欧美一级视频一区 | 国产视频高清 | 欧美五月婷婷 | 精品1区二区 | 91精选| 亚洲精品久久久久中文字幕二区 | 久久国产精品一区二区三区四区 | 在线精品在线 | 久久久久久麻豆 | 日韩在线精品 | 超碰99人人 | 99免费看片 | 黄色网在线免费观看 | 欧美乱淫视频 | 国产一线在线 | 在线免费黄 | 国产精品白丝jk白祙 | 亚洲国产精品小视频 | 992tv人人草| 国产伦理久久精品久久久久_ | 天天操夜夜想 | 麻豆91小视频 | 91chinese在线| 色噜噜日韩精品欧美一区二区 | 天天草综合 | 日韩在线短视频 | 亚洲黄色免费观看 | 91探花国产综合在线精品 | 亚洲黄色一级电影 | 日韩成人精品一区二区 | 欧美日韩亚洲在线观看 | 国产精品久久久久久久毛片 | 免费在线国产 | 日本在线观看中文字幕无线观看 | 精品久久久亚洲 | av不卡中文| 久久91网 | 国产成人91 | 99久高清在线观看视频99精品热在线观看视频 | 日韩免费视频一区二区 | 97人人爽人人 | 波多野结衣动态图 | 在线 精品 国产 | 丝袜一区在线 | 久草久草在线 | 狠狠色丁香久久婷婷综合_中 | 岛国精品一区二区 | 久久国产精品免费视频 | 天堂麻豆| 久久毛片高清国产 | 午夜黄网 | 毛片激情永久免费 | 亚洲激情av | 亚洲欧洲国产日韩精品 | 人人讲 | 精精国产xxxx视频在线播放 | 午夜少妇av | 亚洲精品视频免费 | 91精品国产一区二区三区 | 99久视频 | 国产夫妻性生活自拍 | 免费91在线观看 | 在线涩涩| 手机色在线 | 欧美日韩在线播放一区 | 欧美日韩一区二区视频在线观看 | 亚洲国产成人久久 | 精品视频久久久久久 | 色偷偷888欧美精品久久久 | 91视频com| 视频99爱 | 99精品国产99久久久久久97 | 亚洲视屏在线播放 | 欧美一级小视频 | 国产一区视频在线 | 99在线精品视频在线观看 | 91精品亚洲影视在线观看 | 日韩专区 在线 | av在线8| 天天伊人狠狠 | 日韩v欧美v日本v亚洲v国产v | 在线观看的av网站 | 超碰在线人人97 | 九九热精| 欧美贵妇性狂欢 | 精品在线观看一区二区三区 | 91在线91 | 久久精品一二三区白丝高潮 | 天天综合在线观看 | 2023亚洲精品国偷拍自产在线 | 波多野结衣一区 | 亚洲永久精品国产 | 2019精品手机国产品在线 | 国产精品v欧美精品v日韩 | 日韩视频一二三区 | 午夜影院三级 | 欧美成人区 | 婷婷久久一区二区三区 | 日韩网站免费观看 | 国产三级精品在线 | av电影免费在线播放 | 中文在线免费视频 | 五月天婷亚洲天综合网鲁鲁鲁 | 麻豆久久久久 | 成人一级黄色片 | 少妇bbb好爽 | 夜夜操天天摸 | 99久久精品久久亚洲精品 | 久久久久看片 | 国产黄色精品 | 亚洲成年人免费网站 | 亚洲va男人天堂 | 日韩欧美一区二区三区免费观看 | 国产成人精品午夜在线播放 | 亚洲精品国产视频 | 久久情侣偷拍 | 国产小视频在线观看免费 | 日本中文字幕影院 | 免费在线观看黄色网 | 超碰在线94| 国产精品你懂的在线观看 | 午夜久久成人 | 亚洲成色777777在线观看影院 | 国产精品乱码久久久久 | 夜夜躁日日躁狠狠躁 | 久久九九精品 | 91亚色免费视频 | 久久久久久美女 | av亚洲产国偷v产偷v自拍小说 | 欧美大jb | 国产一级片观看 | 欧美国产日韩在线观看 | 色综合久久66| 韩日色视频 | 91av亚洲| 国产专区视频 | 久久久福利视频 | 日本三级人妇 | 久久精品视频3 | 中文字幕一区av | 日韩精品一区二区三区高清免费 | www.狠狠插.com | 亚洲一区黄色 | 欧美日韩一区二区三区在线观看视频 | 91福利在线观看 | 粉嫩av一区二区三区免费 | 视频 国产区 | 欧美午夜理伦三级在线观看 | 亚洲第一区在线观看 | 精品久久久久一区二区国产 | 日韩久久精品一区二区 | 亚洲激情av | 日本爽妇网 | 日韩在线免费看 | 五月激情五月激情 | 337p欧美| 蜜桃视频在线视频 | 五月天婷婷狠狠 | 2023国产精品自产拍在线观看 | 日韩在线视频二区 | 国模精品在线 | 国产精品观看在线亚洲人成网 | 欧美一区二区视频97 | 五月婷婷综合久久 | 18久久久久| av福利在线看 | 青青河边草免费观看 | 欧美精品久久久久久久久老牛影院 | 国产伦精品一区二区三区免费 | 色狠狠婷婷 | 免费在线观看成人小视频 | 国产精品一区二区av日韩在线 | 国产精品美女久久久网av | 国内外激情视频 | www.国产高清 | 久久免费视频精品 | 亚洲精品国产精品国自产 | 国产精品亚洲片在线播放 | 精品久久网 | 91传媒在线 | 欧美精品久久久久久久久老牛影院 | 91成人免费看片 | 中文av网站| 久草在线官网 | 国产精品久久一 | 在线免费黄色毛片 | 欧美少妇xxxxxx | 成在人线av | 日日夜夜天天射 | 亚洲综合色婷婷 | 午夜.dj高清免费观看视频 | 日韩精品在线观看av | 久久永久免费视频 | av免费在线播放 | 成人小视频在线观看免费 | 99夜色 | 成人h电影在线观看 | 色中文字幕在线观看 | 91亚洲视频在线观看 | 97视频一区 | 日韩理论在线播放 | 欧美一二三视频 | 99久久婷婷国产一区二区三区 | 九九视频网 | 五月婷婷黄色 | www日韩欧美| 狠狠搞,com | 97人人模人人爽人人少妇 | 久久综合婷婷国产二区高清 | 最新av观看| 国产日韩中文字幕在线 | 国产理论在线 | 97香蕉超级碰碰久久免费软件 | 丁香综合五月 | 一区二区三区播放 | 亚洲精选视频在线 | 激情文学丁香 | 国产日韩中文字幕 | 国产精品国产三级在线专区 | 国产精品久久久久aaaa九色 | 色综合www | 久久久影院一区二区三区 | 18久久久久| 国产综合91 | 国产中文字幕在线看 | 国产人在线成免费视频 | 91视频免费播放 | 日本公妇在线观看 | 97理论片| 国产精品毛片久久久久久久久久99999999 | 最近高清中文字幕 | 欧美日韩国产精品一区二区亚洲 | 久久精品综合网 | 久99热| 国产永久网站 | 中文字幕高清免费日韩视频在线 | 亚洲在线精品视频 | 日韩在线观看视频在线 | 国内精品久久久久久久影视麻豆 | 久草在线网址 | 欧美日韩一级久久久久久免费看 | 六月丁香在线视频 | 精品国产一区二区三区久久久 | 久久久91精品国产一区二区三区 | 91视频免费网站 | 免费91麻豆精品国产自产在线观看 | 一级片视频免费观看 | av播放在线| 在线观看www91| 免费99精品国产自在在线 | 天天操网站 | 精品久久久久国产 | 国产小视频在线看 | 综合色综合 | 天天干天天干天天干天天干天天干天天干 | 国产精品乱码久久 | 18女毛片 | 人人爽久久久噜噜噜电影 | 狂野欧美激情性xxxx欧美 | av网站在线免费观看 | 91av在线视频播放 | 亚洲综合网站在线观看 | 亚洲电影图片小说 | 日本激情视频中文字幕 | 久久久精品一区二区三区 | 亚洲精品欧洲精品 | 中文十次啦 | 精品成人国产 | 久草在线网址 | 91视频-88av| 国产视频不卡一区 | av在线电影播放 | 中文字幕在线免费看 | 精品国产一区二区三区av性色 | 日日干夜夜干 | 欧美影院久久 | 欧美少妇18p | 国产精品视频在线看 | 最近中文字幕高清字幕在线视频 | 亚洲,播放 | 9在线观看免费高清完整版 玖玖爱免费视频 | 日韩在线免费高清视频 | 免费看高清毛片 | 99热都是精品 | 久久国产视频网站 | 成人黄色大片在线免费观看 | 久久国产一区二区三区 | 亚洲黄色免费在线 | 国产黄色片久久久 | 热久久国产| 9797在线看片亚洲精品 | 一区二区在线不卡 | 激情综合色综合久久 | 色综合欧洲| 九九视频免费观看视频精品 | 欧美精品久久久久性色 | 美女国产网站 | 亚洲最大在线视频 | 天天爽夜夜操 | 国产一区精品在线观看 | 中文字幕一区二区三区久久蜜桃 | 久久草草影视免费网 | 99久久精品国产网站 | 午夜精品久久久久久 | 欧美三人交 | 最新av在线免费观看 | 成+人+色综合 | 婷婷在线精品视频 | 国产亚洲午夜高清国产拍精品 | 亚洲免费视频在线观看 | 亚洲精选99 | 免费看的黄网站软件 | 精品美女在线视频 | 国产精品九九久久久久久久 | 欧美日韩一区二区免费在线观看 | 婷婷视频 | 免费看三级黄色片 | 日韩高清免费无专码区 | 国产精品18videosex性欧美 | 婷婷色5月 | 婷婷丁香激情综合 | 亚洲国产中文在线 | 欧美色综合天天久久综合精品 | 精品在线视频播放 | 午夜aaaa| 日韩大片在线免费观看 | 日日碰狠狠躁久久躁综合网 | 欧美乱码精品一区 | 欧美激情操 | 蜜桃视频色 | 中文字幕在线播出 | 在线观看免费一区 | 久久99久国产精品黄毛片入口 | 黄色毛片视频免费观看中文 | 伊人午夜| 99热国产在线中文 | 麻豆91精品视频 | 日韩中文在线视频 | 久久久精品一区二区 | 手机成人在线电影 | 不卡的av | 欧美性春潮 | 免费亚洲精品视频 | 在线综合 亚洲 欧美在线视频 | 国产成人三级在线播放 | 免费亚洲片 | 久久国产二区 | 国产一区二区在线免费播放 | 天天色播| 婷婷成人亚洲综合国产xv88 | 国产成人精品午夜在线播放 | 伊人中文在线 | 亚洲国产精品99久久久久久久久 | 日韩性xxxx | 丁香花在线视频观看免费 | 国产亚洲精品久久久久久久久久久久 | 国产九九精品 | 亚洲精品小视频 | 国模视频一区二区三区 | 色综合久久66 | 久久都是精品 | 日日干干 | 一区二区影院 | 日韩资源在线 | 国产一卡二卡在线 | 国产精品xxxx18a99 | 国产在线一区二区三区播放 | 四虎影视国产精品免费久久 | 美女天天操 | 在线一二三四区 | 国产香蕉视频在线播放 | 四虎免费在线观看 | 精品国产视频在线 | 久草久| 久久精品99国产国产精 | 成人黄色av免费在线观看 | 中文字幕 国产专区 | 偷拍福利视频一区二区三区 | 久草在线资源观看 | 又色又爽又激情的59视频 | 日本二区三区在线 | 91在线国产观看 | 在线观看免费国产小视频 | 亚洲乱码在线 | 丁香六月婷婷综合 | 欧美-第1页-屁屁影院 | 免费看久久久 | 麻豆传媒在线免费看 | 国产aa精品 | 毛片99| 天天操夜夜曰 | 亚洲欧洲精品一区二区精品久久久 | 久久国产精品偷 | 国产精品麻豆91 | 欧美日韩免费观看一区二区三区 | 欧美日韩不卡在线观看 | 国产国产人免费人成免费视频 | 三级免费黄色 | 黄色资源在线观看 | 一区二区三区 中文字幕 | 激情丁香婷婷 | 日韩av一卡二卡三卡 | 亚洲专区在线播放 | 婷婷在线免费观看 | 日韩午夜在线播放 | 91人人在线 | 国产精品色婷婷视频 | 国偷自产中文字幕亚洲手机在线 | 国产精品嫩草影院123 | 又爽又黄在线观看 | 国产一区成人 | 天天干天天拍天天操天天拍 | 国产喷水在线 | 日日夜夜婷婷 | 开心丁香婷婷深爱五月 | 五月婷婷国产 | 亚洲成人精品在线 | 天堂va在线观看 | 免费看的黄色小视频 | 五月天六月婷 | 人人射人人射 | 久亚洲精品 | 在线观看av网站 | 九九九九九国产 | 免费成人av电影 | 综合色天天 | 日韩天天干 | 九色91视频 | 亚洲精品自在在线观看 | 自拍超碰在线 | 丁香六月久久综合狠狠色 | 精品欧美在线视频 | 久久精品99国产精品酒店日本 | 手机看片午夜 | 日韩欧美有码在线 | 日黄网站 | 激情五月五月婷婷 | 精品无人国产偷自产在线 | 国产你懂的在线 | 国产一级一片免费播放放 | 丝袜精品视频 | 久久久精品网站 | 中文字幕高清av | 亚洲爱爱视频 | 欧美有色 | 手机在线观看国产精品 | 欧美色操 | 日韩在线观看视频网站 | 国产精品一区二区久久精品爱涩 | 国产 一区二区三区 在线 | 亚洲精品国久久99热 | 精品一区 精品二区 | 欧美日韩精品免费观看视频 | 成人免费影院 | 久草影视在线 | 欧美精品生活片 | 久久久精品国产一区二区 | 欧美激情一区不卡 | 亚洲伦理中文字幕 | 国产精品k频道 | 中文字幕日韩国产 | 婷婷福利影院 | 国产黄色理论片 | av免费观看在线 | 亚洲va欧美va人人爽春色影视 | 色88久久| 国产精品久久久久av免费 | 一级性视频| 久久精品com| 亚洲成人精品在线 | 97视频资源 | 日韩欧美一区二区在线播放 | 欧美日韩视频精品 | 麻豆久久久久 | 欧美日韩精品影院 | 精品一区二区在线免费观看 | 亚洲精品男女 | 久草精品视频 | 日韩精品一区二区三区免费观看视频 | 国产精品1区2区3区在线观看 | 91九色最新地址 | 国产精品情侣视频 | 国产成人精品一区二区三区 | 国产白浆在线观看 | 在线观看日韩精品视频 | 欧美日韩高清国产 | a v在线视频| 亚洲综合少妇 | 成人av一区二区兰花在线播放 | 亚洲成色777777在线观看影院 | 久久国产精品色av免费看 | 色资源在线 | 欧美激情视频在线免费观看 | 日韩久久精品一区二区三区 | 黄p网站在线观看 | 日日久视频 | 日韩一级电影网站 | 黄色免费大片 | 99热999| 日日久视频 | 久久久精品日本 | 人成在线免费视频 | 色婷婷www | 日韩精品中文字幕av | 在线观看黄|