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

歡迎訪問 生活随笔!

生活随笔

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

javascript

Spring学习--基于狂神说

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

Spring官方中文文檔:https://www.docs4dev.com/docs/zh/spring-framework/5.1.3.RELEASE/reference/

1,spring(一個抽象的概念)

1.1 spring的maven地址

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.22</version> </dependency> <!--下面這個包是用來和mybatis整合--> <dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.22</version> </dependency>

maven倉庫地址:https://mvnrepository.com/

2,IOC思想

? 讓對象可以動態的變化,不寫死。

? 通過一個set方法去給接口賦值

3,Spring項目搭建步驟

第一步:maven項目導入jar包

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!-- spring項目第一步導包 --><!--導入webmvc的包,可以自動的將一些其他spring包導入--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.22</version></dependency><!--下面這個包是用來和mybatis整合--><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.22</version></dependency></dependencies>

第二步;創建xml文件(用來實例化對象)(對象==bean)(這是一個存放對象的容器)

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><!--上面部分不變--><!-- 使用Spring來創建對象,在spring這些都稱為Beanjava中 類型 變量名 = new 類型();Hello hello = new Hello();spring中id = 變量名class = new 的對象property相當于給對象中的屬性設置一個值!--><bean id="userbean" class="pojo.User"/> <bean id="hello" class="pojo.HelloSpring">//創建對象并實例化<property name="name" value="Spring"/>//給對象屬性賦值<!--如果屬性字段是復合型(對象)則不用value,用ref=“另一個對象的bean ID”--><!--ref:引用spring容器(這個xml文件)中創建好的對象 value: 基本數據類型的值 --> <property name="user" ref="userbean"/></bean> </beans>

第三步:測試(運行)

//獲取Spring的上下文對象//這句話是固定的,可變的是變量名和參數名,參數名就是需要的(容器)xml文件,可以傳多個 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");//我們的對象現在都在Spring中管理,我們要使用,直接去里面取出來就可以Hello hello = (Hello)applicationContext.getBean("hello"); //getBean(String str):這個方法是在beans.xml中取對象,參數為對象的id

思考:

  • Hello對象是誰創建的? hello對象是由Spring創建的
  • Hello對象的屬性是怎么設置的? hello對象的屬性是由Spring容器設置的 【這個過程叫控制反轉

? 控制: 誰來控制對象的創建 , 傳統應用程序的對象是由程序本身控制創建的 , 使用Spring 后 , 對象是由Spring來創建的

? 反轉:程序本身不創建對象 , 而變成被動的接收對象

4,ioc(Spring)創建對象的方式:

**1,spring核心:get/set中的set方法,沒有set方法無法注入 **

2,正常創建對象是使用的無參構造方法創建對象

<bean id="userbean" class="pojo.User"/> <!--如果類沒有無參構造方法,則無法創建對象和實例化(會報錯)-->

3,使用有參構造方法創建對象的方式:

<!--方式一:下標賦值--> <bean id="user" class="com.kuang.pojo.User"><constructor-arg index="0" value="caishan"/> <!--index:有參構造方法中,參數的索引位置 value:給這個參數賦的值--> </bean> <!--方式二:類型賦值 不建議使用(因為如果多個參數類型一致,則賦值會出錯) --> <bean id="user" class="com.kuang.pojo.User"><constructor-arg type="java.lang.String" value="caishan"/><!--根據有參構造方法的參數類型去賦值,String類的type是java.lang.String,其他就正常 (類這些除外)--> </bean> <!--方式三:直接參數名賦值 和property一樣的用法,引用對象用ref。只是改了標簽名--><bean id="user" class="com.kuang.pojo.User"><constructor-arg name="name" value="caishan"/></bean>

總結:

1,spring創建對象,是在配置文件中bean時就被初始化。

2,如果有有參構造方法,則屬性通過property標簽進行賦值即可。如果沒有有參構造方法(代碼中只有有參構造方法)賊需要通過constructor-arg標簽對屬性進行賦值。

5,spring配置

5.1 alias標簽(別名)

<!--通過別名獲取對象,id叫user的bean 可以用abc來代替--> <alias name="user" alias="abc"/>

5.2 Bean標簽的配置

<!--id: bean的唯一標識,對象名class: bean對象所對應的全限類名: 包名+類名name: 也是別名,而且name同時可以取多個別名,中間用空格,逗號分開都可以(比alias更高級)--><bean id="user" class="com.kuang.pojo.User" name="ab abc"><constructor-arg name="name" value="ppj"/></bean>

5.3 import標簽

一般用于團隊開發,可以將多個配置文件,導入合并為一個

多人開發,不同的類需要注冊到不同的bean中,可以利用import將所有的beans.xml合并

applicationContext.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"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><import resource="beans.xml"/><import resource="beans2.xml"/><import resource="beans3.xml"/>//導入了三個beans.xml容器//使用時直接利用總的xml文件,就可以使用全部的 </beans>

6,DI依賴注入

  • 依賴注入: set注入(重點)
    • 依賴: bean對象的創建依賴于容器
    • 注入: bean對象中的所有屬性,由容器來注入

要求被注入的屬性 , 必須有set方法 , set方法的方法名由set + 屬性首字母大寫 , 如果屬性是boolean類型 , 沒有set方法 , 是 is 。。。。

不同數據類型的set注入方式
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><!--上面部分不變--><bean id="adderss" class="pojo.Address"><property name="address" value="重慶"/></bean><!----><bean id="Student01" class="pojo.Student"><!--普通數據類型,直接使用value注入--><property name="name" value="蔡閃"/><!--其他類數據類型,用ref注入--><property name="address" ref="adderss"/><!--數組類型,在property標簽體內使用array標簽注入--><property name="books"><array><value>aaa</value><value>bbb</value><value>ccc</value></array></property><!--list集合類型,在property標簽體內使用list標簽注入--><property name="hobbys"><list><value>111</value><value>222</value><value>333</value></list></property><!--map集合類型,在property標簽體內使用map標簽注入--><property name="card"><map><entry key="ID" value="11223344"/></map></property><!--set集合類型,在property標簽體內使用set標簽注入--><property name="games"><set><value>qqqq</value></set></property><!--null類型,在property標簽體內使用null標簽注入--><property name="wife"><null/></property><!--Properties類型,在property標簽體內使用props標簽注入(有點像結構體)--><property name="info"><props><prop key="姓名">111</prop><prop key="性別"></prop></props></property></bean> </beans>

幾個注意點:

1,如果數據類型是值,則用value 。如果是對象之類的用ref

2,不變的是 這個部分,基本上都可以放在標簽體內部,只是普通的用起來方便

3,除了基礎的直接在標簽內部賦值外,其他的基本上都有自己的標簽體。

4,注意map集合,和Properties類型注入的特點

p標簽,c標簽注入

1,使用前,需要在頭文件前加入兩句話

xmlns:p="http://www.springframework.org/schema/p"<!--使用p標簽時導入,等價于property -->xmlns:c="http://www.springframework.org/schema/c"<!--使用c標簽時導入,等價于constructor-arg -->

2,用法

<!-- p命名空間注入,直接在標簽體內部進行賦值,就相當于格式化--> <!--p:name="caishan" 等價于 <property name="name" value="caishan "/> --> <bean id="user" class="com.kuang.pojo.User" p:name="ppj" p:age="18"/><!-- c命名空間注入--> <bean id="user2" class="com.kuang.pojo.User" c:name="牛天成" c:age="18"/>
3,Bean的作用域

1,單例模式(Spring默認機制)(scope=“singleton”)(只有一個對象)

<bean id="user2" class="com.kuang.pojo.User" c:name="牛天成" c:age="18" scope="singleton"/>

2,原型模式(每次從容器中get的時候,都會產生一個新對象)(scope=“prototype”)

<bean id="user2" class="com.kuang.pojo.User" c:name="牛天成" c:age="18" scope="prototype"/>

3,其余的request,session,application這些個只能在web開發中使用到

7,Bean的自動裝配

意義:可以不需要手動的給屬性賦值(一般用于有引用型屬性)

autowire字段選擇裝配方式

主要用于屬性是對象類型的時候

7,1 使用byName自動裝配(autowire=“byName”)

<!--byName: 會自動在容器上下文中查找,和自己對象set方法后面的值對應的bean的id屬性例:在該類中有一個People類的屬性和setPeople的方法,那么xml中有一個id為people(忽略大小寫)的bean,那么這個屬性就自動和id為people的bean綁定。--> <bean id="people" class="com.kuang.pojo.People" autowire="byName"><property name="name" value="ppj"/> </bean> <!--byName的時候,需要保證所有bean的id唯一-->

7,2 使用byType自動裝配(autowire=“byType”)

<!-- byType: 會自動在容器上下文中查找, 和自己對象屬性類型相同的bean 例:在該類中有一個People類的屬性,那么xml中有一個類型為People類的bean,那么這個屬性就自動和class為People的bean綁定。 --> <bean id="people" class="com.kuang.pojo.People" autowire="byType"><property name="name" value="ppj"/> </bean> <!--byType的時候,需要保證所有bean的class唯一,使用byType可以不用寫id-->
7,3 使用注解自動裝配

使用注解裝配,需要先導入context約束,context依賴

<!--在頭文件加入-->xmlns:context="http://www.springframework.org/schema/context" <!--**-->http://www.springframework.org/schema/context <!--**-->https://www.springframework.org/schema/context/spring-context.xsd <!--**--><context:annotation-config/>//導入自動裝配的依賴 </beans> 提前也要在spring中注冊 除非自動裝配的類也用注解進行了注冊

注解加入的位置:

//可以加在屬性的頭上(注意:每一個屬性都自己加自己的)@Autowired(required = false)//如果定義@Autowired(required = false),說明這個對象可以為null,否則不允許為空(默認是true)private Cat cat;@Autowired//也可以不加后面的約束private Cat cat;//也可以直接加在set方法頭上 //也可以忽略set方法,前提是你這個自動裝配的屬性在IOC(Spring)容器中存在,且符合名字byName默認是通過byType (就是說如果用注解自動裝配可以不寫set方法但是要在spring中配置,否則不用配置)

如果有多個同類的對象,則無法進行自動的綁定需要使用**@Qualifier(value = “綁定對象的ID名字”)**注解進行配套使用

<!--這是另一個配置注解,可以從byName,byType兩種方式去匹配--> @Resourceprivate Cat cat;@Nullable 屬性標記了這個注解,說明這個字段可以為null

小結:

@Resource和@Autowired的區別:

都是用來自動裝配的,都可以放在屬性字段上
@Autowired通過byType的方式實現,而且必須要求這個對象存在 【常用】
@Resource默認通過byName的方式實現,如果找不到名字,則通過byType實現!如果兩個都找不到,就會報錯
不同:@Autowired通過byType的方式實現 @Resource默認通過byName的方式實現

8,注解開發

使用注解開發的第一步還是需要先導入context約束,依賴

<!--在頭文件加入--><?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:context="http://www.springframework.org/schema/context" <!--**-->xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context <!--**-->https://www.springframework.org/schema/context/spring-context.xsd"> <!--**--><!-- 區別是指定要掃描的包,包下所以類的注解就會生效--><context:component-scan base-package="包的全路徑"/><掃描包>// <context:annotation-config/>//導入的依賴 </beans>

2,需要在指定包的每一個類上加上這個注解**@Component** :意思是該包的對象就在spring容器中被創建了。

該對象的名字為類名的首字母小寫形式,也可以在里面寫上想要的名字

@Component("注冊名") //等價于 <bean id="user" class="pojo.User"> public class User {<!--需要給對象的屬性賦值,則使用@Value("值")注解-->//等價于 <property name="name" value="ppj"/>@Value("ppj")private String name;}

3, 衍生的注解
@Componet有幾個衍生注解,我們在web開發中,會按照mvc三層架構分層

dao [@Repository]

service [@Service]

controller 【@Controller】

這4個注解的功能都是一樣的(都等價于@Componet),都是代表將某個類注冊到Spring中,裝配Bean

4,自動裝配注解

@Resource

@Autowired

5,作用域注解

@Scope(“prototype”) [代表該類是單例模式]

6,總結

xml與注解

  • xml更加萬能,適用于任何場合維護簡單方便
  • 注解不是自己類使用不了 ,維護相對復雜!

最佳實踐:

  • xml用來管理bean
  • 注解只負責完成屬性的注入
  • 在使用的過程中,只需要注意一個問題:必須讓注解生效,就需要開啟注解的支持,開啟包掃描

9,使用java的方式配置spring

其中一個方法就是一個bean對象

//@Configuration代表這是一個配置類,就和我們之前看的beans.xml是一樣的 @Configuration @ComponentScan("包名")//掃描包。等價于 <context:component-scan base-package="包的全路徑"/> @Import(配置類名.class)//類似將多個xml文件導成一個 public class MyConfig {//注冊一個bean,就相當于我們之前寫的一個bean標簽//這個方法的名字,就相當于bean標簽中的id屬性(對象名)//這個方法的返回值,就相當于bean標簽中的class屬性(類名)@Bean //等價于<bean id="getUser" class="com.XXX.User"/>public User getUser(){return new User(); //就是返回要注入到bean的對象} } //第二個配置類 @Configuration public class MyConfig2 { }

調用時:獲取池子的方法有所改變

如果完全使用了配置類方式去做,我們就只能通過AnnotationConfigApplicationContext來獲取容器,括號里面寫這個配置類的類名.class

public class MyTest {@Testpublic void test(){//如果完全使用了配置類方式去做,我們就只能通過AnnotationConfigApplicationContext來獲取容器,通過配置類的class對象加載ApplicationContext context = new AnnotationConfigApplicationContext(類名.class);User user = context.getBean("getUser", User.class);System.out.println(user);} }

這種純java的配置方式,在springboot中隨處可見!

10,代理模式

注意:一個代理只能對應一個接口

10,1靜態代理模式:

代理模式的意義是:為了不改動原有代碼【滿足開放封閉-原則】

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-xQ18q3qK-1668096073684)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20220729125335472.png)]

角色分析:

  • 抽象角色: 一般會使用接口或者抽象類類解決(房子)(接口類)
  • 真實角色:被代理的角色(房東)(實現類)
  • 代理角色: 代理真實角色,代理真實角色后,我們一般會做一些附屬操作(代理)(調實現類的方法)
  • 客戶:訪問代理對象的人(租客

代碼步驟:

? 抽象角色:

//房子 public interface Room {//租房public void Rent(); }

? 真實角色:

//房東 public class Host implements Room {@Overridepublic void Rent() {System.out.println("我要出租房子");} }

? 代理角色:(繼承接口)

//代理 public class Proxy {private Host host;public Proxy() {}//客戶找代理時,指定需要哪一個房東的房子public Proxy(Host host) {this.host = host;}public void Rent() {//租房host.Rent();Money();}//代理負責收租private void Money(){System.out.println("代理收租");} }

? 租客:

//租客 public class Me {public static void main(String[] args) {Host host=new Host();//找到代理,告訴他我要租誰的房子Proxy proxy=new Proxy(host);//進行租房proxy.Rent();} }

代理模式的好處:

  • 可以使真實角色的操作更加純粹,不用去關注一些公共的業務
  • 公共業務也就交給代理角色,實現業務的分工
  • 公共業務發生擴展的時候,方便集中管理
  • 缺點:

    • 一個真實角色就會產生一個代理角色;代碼量會翻倍===開發效率變低(靜態代理只允許,一個房東一個代理)
    10,2案例二

    業務接口:(接口)

    public interface UserService {/*需求: 在不修改原代碼的情況下,添加日志打印信息*/public void add();public void delete();public void update();public void query();}

    真實業務:(實現類)

    public class UserServiceImpl implements UserService{@Overridepublic void add() {System.out.println("add方法");}@Overridepublic void delete() {System.out.println("delete方法");}@Overridepublic void update() {System.out.println("update方法");}@Overridepublic void query() {System.out.println("query方法");} }

    需求:在不改變原有代碼的基礎上,實現日志打印,借助代理

    public class UserServiceProxy implements UserService{@Overridepublic void add() {log("add");System.out.println("add===");}@Overridepublic void delete() {log("delete");System.out.println("delete===");}@Overridepublic void update() {log("update");System.out.println("update=====");}@Overridepublic void query() {log("query");System.out.println("query=====");}public void log(String msg){System.out.println("[DEBUG]"+msg+"方法執行");} }

    測試:

    public static void main(String[] args) {UserServiceProxy userServiceProxy = new UserServiceProxy();userServiceProxy.add();}

    直接用代理對象實現同樣的業務接口,打印日志信息,而不觸及到原代碼

    10,3動態代理

    動態代理和靜態代理角色一樣
    動態代理的代理類是動態生成的,不是我們直接寫好的
    動態代理分為兩大類:基于接口的動態代理,基于類的動態代理
    基于接口----JDK動態代理
    基于類: cglib
    java字節碼實現: javassit
    需要了解2個類:Proxy===代理, InvocationHandler:調用處理程序(接口)

    InvocationHandler

    Proxy

    動態代理的好處:

    可以使真實角色的操作更加純粹!不用去關注一些公共的業務
    公共也就交給代理角色!實現業務的分工
    公共業務發生擴展的時候,方便集中管理
    一個動態代理類代理的是一個接口,一般就是對應的一類業務
    一個動態代理類可以代理多個類,只要是實現了同一個接口即可

    直接動態代理常用工具類(基于接口:JDK動態代理)

    可以直接封裝,使用

    public class ProxyInvocationHandler implements InvocationHandler{private Object target;//需要代理的接口(object可以是具體的接口名,target可以是任意名字)public void SetTarget(Object target){this.target=target;}//得到生成的代理類public Object getProxy(){return Proxy.newProxyInstance(this.getClass().getClassLoader(),target.getClass.getInterfaces,this);}//處理代理實例,返回結果(處理客戶端選擇執行的方法)//Method:方法 Object[]:應該是參數 Proxy:代理類public Object invoke(Object Proxy,Method method,Object[] args)throws Throwable{//其他代理類額外添加的方法,寫在這里面Object result =method.invoke(target,args);//執行選擇的方法return result;} }

    調用:

    public Static void main(String[] args){ //創建真實角色(這一步沒變) UserServiceImpl userService=new UserServiceImpl(); //創建代理角色 ProxyInvocationHandLer pih =new ProxyInvocationHandLer();//調用之前的自動生成代理類方法 pih.setTarget(userService);//將需要代理的真實角色傳遞給他 UserService proxy=(UserService)pih.getProxy();//創建代理類(UserService:接口名) proxy.query();//利用該代理類調用方法 }

    11,AOP(動態代理)(核心還是反射)

    提供聲明式事務;允許用戶自定義切面

    橫切關注點:跨越應用程序多個模塊的方法或功能。即是,與我們業務邏輯無關的,但是我們需要關注的部分,就是橫切關注點。如日志 , 安全 , 緩存 , 事務等等 …(用AOP插入的情況

    切面(ASPECT):橫切關注點 被模塊化 的特殊對象。即,它是一個類

    通知(Advice):切面必須要完成的工作。即,它是類中的一個方法。

    目標(Target):被通知對象。

    代理(Proxy):向目標對象應用通知之后創建的對象。

    切入點(PointCut):執行方法的位置

    連接點(JointPoint):與切入點匹配的執行點。

    SpringAOP中,通過Advice定義橫切邏輯,Spring中支持5種類型的Advice:

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-aiSxyMag-1668096073686)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20220729161213739.png)]
    即AOP在不改變原有代碼的情況下,去增加新的功能

    使用AOP置入,需要導入一個依賴包[重點]

    <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver --> <dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.8</version><scope>runtime</scope> </dependency>
    實現AOP的第一種方式:(API接口)

    1,編寫業務接口和實現類

    public interface UserService {public void add();public void delete();public void update();public void select(); }public class UserServiceImpl implements UserService{@Overridepublic void add() {System.out.println("add方法。。。");}@Overridepublic void delete() {System.out.println("delete方法。。。");}@Overridepublic void update() {System.out.println("update方法。。。");}@Overridepublic void select() {System.out.println("select方法。。。");} }

    2,編寫增強類,后置和前置增強(Advisor)[繼承不同的接口]

    //MethodBeforeAdvice:前置增強 public class BeforeLog implements MethodBeforeAdvice {//method: 要執行目標對象的方法//args: 被調用方法的參數//target: 目標對象@Overridepublic void before(Method method, Object[] args, Object target) throws Throwable {System.out.println(target.getClass().getName()+"執行了"+method.getName()+"方法");} } //AfterReturningAdvice:后置增強 public class AfterLog implements AfterReturningAdvice {//returnValue 返回值@Overridepublic void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {System.out.println(target.getClass().getName()+"執行了"+method.getName()+"方法"+returnValue);} }

    3,將這些類注冊到Spring容器中,并實現aop切入,導入aop約束

    <?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:aop="http://www.springframework.org/schema/aop"//導入的xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aop//導入的https://www.springframework.org/schema/aop/spring-aop.xsd//導入的 "><bean id="userService" class="com.kuang.service.UserServiceImpl"/><bean id="beforeLog" class="com.kuang.log.BeforeLog"/><bean id="afterLog" class="com.kuang.log.AfterLog"/><!-- AOP配置 --><aop:config><!-- 配置切入點 expression:是一個表達式--> <aop:pointcut id="pointcut" //這個名字可以隨便取 expression="execution(* com.kuang.service.UserServiceImpl.*(..))"/>//固定寫法execution(* 哪一個類.*全部方法(..)//代表多個參數)<!-- 執行環繞 advice-ref執行方法 . pointcut-ref切入點--><aop:advisor advice-ref="beforeLog" pointcut-ref="pointcut"/><aop:advisor advice-ref="afterLog" pointcut-ref="pointcut"/></aop:config>//aop:config 標簽的完整意思:在UserServiceImpl這個實現類的所有方法中配置切入點,然后在執行這些方法時執行advice-ref定義的方法 </beans>

    4.測試

    public class MyTest {public static void main(String[] args) { ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");//動態代理的是接口,雖然綁定的對象是一個接口的實現類,但是返回值還是一個接口UserService userService = (UserService) context.getBean("userService");userService.delete();} }
    實現AOP的第二種方式:(自定義類)

    1,將之前的增強類變為一個普通類,里面寫多個方法

    public class MyAspect {//方法就是之前的各種增強類,名字隨便起public void before(){System.out.println("before通知=====");}public void after(){System.out.println("after通知=======");} }

    2,在spring中配置

    <!-- 方式二: 自定義切面類 --><bean id="myAspect" class="com.kuang.def.MyAspect"/><aop:config><!--aspect:自定義切面 ref要引用的類 -->//自定義方法必須用aop:aspect這個標簽<aop:aspect ref="myAspect"><!-- 切入點 --> <aop:pointcut id="pointcut" expression="execution(* com.kuang.service.UserServiceImpl.*(..))"/><!-- 通知(要切入的方法) --><aop:before method="before" pointcut-ref="pointcut"/>//我要切入ref這個類中的before()方法,在pointcut指定的切入點切入,什么時候切入?aop:before的時候<aop:after method="after" pointcut-ref="pointcut"/></aop:aspect></aop:config>

    3,測試

    public class MyTest {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");//動態代理的是接口UserService userService = (UserService) context.getBean("userService");userService.delete();} }
    實現AOP的第三種方式:(注解實現)

    不需要導入注解的約束【因為不是用注解寫對象】

    只需要導入aop相關約束即可

    在xml中需要新增一個標簽

    開啟注解支持 <aop:aspectj-autoproxy/> @Aspect //標注這個類是一個切面 public class AnnotationAspect {//前置通知 @Before("execution(* com.kuang.service.UserServiceImpl.*(..))") public void before(){System.out.println("執行方法前===="); }//后置通知 @After("execution(* com.kuang.service.UserServiceImpl.*(..))") public void after(){System.out.println("執行方法后====="); }//環繞通知 @Around("execution(* com.kuang.service.UserServiceImpl.*(..))") public void around(ProceedingJoinPoint jp) throws Throwable {System.out.println("環繞前=====");jp.proceed(); //執行方法System.out.println("環繞后====="); } }

    12,整合mybatis

    mybatis是寫接口,寫mapper.xml文件,寫SQL

    Spring就是萬物皆對象,每一個類都是一個對象,在beans.xml中實例化之后才可以使用

    步驟:

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Y0VBwCly-1668096073686)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20220729180248262.png)]

  • 導入相關jar包

    • junit

    • mybatis

    • mysql

    • spring

    • AOP

    • spring-jdbc【新的】

      [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-8PNVdPOm-1668096073687)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20220729180039423.png)]

    • mybatis-spring【新的】

    • [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-4u8MewxF-1668096073687)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20220729180200901.png)]

      [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-KyK3Ymev-1668096073687)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20220729175925321.png)]

  • 1,編寫配置文件

    2,測試

    12.1 回顧mybatis
  • 編寫實體類
  • 編寫核心配置文件
  • 編寫接口
  • 編寫Mapper.xml
  • 測試
  • 12.2 整合mybatis方式一

    利用SqlSessionTemplate。

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-MJKEh0Il-1668096073688)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20220730135529798.png)]

    第一步:編寫數據源

    在spring的配置文件中編寫以下代碼

    <!-- DataSource:使用Spring的數據源替換mybatis的配置 c3p0 dbcp druid這里使用spring提供的jdbc: org.springframework.jdbc.datasource--><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&amp;useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false"/><property name="username" value="root"/><property name="password" value="123456"/></bean>

    第二步:創建SqlSessionFatory對象

    <!-- SqlSessionFactory --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><!-- 綁定mybatis配置文件(這兩句可不寫)--><property name="configLocation" value="classpath:mybatis-config.xml"/><property name="mapperLocations" value="classpath:com/kuang/mapper/*.xml"/>//意思是:相當于綁定注冊,綁定com/kuang/mapper/*.xml這個路徑下的所有Mapper.xml</bean>

    第三步:創建sqlsession對象(在spring中叫sqlSessionTemplate)

    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"><!-- 只能用有參構造器注入sqlSessionFactory 因為它沒有set方法 --><constructor-arg ref="sqlSessionFactory"/> </bean> //第二,第三步相當于之前寫的mybatis工具類

    如何使用?

    1,需要給接口加實現類

    在原來mybatis的基礎上給mapper接口添加實現類(實現類去實現具體的調用步驟)

    public class UserMapperImpl implements UserMapper {private SqlSessionTemplate sqlSession;//在實現類中定義一個SqlSessionTemplate對象public void setSqlSession(SqlSessionTemplate sqlSession) {//需要寫一個set方法,一會方便在beans.xml中進行注入this.sqlSession = sqlSession;}@Override//這就是類似指定調用的SQL語句public List<User> selectUser() {UserMapper mapper = sqlSession.getMapper(UserMapper.class);//還是需要映射一個接口的對象調用方法執行SQLList<User> userList = mapper.selectUser();//執行SQLreturn userList;} }

    2,將自己寫的實現類,注入到spring中(創建一個實現類的對象)

    <!-- 總的spring配置文件 --> <bean id="UserMapperImpl" class="com.kuang.mapper.UserMapperImpl"><property name="sqlSession" ref="sqlSession"/>//將SQLsession對象注入 </bean>

    3,測試

    public class MyTest {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");UserMapper userMapper = context.getBean("userMapper", UserMapper.class);for (User user : userMapper.selectUser()) {System.out.println(user);}} }

    遇見的錯誤

    mybatis-config.xml里的mappers 要刪了, 這個和 spring-dao的 <property name="mapperLocations"value="classpath:com/lzh/mapper/*.xml"/> 只能二選一!!!!!!不然會報錯的,都是mapper的作用!
    12.3 整合mybatis方式二

    利用繼承SqlSessionDaoSupport

    兩個點:不用再配置sqlsession對象,實現類繼承

    在實現類中寫:

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-8cxGvJ2s-1668096073688)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20220730162524102.png)]

    在beans.xml中寫

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-4nTgsIUz-1668096073688)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20220730162708466.png)]

    相當于省略了beans.xml中配置sqlsession的步驟

    13,事務

    spring中的事務管理分為

    • 聲明式事務:AOP(不影響原有代碼)
    • 編程式事務:需要在代碼中進行配置管理

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-XjhFgLkD-1668096073689)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20220730170603636.png)]

    步驟:

    1,配置聲明式事務(開啟事務管理器)

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!--這是死代碼 ,dataSource:數據源-->

    2,結合AOP實現事務的織入

    <!--1, 導入事務的約束 (頭文件處)--> //注意aop的約束也要導入 <?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:tx="http://www.springframework.org/schema/tx"//導入的xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/tx//導入的https://www.springframework.org/schema/tx/spring-tx.xsd //導入的 "><!--2, 配置事務通知(方法) --><!-- transactionManager步驟一所配置的bean --><tx:advice id="txAdvice" transaction-manager="transactionManager"><!-- 給哪些方法配置事務 --><!-- 配置事務的傳播特性: propagation=“required” spring默認事務 --><tx:attributes><tx:method name="add" propagation="REQUIRED"/>//所有add方法配置事務意思是:給所有的add方法配置REQUIRED類型的事務<tx:method name="delete" propagation="REQUIRED"/>//所有delete方法配置事務<tx:method name="query" read-only="true"/>//read-only表示query類的事務無法對數據庫進行增刪改<tx:method name="*"/>//所有方法配置事務</tx:attributes></tx:advice><!--3,配置事務切入(切入點) --><aop:config><aop:pointcut id="txPoint" expression="execution(* com.kuang.mapper.*.*(..))"/>切入點<aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint"/>//切入的方法</aop:config>

    AOP:切面,通知,切入點

    為什么需要事務?

    • 如果不配置事務,可能存在數據提交不一致的情況下
    • 如果我們不在spring中去配置聲明式事務,我們就需要在代碼中手動配置事務
    • 事務在項目開發中重要,設計到數據的一致性和完整性問題,不容馬虎

    總結

    以上是生活随笔為你收集整理的Spring学习--基于狂神说的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    99精品国产福利在线观看免费 | 日韩欧美精品在线视频 | 久久久久久国产精品亚洲78 | 成人免费毛片aaaaaa片 | 成人午夜片av在线看 | 麻豆视频在线观看 | 日本九九视频 | 久久免费视频一区 | 日日夜夜精品视频天天综合网 | 黄色av电影一级片 | 五月在线视频 | 一区二区不卡视频在线观看 | a级片久久久 | 美国三级黄色大片 | 日免费视频 | 玖玖在线观看视频 | 久草网站在线 | 日韩欧美xxx | 久久国产精品网站 | 国产成人精品一区二区在线观看 | www黄色大片 | 国产美女网站在线观看 | 欧美一级激情 | 免费看黄电影 | 国产黄大片 | 91精品国产乱码在线观看 | 激情电影影院 | 4hu视频 | 欧美日韩国产伦理 | 国产精品久久婷婷六月丁香 | 亚洲 欧美 国产 va在线影院 | 在线视频精品播放 | 色偷偷888欧美精品久久久 | 亚洲欧洲日韩在线观看 | 亚洲国内在线 | 久久国产免 | 久久97久久97精品免视看 | 亚洲精品tv| 亚洲综合在线视频 | 婷婷色亚洲 | 国产女v资源在线观看 | 免费精品视频在线 | 在线黄色免费 | 免费在线观看av不卡 | 久久免费福利 | 日韩激情中文字幕 | 一本一道久久a久久综合蜜桃 | 国产不卡免费视频 | 综合久久影院 | 91最新网址 | 手机成人免费视频 | 国产综合精品久久 | 在线观看香蕉视频 | 高清精品视频 | 亚洲欧美乱综合图片区小说区 | 婷久久 | 草久视频在线 | 成人毛片在线观看视频 | 国产一级片直播 | 伊人色综合久久天天 | 国产精品女人久久久久久 | 成人av片免费看 | 不卡的av在线播放 | 高清中文字幕av | 国产一级黄色电影 | 婷婷久久五月天 | 色婷婷综合在线 | 精品国产一区二区三区久久 | 日韩av不卡在线播放 | 91九色porny在线 | 日韩美女久久 | 日韩av电影国产 | 日韩夜夜爽 | 欧美日韩一级久久久久久免费看 | 五月婷婷久久丁香 | 欧美激情xxxx | 国产精品欧美一区二区 | 波多野结衣视频一区二区 | 久久精品看片 | 99精品欧美一区二区 | 日韩精品观看 | 欧美日韩国产精品爽爽 | 亚洲午夜小视频 | 91人人干| 欧美在线观看视频免费 | 国产精品电影一区 | 四虎海外影库www4hu | 国产视频二区三区 | 成人a视频在线观看 | 精品99久久| av中文字幕网 | 精品国产一区二区三区四区vr | 日本精品免费看 | 亚洲激情 | 日韩av电影手机在线观看 | 精品国产伦一区二区三区观看体验 | 国产一级电影 | 91插插插免费视频 | 色婷婷综合久久久中文字幕 | 免费观看一区 | 日韩一区二区三区免费电影 | 国产一级视频免费看 | 日韩aⅴ视频 | 综合色综合 | 欧美日韩高清不卡 | 精品国产美女 | 免费国产在线观看 | 久草电影网 | 婷婷五月在线视频 | 二区三区精品 | 一区二区网 | 在线视频国产区 | 欧美精品xx| 国产特级毛片aaaaaa高清 | 美女网色 | 91系列在线观看 | 在线亚洲精品 | 国产精品一区免费观看 | 亚洲激情小视频 | 亚洲精品午夜aaa久久久 | 狠狠色丁香九九婷婷综合五月 | 国产一级精品绿帽视频 | 成年人在线免费看片 | 少妇性aaaaaaaaa视频 | 国产91精品看黄网站在线观看动漫 | 五月婷婷丁香网 | 成人午夜电影免费在线观看 | 久久久伊人网 | 日韩在线精品视频 | 免费看黄的视频 | 九九热免费视频在线观看 | 亚洲精品在线免费播放 | av不卡中文 | 99视频一区二区 | 最新国产精品亚洲 | 伊人www22综合色 | 国模视频一区二区 | 天天干天天色2020 | 免费视频成人 | 成人久久18免费网站图片 | 四虎影视精品成人 | 黄色成人av| 久久99精品国产麻豆宅宅 | 丁香九月婷婷综合 | 91大神一区二区三区 | 久久久久人人 | 亚洲乱码精品久久久久 | 精品亚洲成人 | 日韩理论电影在线观看 | 国产亚洲精品久久久网站好莱 | 国产成人精品一区二区三区免费 | 国产手机在线观看视频 | 久久国产精彩视频 | 五月婷婷一区二区三区 | 丁香婷婷在线 | 亚洲婷婷综合色高清在线 | 亚洲男人天堂a | 超碰人人91 | 精品在线观 | 国产97av| 久久久噜噜噜久久久 | 特级西西444www大胆高清无视频 | 亚洲精品在线观看视频 | 国产无遮挡猛进猛出免费软件 | 日韩系列在线观看 | 91在线操| 欧美巨大荫蒂茸毛毛人妖 | 美州a亚洲一视本频v色道 | 精品99免费视频 | 在线免费观看视频a | 色播99 | 久久视频在线观看中文字幕 | 国产三级视频在线 | 久久99精品波多结衣一区 | 成人免费观看在线视频 | 四季av综合网站 | www.夜色.com | av电影av在线 | 久久精品国产第一区二区三区 | 欧美精品乱码久久久久久 | 麻豆视频在线观看免费 | 91精品国产99久久久久 | 国产美女视频免费观看的网站 | 狠狠狠色丁香综合久久天下网 | 最新av免费在线观看 | 岛国av在线不卡 | 中文资源在线官网 | 亚洲黄色app | 国产精品久久久久影视 | 国产三级国产精品国产专区50 | 91桃花视频| 国产一区二区在线观看视频 | 欧美日bb| 欧美一区三区四区 | 亚洲另类视频在线观看 | 高清av在线免费观看 | 国产高清视频免费观看 | 91精品在线视频 | 97影视| 亚洲国产精品推荐 | 高清av中文在线字幕观看1 | 亚洲精品一区二区精华 | 96视频在线 | 五月天婷亚洲天综合网精品偷 | 久久久久久国产精品 | 日韩手机在线 | 亚州欧美精品 | 国产精品久久99精品毛片三a | 欧美日韩午夜在线 | 亚洲九九爱| 免费h视频| 香蕉视频免费在线播放 | 国产精品黑丝在线观看 | 久久国产午夜精品理论片最新版本 | 狠狠躁18三区二区一区ai明星 | 免费一级特黄录像 | 激情五月在线视频 | 91香蕉视频 mp4 | 349k.cc看片app| 久久精品资源 | 日韩欧美大片免费观看 | 96精品在线 | 亚洲特级毛片 | 国产色拍拍拍拍在线精品 | 91看片在线看片 | 久久看免费视频 | 激情久久一区二区三区 | 国产精品久久中文字幕 | 中文字幕麻豆 | 久久久国产精品免费 | 国产一区二区免费看 | 国产小视频网站 | 人人爽影院 | 麻花豆传媒mv在线观看网站 | 久久精品直播 | 91精品国产一区 | 美女在线黄 | 色综合久久久久综合体 | 国产白浆视频 | 丁香花中文字幕 | 欧美午夜a| 日韩欧美视频一区二区三区 | 狠狠狠狠狠狠狠狠 | 97在线观看免费高清完整版在线观看 | 日本不卡123区 | 精品视频免费播放 | 国产成人久久精品一区二区三区 | 欧美91精品国产自产 | 99精彩视频在线观看免费 | 天天操操| 国产91精品一区二区麻豆网站 | 国产精品999久久久 久产久精国产品 | 韩国av一区二区 | 久草色在线观看 | 国产麻豆精品传媒av国产下载 | 中文字幕在线观看av | 国产男女免费完整视频 | 日日激情| 久久久亚洲电影 | 国产一级三级 | 91热这里只有精品 | 亚洲最大在线视频 | 成人网中文字幕 | 在线亚洲观看 | 成人动图 | 欧洲色吧| 国产不卡高清 | 五月天综合激情 | 亚洲激情小视频 | 91tv国产成人福利 | 射射射综合网 | 国产五月天婷婷 | 天天操夜夜曰 | av网站在线观看免费 | 亚洲成aⅴ人在线观看 | 中文字幕免 | 亚洲一级黄色大片 | 日韩成人免费在线电影 | 亚洲撸撸 | 亚洲成人午夜在线 | 在线观看v片| 一区二区日韩av | 伊人色综合网 | 四虎永久精品在线 | 国产高清视频色在线www | 美女久久视频 | www.狠狠操 | 一级特黄aaa大片在线观看 | 一区二区三区在线免费观看 | 91成人免费观看视频 | 亚洲视屏一区 | 国产成人av网址 | 日本精品一区二区三区在线播放视频 | 天天插综合网 | 激情久久久久 | 91精品欧美 | 99精品国产成人一区二区 | 亚洲视频 中文字幕 | 精品二区久久 | 中文字幕一区二区三区在线视频 | 日本黄色免费网站 | 免费视频成人 | 成人小视频在线观看免费 | 国产高清av在线播放 | 激情久久久久久久久久久久久久久久 | 国产18精品乱码免费看 | 婷婷久久综合九色综合 | 久久人人爽人人人人片 | 国产成人精品网站 | 久久国产精品免费 | 亚洲欧美日韩国产精品一区午夜 | 久久久精品一区二区 | 日韩精品亚洲专区在线观看 | 国产 一区二区三区 在线 | 天天综合网久久 | 成片免费观看视频大全 | 亚洲最大的av网站 | 国产伦精品一区二区三区… | 手机av在线免费观看 | 亚洲麻豆精品 | 日本中文字幕在线观看 | 久久久久伦理电影 | 激情久久小说 | www.99热精品| 天天干天天爽 | 天堂资源在线观看视频 | 91福利社区在线观看 | 国产小视频免费观看 | 视频在线一区 | 久草久草在线 | 91资源在线播放 | 中文字幕第一页在线视频 | 欧美了一区在线观看 | 国产不卡在线观看 | 久久电影中文字幕视频 | 在线观看黄色av | 精品国产免费av | 91精品国产一区二区三区 | 午夜av免费| 国产精品一区二区在线观看 | 免费在线观看a v | 色婷婷骚婷婷 | 一区二区三区不卡在线 | 久久免费资源 | av3级在线| 久久综合久久88 | 久久精品在线免费观看 | 亚洲国产剧情 | 国产精品久久久久9999 | 天天射综合网视频 | 美女在线免费观看视频 | 不卡的av在线 | 久福利| 国产黑丝袜在线 | 成年人在线电影 | 午夜国产成人 | 久久久综合色 | 日韩中文字幕免费视频 | 91最新中文字幕 | 在线视频观看你懂的 | 免费久草视频 | 热久久99这里有精品 | 99视频国产精品 | 国产91精品一区二区 | 欧美激情综合五月 | 国产精品免费观看在线 | 日日干干夜夜 | 五月天激情婷婷 | 成人黄色毛片视频 | 国产一区二区免费在线观看 | 国产成人精品在线 | 91免费的视频在线播放 | 国产一级免费在线观看 | 91香蕉视频在线 | 看全黄大色黄大片 | 国产又粗又猛又爽又黄的视频先 | 国产精品午夜久久久久久99热 | 国产91aaa | 国产精品21区| 成人中文字幕在线 | 国产原创在线观看 | 久久午夜国产 | 亚洲精品在线资源 | 天天射天天爱天天干 | 欧美日韩一区二区三区在线免费观看 | 最近中文字幕高清字幕免费mv | 色多多视频在线观看 | 九九久久国产精品 | 中文字幕二区在线观看 | 国产高清在线不卡 | 国产最顶级的黄色片在线免费观看 | 92av视频| 五月婷婷久草 | 午夜久久影视 | 六月丁香婷婷久久 | 国产精品黄色在线观看 | 国产精品久久久久久久av大片 | 久久av中文字幕片 | 亚洲精品美女久久久 | 亚洲精品美女久久久久网站 | 国产精品99久久久久 | 在线观看av网站 | 超碰人人做 | 久草在线一免费新视频 | 人人爽爽人人 | 91最新国产 | 欧美性天天 | 精一区二区| 国产精品毛片一区 | 蜜臀av性久久久久av蜜臀妖精 | 国产精品ⅴa有声小说 | av日韩在线网站 | 99草在线视频 | 99欧美精品 | 玖玖在线播放 | 婷婷激情影院 | 天天碰天天操视频 | 免费av网站观看 | 亚洲激精日韩激精欧美精品 | 国产精品手机在线观看 | 久久精品99久久久久久2456 | 国产成人久久精品一区二区三区 | 人人爽人人爽人人片av免 | 国产高清无线码2021 | 久久视讯 | 丁香激情综合 | 91丨九色丨国产在线 | 国产精品久久久久999 | 亚洲精品综合一区二区 | 久精品在线 | 国产精品女同一区二区三区久久夜 | 久久国产精品色av免费看 | 正在播放一区二区 | 精品伊人久久久 | 视频在线观看入口黄最新永久免费国产 | 久久国产剧场电影 | 三日本三级少妇三级99 | 亚洲国产欧美一区二区三区丁香婷 | av大全在线观看 | 日日干日日色 | 在线观看国产成人av片 | 在线观看精品一区 | 国产69精品久久app免费版 | 国产电影一区二区三区四区 | 成人动图 | 热久在线 | 亚洲人久久久 | 天天操天天操天天操 | 欧美一级免费片 | 日韩av中文字幕在线免费观看 | 欧美不卡视频在线 | 国产精品一区二区免费在线观看 | 国产精品免费人成网站 | av在线8| 日韩a在线看 | 欧美在线一二区 | 99国产精品免费网站 | 日韩在线观看视频网站 | 国产精品免费麻豆入口 | 国产亚洲婷婷免费 | 在线免费视频一区 | 日韩精品一区二区三区电影 | 国产成人精品免费在线观看 | 一级片免费视频 | 国产精品成人免费 | 免费h在线观看 | 久久在线观看 | 国产xxxx | 9在线观看免费高清完整版在线观看明 | 久久综合色婷婷 | 免费亚洲婷婷 | 99国产精品视频免费观看一公开 | 日韩精品一区二区三区不卡 | 亚洲综合网| 久久成人在线 | 四虎影视www | 欧美va天堂va视频va在线 | 欧美另类色图 | 国产色就色 | 天堂av一区二区 | 日本午夜在线亚洲.国产 | 欧美另类成人 | av免费在线播放 | 在线观看精品国产 | 97成人免费视频 | 三级av片 | 国产精品1000 | 456免费视频 | 国产精品99在线观看 | 中文国产成人精品久久一 | 人人射av | 99精品国产99久久久久久97 | 亚洲国产中文字幕在线观看 | 精品久久久久久久久久久久久久久久久久 | 久久国产乱 | 激情深爱 | 久久成人在线视频 | av先锋影音少妇 | 成年人国产视频 | 中文字幕一区二区三区精华液 | av成人在线播放 | 国产精品美女 | 一本—道久久a久久精品蜜桃 | 免费成人在线电影 | 玖玖色在线观看 | 五月婷婷六月丁香 | 欧美天堂久久 | 成年人免费看av | 亚州精品在线视频 | 美女网站视频色 | av在线网站大全 | 黄色免费高清视频 | 国产精品 亚洲精品 | 91在线视频 | 波多野结衣资源 | av三级av | 国产精品一区二区视频 | 久久在线免费视频 | 国产精品一区二区无线 | 99riav1国产精品视频 | 五月婷婷一级片 | 国产精品一区二区吃奶在线观看 | 久久高清免费视频 | 日韩中文字幕在线看 | av成人黄色 | 日韩欧美高清在线 | 中文字幕免费播放 | 久久人操 | 美女网站色在线观看 | 欧美在线视频第一页 | 欧美日本不卡 | 精品国产一区二区三区噜噜噜 | 免费黄色a网站 | 成人小视频在线观看免费 | 国产午夜精品免费一区二区三区视频 | av免费在线网站 | 在线国产能看的 | 亚洲日本va午夜在线电影 | 黄色软件在线观看免费 | 欧美极品xxx | 超碰在线最新 | 亚洲黄电影 | 超碰.com| 91伊人久久大香线蕉蜜芽人口 | 干天天 | 丁香婷婷综合激情五月色 | 久久久久免费观看 | 国产精品中文 | 日本午夜在线观看 | 黄污视频大全 | 中文一区二区三区在线观看 | 福利一区二区 | 最近中文国产在线视频 | 伊人干综合| www操操操| 激情开心站 | www.色五月.com | 欧美三级在线播放 | 国产精品久久久一区二区 | 久操视频在线播放 | 狠狠色伊人亚洲综合网站色 | 9草在线| 精品在线播放视频 | 亚洲精品在线二区 | av电影免费在线看 | 中文字幕在线观看免费 | 国内精品久久久久国产 | 国产精品日韩久久久久 | 天天艹 | 99r在线精品 | 麻豆一区二区 | 99精品热视频只有精品10 | 久久1电影院 | 亚洲国产精品久久久久婷婷884 | 99热这里只有精品8 久久综合毛片 | 国产在线不卡视频 | 少妇性xxx| 在线天堂8√ | 日韩a在线看 | 久久久久网址 | 一区二区三区视频网站 | 天天看天天干天天操 | 亚洲人成网站精品片在线观看 | 最近中文字幕大全中文字幕免费 | 在线免费观看欧美日韩 | 日韩a在线观看 | 精品婷婷| 国产在线精品二区 | 午夜精品区 | 国产一性一爱一乱一交 | 婷婷国产v亚洲v欧美久久 | 欧美精品乱码久久久久久按摩 | 五月婷婷中文网 | 伊人黄 | av福利在线免费观看 | 91亚洲激情| 中文字幕国语官网在线视频 | 中文字幕免费国产精品 | 久久这里只有精品1 | 久久婷婷综合激情 | 国产一级高清 | 日韩乱码中文字幕 | 日本成址在线观看 | 手机在线中文字幕 | 成人免费视频在线观看 | 超碰97国产精品人人cao | www免费在线观看 | 日本黄区免费视频观看 | 久久黄色网址 | 久久九九免费视频 | 久久污视频 | 极品嫩模被强到高潮呻吟91 | 日本在线成人 | 亚洲高清av | 久久久精品午夜 | 香蕉在线观看视频 | 日狠狠 | 国产一级片一区二区三区 | 国产精品电影一区 | 人人澡人人舔 | 在线观看视频黄 | 亚洲无吗天堂 | 午夜在线国产 | 天天色天天操综合网 | 日韩久久久久久久久久久久 | 在线观看免费中文字幕 | 色综合久久久久综合体 | 国产精品久久久毛片 | 五月天天色 | 福利视频导航网址 | 亚洲激情免费 | 免费人成网| 成人av电影免费在线播放 | 在线免费观看黄色 | 欧美福利久久 | 一级a毛片高清视频 | 亚洲永久国产精品 | 99久免费精品视频在线观看 | 午夜影院一级 | 天天操狠狠操 | 亚洲视频免费视频 | 四虎国产精品免费观看视频优播 | 99精品视频免费看 | 狠狠躁天天躁 | 欧美激情精品一区 | 超碰人人在 | 久草影视在线观看 | 黄色成人av| 天天操天天干天天综合网 | 中文字幕在线观看日本 | 91手机在线看片 | 婷婷成人在线 | 美女黄网站视频免费 | 亚洲aⅴ久久精品 | 天天干,天天干 | 在线亚洲人成电影网站色www | 国产91免费观看 | 在线最新av | 婷婷网址| 欧美一级电影免费观看 | 超碰久热| 激情综合中文娱乐网 | 午夜精品福利一区二区三区蜜桃 | 中文字幕中文字幕中文字幕 | 欧美激情精品久久久久久变态 | 天天在线免费视频 | 91精品久久久久久久91蜜桃 | 欧美精品一二 | 日韩一区在线播放 | 色狠狠一区二区 | 99精品国产一区二区 | 欧美成a人片在线观看久 | 伊人久久婷婷 | 欧美成人中文字幕 | 国产精品区免费视频 | 天天操天天射天天舔 | 三上悠亚在线免费 | 97精品国产91久久久久久久 | 精品免费视频123区 午夜久久成人 | 玖草影院 | 91桃花视频 | 99精品在线免费视频 | 欧美日韩久久不卡 | 久久久国产精品亚洲一区 | 在线观看中文字幕网站 | 国产成人高清av | 亚洲日本中文字幕在线观看 | www.五月天色 | 麻豆系列在线观看 | 91香蕉视频 mp4 | 97精品国产91久久久久久久 | 毛片网站观看 | 麻豆视频网址 | 99精品在线观看视频 | 97色婷婷成人综合在线观看 | 99欧美精品| 国产四虎在线 | 国产91精品看黄网站在线观看动漫 | 91视频久久久久久 | 欧美日韩高清在线 | 97人人模人人爽人人喊中文字 | 午夜美女福利 | 97在线观看 | 亚洲国产精品影院 | 精品国产一区二区三区噜噜噜 | www.午夜 | 一区二区 精品 | 国产成人一区二区三区影院在线 | 国产美女精品视频 | 欧美日韩一区二区免费在线观看 | av色一区 | 日韩综合一区二区三区 | 免费看黄色小说的网站 | 日本精品视频网站 | 国产精品久久片 | 国产护士av | 在线观看黄网站 | 精品9999| 一本之道乱码区 | 日韩高清在线观看 | 91av综合| 99视频在线精品免费观看2 | 国产在线最新 | 69人人| 蜜桃视频日韩 | 婷婷夜夜 | 最新中文字幕在线资源 | 中文字幕在线播放视频 | 开心综合网 | av亚洲产国偷v产偷v自拍小说 | 国产91aaa | 在线观看精品 | 波多野结衣在线视频一区 | 亚洲国产小视频在线观看 | 亚洲黄色小说网 | 91成年视频 | 日本狠狠色 | 国产精品999久久久 久产久精国产品 | 狠狠狠狠狠操 | 青青河边草免费 | 精品国产成人在线 | 麻豆传媒一区二区 | 99久久精品国产亚洲 | 99综合影院在线 | 久久无码精品一区二区三区 | 少妇精69xxtheporn| 国产亚洲综合性久久久影院 | 美腿丝袜一区二区三区 | 日本黄色黄网站 | 中文十次啦 | 丁香激情五月 | 国产亚洲成av人片在线观看桃 | 欧美少妇bbwhd| 久久国产美女 | 久久久久久久精 | 一级做a爱片性色毛片www | 一本一道久久a久久综合蜜桃 | 日本精品视频免费 | 国产美女搞久久 | 亚洲手机天堂 | 国产精品av在线 | 日韩一区二区三免费高清在线观看 | 在线激情影院一区 | 91大片网站| 久久99爱视频 | 免费99视频 | 日本少妇高清做爰视频 | 丝袜美腿在线播放 | 国产91精品看黄网站在线观看动漫 | 一区二区视频网站 | 九九国产视频 | www.99热精品 | 欧美巨大荫蒂茸毛毛人妖 | 日韩1页 | 天天操天天弄 | 日本精品久久久一区二区三区 | 亚洲精品www久久久 www国产精品com | 91成人亚洲 | 福利视频第一页 | 国产中文字幕免费 | japanese黑人亚洲人4k | 五月婷香蕉久色在线看 | 久久久影院一区二区三区 | 92国产精品久久久久首页 | 天天干天天草 | 久久久黄视频 | 天堂v中文| 亚洲精品免费在线视频 | 69国产盗摄一区二区三区五区 | 免费看一级特黄a大片 | 国产精品成人av电影 | av在线日韩 | 91精品视频在线 | 国产91亚洲 | 麻豆久久精品 | 亚洲视频在线视频 | 18做爰免费视频网站 | av中文天堂在线 | 亚洲精品在线免费观看视频 | 欧美日本国产在线观看 | 久久综合桃花 | 美女国产精品 | 在线免费观看av网站 | 国产精品99久久99久久久二8 | 精品自拍sae8—视频 | 精品久久在线 | 一区二区在线影院 | 久久国产精品色av免费看 | 亚洲一区二区精品3399 | 国产喷水在线 | av福利在线看 | 日韩特黄av | 正在播放亚洲精品 | 四虎国产精品永久在线国在线 | 热久久精品在线 | 欧美做受xxx | 日韩欧美高清在线 | 久久久久久久久久久久久影院 | 国产高清一区二区 | 久久久男人的天堂 | 中文字幕在线免费观看 | 91传媒91久久久 | 国产精品一区免费看8c0m | 国产婷婷精品av在线 | 人人射人人澡 | 69国产盗摄一区二区三区五区 | 五月天久久激情 | 亚洲国产日韩精品 | 欧美地下肉体性派对 | 精品99在线 | 91精品在线视频观看 | 久久在线看 | 91亚洲精品久久久久图片蜜桃 | 久久精品爱视频 | 亚洲三级性片 | 国产精品一区在线观看 | 超碰97网站 | 欧美a级片免费看 | 欧美激情视频一区二区三区 | 日本黄色一级电影 | 久久久国产精品成人免费 | 国产在线最新 | av在线中文 | 久久久精品成人 | 色妞久久福利网 | 日韩精品在线视频 | 国产精品在线看 | 性色视频在线 | 超碰在线94| 成人黄色中文字幕 | 超碰人人在 | 日本精品一区二区三区在线播放视频 | 欧美一区二区三区在线播放 | 国产精品久久久久久久午夜片 | 国产综合在线观看视频 | 狠狠操在线 | 久久综合九色综合97婷婷女人 | 午夜精品久久久久久久99 | www夜夜操 | 婷婷国产在线观看 | 国产黄在线免费观看 | 欧美精品日韩 | www.天天操| 国产大尺度视频 | 欧美xxxxx在线视频 | 国产精品久久久久久久久久免费看 | 在线观看一区二区精品 | 日本女人在线观看 | 欧美精品乱码99久久影院 | sm免费xx网站| 国产日产欧美在线观看 | 中文字幕影片免费在线观看 | 五月婷婷中文字幕 | 亚洲六月丁香色婷婷综合久久 | 免费高清在线视频一区· | 伊人精品在线 | 国产精品久久久久三级 | 天天干一干| 999久久久久久久久 69av视频在线观看 | 久久深夜福利免费观看 | 亚洲狠狠操 | 日韩动漫免费观看高清完整版在线观看 | 五月婷婷综合在线观看 | 久久国产精品久久久久 | 国产精品 9999 | 国产99久久久久 | 在线激情网| 免费av片在线 | 国产精品观看在线亚洲人成网 | 天天干,天天干 | 亚洲成人黄 | 99在线观看免费视频精品观看 | 国内一区二区视频 | 91视频高清 | 免费av片在线 | 亚洲 欧美变态 另类 综合 | 狠狠操狠狠干天天操 | 亚洲黄色高清 | 伊人中文网 | 97热视频 | 日韩大片在线看 | 不卡的av中文字幕 | 午夜国产福利在线观看 | 韩国精品在线观看 | 高清不卡一区二区在线 | 亚洲国产成人久久 | 黄色成年 | 天天操天天玩 | 少妇bbbb搡bbbb搡bbbb | 五月婷香蕉久色在线看 | 狠狠的操| 欧美国产高清 | 天天色天天色 | 日韩一级片观看 | 97超碰人人看 | 欧美性大战 | 欧美日韩在线免费观看视频 | 久久草在线精品 | 久草爱| 国产一区高清在线观看 | 久久国产亚洲视频 | 亚洲国产精品女人久久久 | 国产精品一区免费观看 | 97狠狠操| 欧美性色黄 | 婷婷激情欧美 | 午夜精品一区二区国产 | 黄色在线免费观看网址 | 欧美日韩一区二区在线观看 | 麻豆传媒在线视频 | 色天天 | 日日干美女| 欧美日韩免费在线视频 | 久久精品视频在线观看免费 | 97电影院在线观看 | 一本一本久久a久久精品综合小说 | 成人免费在线看片 | 激情欧美xxxx | 天天艹天天爽 | 一本一道波多野毛片中文在线 | 97超碰人人看 | 国产一级二级三级视频 | 国产精品色婷婷 | 国产精品毛片一区二区 | 久久试看 | 国产一区二区三区免费视频 | 综合在线色 | 手机看片中文字幕 | 99re6热在线精品视频 | 又色又爽又黄高潮的免费视频 | 激情小说 五月 | 国产福利a | 成人久久影院 | 亚洲va男人天堂 | 久久久久国产一区二区 | 成年人免费观看国产 | 日韩av电影手机在线观看 | 久久怡红院 | 亚洲精品国偷拍自产在线观看 | 免费看黄在线观看 | 日韩久久久久久 | 欧美成人91 | 亚洲视频在线视频 | 日韩高清精品免费观看 | 成人中文字幕在线观看 | 中文字幕在线观看一区二区三区 | 91久久久久久国产精品 | 亚洲精品乱码久久久久久蜜桃不爽 | 免费看的黄色录像 | 国产精品久久久久久久久久东京 | 国产成人在线精品 | 日日夜夜网站 | 国产中文字幕在线免费观看 | 成人免费av电影 | 69国产精品视频免费观看 | 欧美久久久久久久久久久久久 | 91精品免费在线 | 亚洲欧洲美洲av | 久久久精品一区二区 | 国产成人av电影在线观看 | 日韩在线观看网址 | 亚洲精品在线免费看 | 97国产超碰| 国产日韩精品在线观看 | 亚洲欧洲av在线 | av丝袜天堂 | 免费亚洲精品 | 免费欧美高清视频 | 国产高清专区 | 久久久久久久久久久免费视频 | 天天鲁天天干天天射 | 久久国产一二区 | 99视频网站| 97视频播放| 99在线看 | 亚洲综合一区二区精品导航 | 久久亚洲视频 | 精品亚洲免费 |