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

歡迎訪問 生活随笔!

生活随笔

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

javascript

spring读取properties配置文件_Spring-1

發(fā)布時間:2025/3/12 javascript 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring读取properties配置文件_Spring-1 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
spring共四天 第一天:spring框架的概述以及spring中基于XML的IOC配置 第二天:spring中基于注解的IOC和ioc的案例 第三天:spring中的aop和基于XML以及注解的AOP配置 第四天:spring中的JdbcTemlate以及Spring事務(wù)控制 ----------------------------------------------------- 1、spring的概述spring是什么spring的兩大核心spring的發(fā)展歷程和優(yōu)勢spring體系結(jié)構(gòu) 2、程序的耦合及解耦曾經(jīng)案例中問題工廠模式解耦 3、IOC概念和spring中的IOCspring中基于XML的IOC環(huán)境搭建 4、依賴注入(Dependency Injection)

1 Spring第一天

1.1 程序耦合問題

package com.iteima.jdbc;import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet;/*** 程序的耦合* 耦合:程序間的依賴關(guān)系* 包括:* 類之間的依賴* 方法間的依賴* 解耦:* 降低程序間的依賴關(guān)系* 實際開發(fā)中:* 應(yīng)該做到:編譯期不依賴,運行時才依賴* 解耦的思路:* 第一步:使用反射來創(chuàng)建對象,而避免使用new關(guān)鍵字* 第二步:通過讀取配置文件來獲取要創(chuàng)建的對象全限定類名*/ public class JdbcDemo1 {public static void main(String[] args) throws Exception {//1.注冊驅(qū)動 // DriverManager.registerDriver(new com.mysql.jdbc.Driver());Class.forName("com.mysql.jdbc.Driver");//2.獲取連接Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/eesy", "root", "1234");//3.獲取操作數(shù)據(jù)庫的預(yù)處理對象PreparedStatement pstm = conn.prepareStatement("select * from account");//4.執(zhí)行SQL,得到結(jié)果集ResultSet rs = pstm.executeQuery();//5.遍歷結(jié)果集while(rs.next()) {System.out.println(rs.getString("name"));}//6.釋放資源rs.close();pstm.close();conn.close();} }

1.2 解耦

  • IAccountDao.java;
package com.itheima.dao;/*** 賬戶的持久層接口*/ public interface IAccountDao {/*** 模擬保存賬戶*/void saveAccount(); }
  • AccountDaoImpl.java;
package com.itheima.dao.impl;import com.itheima.dao.IAccountDao;/*** 賬戶的持久層實現(xiàn)類*/ public class AccountDaoImpl implements IAccountDao {public void saveAccount() {System.out.println("保存了賬戶");} }
  • IAccountService.java;
package com.itheima.service;/*** 賬戶業(yè)務(wù)層的接口*/ public interface IAccountService {/*** 模擬保存賬戶*/void saveAccount(); }
  • AccountServiceImpl.java;
package com.itheima.service.impl;import com.itheima.dao.IAccountDao; import com.itheima.factory.BeanFactory; import com.itheima.service.IAccountService;/*** 賬戶的業(yè)務(wù)層實現(xiàn)類*/ public class AccountServiceImpl implements IAccountService { // private IAccountDao accountDao = new AccountDaoImpl();private IAccountDao accountDao = (IAccountDao)BeanFactory.getBean("accountDao"); // private int i = 1;public void saveAccount() {int i = 1;accountDao.saveAccount();System.out.println(i);i++;} }
  • Client.java;
package com.itheima.ui;import com.itheima.factory.BeanFactory; import com.itheima.service.IAccountService;/*** 模擬一個表現(xiàn)層,用于調(diào)用業(yè)務(wù)層*/ public class Client {public static void main(String[] args) {//IAccountService as = new AccountServiceImpl();for(int i = 0; i < 5; i++) {IAccountService as = (IAccountService) BeanFactory.getBean("accountService");System.out.println(as);as.saveAccount();}} }
  • BeanFactory.java;
package com.itheima.factory;import java.io.InputStream; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import java.util.Properties;/*** 一個創(chuàng)建Bean對象的工廠* Bean:在計算機英語中,有可重用組件的含義* JavaBean:用java語言編寫的可重用組件* javabean > 實體類* 它就是創(chuàng)建我們的service和dao對象的* 第一個:需要一個配置文件來配置我們的service和dao* 配置的內(nèi)容:唯一標識=全限定類名(key=value)* 第二個:通過讀取配置文件中配置的內(nèi)容,反射創(chuàng)建對象* 我的配置文件可以是xml也可以是properties*/ public class BeanFactory {//定義一個Properties對象private static Properties props;//定義一個Map,用于存放我們要創(chuàng)建的對象,我們把它稱之為容器private static Map<String, Object> beans;//使用靜態(tài)代碼塊為Properties對象賦值static {try {//實例化對象props = new Properties();//獲取properties文件的流對象InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");props.load(in);//實例化容器beans = new HashMap<String, Object>();//取出配置文件中所有的KeyEnumeration keys = props.keys();//遍歷枚舉while (keys.hasMoreElements()) {//取出每個KeyString key = keys.nextElement().toString();//根據(jù)key獲取valueString beanPath = props.getProperty(key);//反射創(chuàng)建對象Object value = Class.forName(beanPath).newInstance();//把key和value存入容器中beans.put(key, value);}} catch (Exception e) {throw new ExceptionInInitializerError("初始化properties失敗!");}}/*** 根據(jù)bean的名稱獲取對象*/public static Object getBean(String beanName) {return beans.get(beanName);}/*** 根據(jù)Bean的名稱獲取bean對象public static Object getBean(String beanName) {Object bean = null;try {String beanPath = props.getProperty(beanName); // System.out.println(beanPath);bean = Class.forName(beanPath).newInstance();//每次都會調(diào)用默認構(gòu)造函數(shù)創(chuàng)建對象} catch (Exception e) {e.printStackTrace();}return bean;}*/ }
  • Bean.properties;
accountService=com.itheima.service.impl.AccountServiceImpl accountDao=com.itheima.dao.impl.AccountDaoImpl
  • 單例與多例;

1.3 IOC

  • IAccountDao.java;
package com.itheima.dao;/*** 賬戶的持久層接口*/ public interface IAccountDao {/*** 模擬保存賬戶*/void saveAccount(); }
  • AccountDaoImpl.java;
package com.itheima.dao.impl;import com.itheima.dao.IAccountDao;/*** 賬戶的持久層實現(xiàn)類*/ public class AccountDaoImpl implements IAccountDao {public void saveAccount(){System.out.println("保存了賬戶");} }
  • IAccountService.java;
package com.itheima.service;/*** 賬戶業(yè)務(wù)層的接口*/ public interface IAccountService {/*** 模擬保存賬戶*/void saveAccount(); }
  • AccountServiceImpl.java;
package com.itheima.service.impl;import com.itheima.dao.IAccountDao; import com.itheima.service.IAccountService;/*** 賬戶的業(yè)務(wù)層實現(xiàn)類*/ public class AccountServiceImpl implements IAccountService {private IAccountDao accountDao ;public AccountServiceImpl(){System.out.println("對象創(chuàng)建了");}public void saveAccount(){accountDao.saveAccount();} }
  • Client.java;
package com.itheima.ui;import com.itheima.dao.IAccountDao; import com.itheima.service.IAccountService; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;/*** 模擬一個表現(xiàn)層,用于調(diào)用業(yè)務(wù)層*/ public class Client {/*** 獲取spring的Ioc核心容器,并根據(jù)id獲取對象* ApplicationContext的三個常用實現(xiàn)類:* ClassPathXmlApplicationContext:它可以加載類路徑下的配置文件,要求配置文件必須在類路徑下,不在的話,加載不了,(更常用)* FileSystemXmlApplicationContext:它可以加載磁盤任意路徑下的配置文件(必須有訪問權(quán)限)* AnnotationConfigApplicationContext:它是用于讀取注解創(chuàng)建容器的,是明天的內(nèi)容* 核心容器的兩個接口引發(fā)出的問題:* ApplicationContext: 單例對象適用 采用此接口* 它在構(gòu)建核心容器時,創(chuàng)建對象采取的策略是采用立即加載的方式,也就是說,只要一讀取完配置文件馬上就創(chuàng)建配置文件中配置的對象* BeanFactory: 多例對象使用* 它在構(gòu)建核心容器時,創(chuàng)建對象采取的策略是采用延遲加載的方式,也就是說,什么時候根據(jù)id獲取對象了,什么時候才真正的創(chuàng)建對象*/public static void main(String[] args) {//1.獲取核心容器對象ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml"); // ApplicationContext ac = new FileSystemXmlApplicationContext("C:UserszhyDesktopbean.xml");//2.根據(jù)id獲取Bean對象IAccountService as = (IAccountService)ac.getBean("accountService");IAccountDao adao = ac.getBean("accountDao",IAccountDao.class);System.out.println(as);System.out.println(adao);as.saveAccount();//--------BeanFactory---------- // Resource resource = new ClassPathResource("bean.xml"); // BeanFactory factory = new XmlBeanFactory(resource); // IAccountService as = (IAccountService)factory.getBean("accountService"); // System.out.println(as);} }
  • bean.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!--把對象的創(chuàng)建交給spring來管理--><bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"></bean><bean id="accountDao" class="com.itheima.dao.impl.AccountDaoImpl"></bean> </beans>

1.4 Spring三種創(chuàng)建Bean的方式

  • IAccountService.java;
package com.itheima.service;/*** 賬戶業(yè)務(wù)層的接口*/ public interface IAccountService {/*** 模擬保存賬戶*/void saveAccount(); }
  • AccountServiceImpl.java;
package com.itheima.service.impl;import com.itheima.service.IAccountService;/*** 賬戶的業(yè)務(wù)層實現(xiàn)類*/ public class AccountServiceImpl implements IAccountService {public AccountServiceImpl() {System.out.println("對象創(chuàng)建了");}public void saveAccount() {System.out.println("service中的saveAccount方法執(zhí)行了。。。");}public void init() {System.out.println("對象初始化了。。。");}public void destroy() {System.out.println("對象銷毀了。。。");} }
  • StaticFactory.java;
package com.itheima.factory;import com.itheima.service.IAccountService; import com.itheima.service.impl.AccountServiceImpl;/*** 模擬一個工廠類(該類可能是存在于jar包中的,我們無法通過修改源碼的方式來提供默認構(gòu)造函數(shù))*/ public class StaticFactory {public static IAccountService getAccountService() {return new AccountServiceImpl();} }
  • InstanceFactory.java;
package com.itheima.factory;import com.itheima.service.IAccountService; import com.itheima.service.impl.AccountServiceImpl;/*** 模擬一個工廠類(該類可能是存在于jar包中的,我們無法通過修改源碼的方式來提供默認構(gòu)造函數(shù))*/ public class InstanceFactory {public IAccountService getAccountService() {return new AccountServiceImpl();} }
  • Client.java;
package com.itheima.ui;import com.itheima.service.IAccountService; import org.springframework.context.support.ClassPathXmlApplicationContext;/*** 模擬一個表現(xiàn)層,用于調(diào)用業(yè)務(wù)層*/ public class Client {public static void main(String[] args) {//1.獲取核心容器對象 // ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");//2.根據(jù)id獲取Bean對象IAccountService as = (IAccountService)ac.getBean("accountService");as.saveAccount();//手動關(guān)閉容器ac.close();} }
  • bean.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!--把對象的創(chuàng)建交給spring來管理--><!--spring對bean的管理細節(jié)1.創(chuàng)建bean的三種方式2.bean對象的作用范圍3.bean對象的生命周期--><!--創(chuàng)建Bean的三種方式 --><!-- 第一種方式:使用默認構(gòu)造函數(shù)創(chuàng)建。在spring的配置文件中使用bean標簽,配以id和class屬性之后,且沒有其他屬性和標簽時。采用的就是默認構(gòu)造函數(shù)創(chuàng)建bean對象,此時如果類中沒有默認構(gòu)造函數(shù),則對象無法創(chuàng)建。<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"></bean>--><!-- 第二種方式: 使用普通工廠中的方法創(chuàng)建對象(使用某個類中的方法創(chuàng)建對象,并存入spring容器)<bean id="instanceFactory" class="com.itheima.factory.InstanceFactory"></bean><bean id="accountService" factory-bean="instanceFactory" factory-method="getAccountService"></bean>--><!-- 第三種方式:使用工廠中的靜態(tài)方法創(chuàng)建對象(使用某個類中的靜態(tài)方法創(chuàng)建對象,并存入spring容器)<bean id="accountService" class="com.itheima.factory.StaticFactory" factory-method="getAccountService"></bean>--><!-- bean的作用范圍調(diào)整bean標簽的scope屬性:作用:用于指定bean的作用范圍取值:常用的就是單例的和多例的singleton:單例的(默認值)prototype:多例的request:作用于web應(yīng)用的請求范圍session:作用于web應(yīng)用的會話范圍global-session:作用于集群環(huán)境的會話范圍(全局會話范圍),當不是集群環(huán)境時,它就是session<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl" scope="prototype"></bean>--><!-- bean對象的生命周期單例對象出生:當容器創(chuàng)建時對象出生活著:只要容器還在,對象一直活著死亡:容器銷毀,對象消亡總結(jié):單例對象的生命周期和容器相同多例對象出生:當我們使用對象時spring框架為我們創(chuàng)建活著:對象只要是在使用過程中就一直活著。死亡:當對象長時間不用,且沒有別的對象引用時,由Java的垃圾回收器回收--><bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"scope="prototype" init-method="init" destroy-method="destroy"></bean> </beans>

1.5 Spring依賴注入

  • AccountServiceImpl.java;
package com.itheima.service.impl;import com.itheima.service.IAccountService; import java.util.Date;/*** 賬戶的業(yè)務(wù)層實現(xiàn)類*/ public class AccountServiceImpl implements IAccountService {//如果是經(jīng)常變化的數(shù)據(jù),并不適用于注入的方式private String name;private Integer age;private Date birthday;public AccountServiceImpl(String name, Integer age, Date birthday) {this.name = name;this.age = age;this.birthday = birthday;}public void saveAccount() {System.out.println("service中的saveAccount方法執(zhí)行了。。。" + name + "," + age + "," + birthday);} }
  • AccountServiceImpl2.java;
package com.itheima.service.impl;import com.itheima.service.IAccountService; import java.util.Date;/*** 賬戶的業(yè)務(wù)層實現(xiàn)類*/ public class AccountServiceImpl2 implements IAccountService {//如果是經(jīng)常變化的數(shù)據(jù),并不適用于注入的方式private String name;private Integer age;private Date birthday;public void setName(String name) {this.name = name;}public void setAge(Integer age) {this.age = age;}public void setBirthday(Date birthday) {this.birthday = birthday;}public void saveAccount() {System.out.println("service中的saveAccount方法執(zhí)行了。。。" + name + "," + age + "," + birthday);} }
  • AccountServiceImpl3.java;
package com.itheima.service.impl;import com.itheima.service.IAccountService; import java.util.Arrays; import java.util.List; import java.util.Properties; import java.util.Set; import java.util.Map;/*** 賬戶的業(yè)務(wù)層實現(xiàn)類*/ public class AccountServiceImpl3 implements IAccountService {private String[] myStrs;private List<String> myList;private Set<String> mySet;private Map<String, String> myMap;private Properties myProps;public void setMyStrs(String[] myStrs) {this.myStrs = myStrs;}public void setMyList(List<String> myList) {this.myList = myList;}public void setMySet(Set<String> mySet) {this.mySet = mySet;}public void setMyMap(Map<String, String> myMap) {this.myMap = myMap;}public void setMyProps(Properties myProps) {this.myProps = myProps;}public void saveAccount(){System.out.println(Arrays.toString(myStrs));System.out.println(myList);System.out.println(mySet);System.out.println(myMap);System.out.println(myProps);} }
  • IAccountService.java;
package com.itheima.service;/*** 賬戶業(yè)務(wù)層的接口*/ public interface IAccountService {/*** 模擬保存賬戶*/void saveAccount(); }
  • Client.java;
package com.itheima.ui;import com.itheima.service.IAccountService; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;/*** 模擬一個表現(xiàn)層,用于調(diào)用業(yè)務(wù)層*/ public class Client {public static void main(String[] args) {//1.獲取核心容器對象ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");//2.根據(jù)id獲取Bean對象 // IAccountService as = (IAccountService)ac.getBean("accountService"); // as.saveAccount(); // IAccountService as = (IAccountService)ac.getBean("accountService2"); // as.saveAccount();IAccountService as = (IAccountService)ac.getBean("accountService3");as.saveAccount();} }
  • bean.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!-- spring中的依賴注入依賴注入:Dependency InjectionIOC的作用:降低程序間的耦合(依賴關(guān)系)依賴關(guān)系的管理:以后都交給spring來維護在當前類需要用到其他類的對象,由spring為我們提供,我們只需要在配置文件中說明依賴關(guān)系的維護:就稱之為依賴注入依賴注入:能注入的數(shù)據(jù):有三類基本類型和String其他bean類型(在配置文件中或者注解配置過的bean)復(fù)雜類型/集合類型注入的方式:有三種第一種:使用構(gòu)造函數(shù)提供第二種:使用set方法提供第三種:使用注解提供(明天的內(nèi)容)--><!--構(gòu)造函數(shù)注入:使用的標簽:constructor-arg標簽出現(xiàn)的位置:bean標簽的內(nèi)部標簽中的屬性type:用于指定要注入的數(shù)據(jù)的數(shù)據(jù)類型,該數(shù)據(jù)類型也是構(gòu)造函數(shù)中某個或某些參數(shù)的類型index:用于指定要注入的數(shù)據(jù)給構(gòu)造函數(shù)中指定索引位置的參數(shù)賦值。索引的位置是從0開始name:用于指定給構(gòu)造函數(shù)中指定名稱的參數(shù)賦值 常用的=============以上三個用于指定給構(gòu)造函數(shù)中哪個參數(shù)賦值===============================value:用于提供基本類型和String類型的數(shù)據(jù)ref:用于指定其他的bean類型數(shù)據(jù),它指的就是在spring的Ioc核心容器中出現(xiàn)過的bean對象優(yōu)勢:在獲取bean對象時,注入數(shù)據(jù)是必須的操作,否則對象無法創(chuàng)建成功弊端:改變了bean對象的實例化方式,使我們在創(chuàng)建對象時,如果用不到這些數(shù)據(jù),也必須提供--><bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"><constructor-arg name="name" value="泰斯特"></constructor-arg><constructor-arg name="age" value="18"></constructor-arg><constructor-arg name="birthday" ref="now"></constructor-arg></bean><!-- 配置一個日期對象 --><bean id="now" class="java.util.Date"></bean><!-- set方法注入 更常用的方式涉及的標簽:property出現(xiàn)的位置:bean標簽的內(nèi)部標簽的屬性name:用于指定注入時所調(diào)用的set方法名稱value:用于提供基本類型和String類型的數(shù)據(jù)ref:用于指定其他的bean類型數(shù)據(jù)。它指的就是在spring的Ioc核心容器中出現(xiàn)過的bean對象優(yōu)勢:創(chuàng)建對象時沒有明確的限制,可以直接使用默認構(gòu)造函數(shù)弊端:如果有某個成員必須有值,則獲取對象是有可能set方法沒有執(zhí)行--><bean id="accountService2" class="com.itheima.service.impl.AccountServiceImpl2"><property name="name" value="TEST" ></property><property name="age" value="21"></property><property name="birthday" ref="now"></property></bean><!-- 復(fù)雜類型的注入/集合類型的注入用于給List結(jié)構(gòu)集合注入的標簽:list array set用于個Map結(jié)構(gòu)集合注入的標簽:map props結(jié)構(gòu)相同,標簽可以互換--><bean id="accountService3" class="com.itheima.service.impl.AccountServiceImpl3"><property name="myStrs"><set><value>AAA</value><value>BBB</value><value>CCC</value></set></property><property name="myList"><array><value>AAA</value><value>BBB</value><value>CCC</value></array></property><property name="mySet"><list><value>AAA</value><value>BBB</value><value>CCC</value></list></property><property name="myMap"><props><prop key="testC">ccc</prop><prop key="testD">ddd</prop></props></property><property name="myProps"><map><entry key="testA" value="aaa"></entry><entry key="testB"><value>BBB</value></entry></map></property></bean> </beans>spring第二天:spring基于注解的IOC以及IoC的案例 1、spring中ioc的常用注解 2、案例使用xml方式和注解方式實現(xiàn)單表的CRUD操作持久層技術(shù)選擇:dbutils 3、改造基于注解的ioc案例,使用純注解的方式實現(xiàn)spring的一些新注解使用 4、spring和Junit整合

2 第二天

2.1 注解IOC

  • IAccountDao.java;
package com.itheima.dao;/*** 賬戶的持久層接口*/ public interface IAccountDao {/*** 模擬保存賬戶*/void saveAccount(); }
  • AccountDaoImpl.java;
package com.itheima.dao.impl;import com.itheima.dao.IAccountDao; import org.springframework.stereotype.Repository;/*** 賬戶的持久層實現(xiàn)類*/ @Repository("accountDao1") public class AccountDaoImpl implements IAccountDao {public void saveAccount() {System.out.println("保存了賬戶1111111111111");} }
  • AccountDaoImpl2.java;
package com.itheima.dao.impl;import com.itheima.dao.IAccountDao; import org.springframework.stereotype.Repository;/*** 賬戶的持久層實現(xiàn)類*/ @Repository("accountDao2") public class AccountDaoImpl2 implements IAccountDao {public void saveAccount() {System.out.println("保存了賬戶2222222222222");} }
  • IAccountService.java;
package com.itheima.service;/*** 賬戶業(yè)務(wù)層的接口*/ public interface IAccountService {/*** 模擬保存賬戶*/void saveAccount(); }
  • AccountServiceImpl.java;
package com.itheima.service.impl;import com.itheima.dao.IAccountDao; import com.itheima.service.IAccountService; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.annotation.Resource;/*** 賬戶的業(yè)務(wù)層實現(xiàn)類* 曾經(jīng)XML的配置:* <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"* scope="" init-method="" destroy-method="">* <property name="" value="" | ref=""></property>* </bean>** 用于創(chuàng)建對象的* 他們的作用就和在XML配置文件中編寫一個<bean>標簽實現(xiàn)的功能是一樣的* Component:* 作用:用于把當前類對象存入spring容器中* 屬性:* value:用于指定bean的id,當我們不寫時,它的默認值是當前類名,且首字母改小寫* Controller:一般用在表現(xiàn)層* Service:一般用在業(yè)務(wù)層* Repository:一般用在持久層* 以上三個注解他們的作用和屬性與Component是一模一樣* 他們?nèi)齻€是spring框架為我們提供明確的三層使用的注解,使我們的三層對象更加清晰** 用于注入數(shù)據(jù)的* 他們的作用就和在xml配置文件中的bean標簽中寫一個<property>標簽的作用是一樣的* Autowired:* 作用:自動按照類型注入。只要容器中有唯一的一個bean對象類型和要注入的變量類型匹配,就可以注入成功* 如果ioc容器中沒有任何bean的類型和要注入的變量類型匹配,則報錯* 如果Ioc容器中有多個類型匹配時:* 出現(xiàn)位置:* 可以是變量上,也可以是方法上* 細節(jié):* 在使用注解注入時,set方法就不是必須的了* Qualifier:* 作用:在按照類中注入的基礎(chǔ)之上再按照名稱注入,它在給類成員注入時不能單獨使用。但是在給方法參數(shù)注入時可以(稍后我們講)* 屬性:* value:用于指定注入bean的id* Resource* 作用:直接按照bean的id注入,它可以獨立使用* 屬性:* name:用于指定bean的id* 以上三個注入都只能注入其他bean類型的數(shù)據(jù),而基本類型和String類型無法使用上述注解實現(xiàn)* 另外,集合類型的注入只能通過XML來實現(xiàn)** Value* 作用:用于注入基本類型和String類型的數(shù)據(jù)* 屬性:* value:用于指定數(shù)據(jù)的值,它可以使用spring中SpEL(也就是spring的el表達式)* SpEL的寫法:${表達式}** 用于改變作用范圍的* 他們的作用就和在bean標簽中使用scope屬性實現(xiàn)的功能是一樣的* Scope* 作用:用于指定bean的作用范圍* 屬性:* value:指定范圍的取值,常用取值:singleton prototype** 和生命周期相關(guān) 了解* 他們的作用就和在bean標簽中使用init-method和destroy-methode的作用是一樣的* PreDestroy* 作用:用于指定銷毀方法* PostConstruct* 作用:用于指定初始化方法*/ @Service("accountService") //@Scope("prototype") public class AccountServiceImpl implements IAccountService {// @Autowired // @Qualifier("accountDao1")@Resource(name = "accountDao2")private IAccountDao accountDao = null;@PostConstructpublic void init() {System.out.println("初始化方法執(zhí)行了");}@PreDestroypublic void destroy() {System.out.println("銷毀方法執(zhí)行了");}public void saveAccount() {accountDao.saveAccount();} }
  • bean.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:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!--告知spring在創(chuàng)建容器時要掃描的包,配置所需要的標簽不是在beans的約束中,而是一個名稱為context名稱空間和約束中--><context:component-scan base-package="com.itheima"></context:component-scan> </beans>

2.2 基于XML的IOC案例

  • Account.java;
package com.itheima.domain;import java.io.Serializable;/*** 賬戶的實體類*/ public class Account implements Serializable {private Integer id;private String name;private Float money;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Float getMoney() {return money;}public void setMoney(Float money) {this.money = money;}@Overridepublic String toString() {return "Account{" +"id=" + id +", name='" + name + ''' +", money=" + money +'}';} }
  • IAccountDao.java;
package com.itheima.dao;import com.itheima.domain.Account; import java.util.List;/*** 賬戶的持久層接口*/ public interface IAccountDao {List<Account> findAllAccount();Account findAccountById(Integer accountId);void saveAccount(Account account);void updateAccount(Account account);void deleteAccount(Integer acccountId); }
  • AccountDaoImpl.java;
package com.itheima.dao.impl;import com.itheima.dao.IAccountDao; import com.itheima.domain.Account; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import java.util.List;/*** 賬戶的持久層實現(xiàn)類*/ public class AccountDaoImpl implements IAccountDao {private QueryRunner runner;public void setRunner(QueryRunner runner) {this.runner = runner;}@Overridepublic List<Account> findAllAccount() {try{return runner.query("select * from account", new BeanListHandler<Account>(Account.class));}catch (Exception e) {throw new RuntimeException(e);}}@Overridepublic Account findAccountById(Integer accountId) {try{return runner.query("select * from account where id = ? ", new BeanHandler<Account>(Account.class),accountId);}catch (Exception e) {throw new RuntimeException(e);}}@Overridepublic void saveAccount(Account account) {try{runner.update("insert into account(name,money)values(?,?)", account.getName(), account.getMoney());}catch (Exception e) {throw new RuntimeException(e);}}@Overridepublic void updateAccount(Account account) {try{runner.update("update account set name=?,money=? where id=?", account.getName(), account.getMoney(), account.getId());}catch (Exception e) {throw new RuntimeException(e);}}@Overridepublic void deleteAccount(Integer accountId) {try{runner.update("delete from account where id=?", accountId);}catch (Exception e) {throw new RuntimeException(e);}} }
  • IAccountService.java;
package com.itheima.service;import com.itheima.domain.Account; import java.util.List;/*** 賬戶的業(yè)務(wù)層接口*/ public interface IAccountService {List<Account> findAllAccount();Account findAccountById(Integer accountId);void saveAccount(Account account);void updateAccount(Account account);void deleteAccount(Integer acccountId); }
  • AccountServiceImpl.java;
package com.itheima.service.impl;import com.itheima.dao.IAccountDao; import com.itheima.domain.Account; import com.itheima.service.IAccountService; import java.util.List;/*** 賬戶的業(yè)務(wù)層實現(xiàn)類*/ public class AccountServiceImpl implements IAccountService{private IAccountDao accountDao;public void setAccountDao(IAccountDao accountDao) {this.accountDao = accountDao;}@Overridepublic List<Account> findAllAccount() {return accountDao.findAllAccount();}@Overridepublic Account findAccountById(Integer accountId) {return accountDao.findAccountById(accountId);}@Overridepublic void saveAccount(Account account) {accountDao.saveAccount(account);}@Overridepublic void updateAccount(Account account) {accountDao.updateAccount(account);}@Overridepublic void deleteAccount(Integer acccountId) {accountDao.deleteAccount(acccountId);} }
  • bean.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 配置Service --><bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"><!-- 注入dao --><property name="accountDao" ref="accountDao"></property></bean><!--配置Dao對象--><bean id="accountDao" class="com.itheima.dao.impl.AccountDaoImpl"><!-- 注入QueryRunner --><property name="runner" ref="runner"></property></bean><!--配置QueryRunner--><bean id="runner" class="org.apache.commons.dbutils.QueryRunner" scope="prototype"><!--注入數(shù)據(jù)源--><constructor-arg name="ds" ref="dataSource"></constructor-arg></bean><!-- 配置數(shù)據(jù)源 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><!--連接數(shù)據(jù)庫的必備信息--><property name="driverClass" value="com.mysql.jdbc.Driver"></property><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/eesy"></property><property name="user" value="root"></property><property name="password" value="1234"></property></bean> </beans>
  • AccountServiceTest.java;
package com.itheima.test;import com.itheima.domain.Account; import com.itheima.service.IAccountService; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import java.util.List;/*** 使用Junit單元測試:測試我們的配置*/ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:bean.xml") public class AccountServiceTest {@Autowiredprivate IAccountService as;@Testpublic void testFindAll() {//3.執(zhí)行方法List<Account> accounts = as.findAllAccount();for(Account account : accounts) {System.out.println(account);}}@Testpublic void testFindOne() {//3.執(zhí)行方法Account account = as.findAccountById(1);System.out.println(account);}@Testpublic void testSave() {Account account = new Account();account.setName("test");account.setMoney(12345f);//3.執(zhí)行方法as.saveAccount(account);}@Testpublic void testUpdate() {//3.執(zhí)行方法Account account = as.findAccountById(4);account.setMoney(23456f);as.updateAccount(account);}@Testpublic void testDelete() {//3.執(zhí)行方法as.deleteAccount(4);} }

2.3 基于注解的IOC

  • Account.java;
package com.itheima.domain;import java.io.Serializable;/*** 賬戶的實體類*/ public class Account implements Serializable {private Integer id;private String name;private Float money;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Float getMoney() {return money;}public void setMoney(Float money) {this.money = money;}@Overridepublic String toString() {return "Account{" +"id=" + id +", name='" + name + ''' +", money=" + money +'}';} }
  • IAccountDao.java;
package com.itheima.dao;import com.itheima.domain.Account; import java.util.List;/*** 賬戶的持久層接口*/ public interface IAccountDao {List<Account> findAllAccount();Account findAccountById(Integer accountId);void saveAccount(Account account);void updateAccount(Account account);void deleteAccount(Integer acccountId); }
  • AccountDaoImpl.java;
package com.itheima.dao.impl;import com.itheima.dao.IAccountDao; import com.itheima.domain.Account; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import java.util.List;/*** 賬戶的持久層實現(xiàn)類*/ @Repository("accountDao") public class AccountDaoImpl implements IAccountDao {@Autowiredprivate QueryRunner runner;@Overridepublic List<Account> findAllAccount() {try{return runner.query("select * from account", new BeanListHandler<Account>(Account.class));}catch (Exception e) {throw new RuntimeException(e);}}@Overridepublic Account findAccountById(Integer accountId) {try{return runner.query("select * from account where id = ? ", new BeanHandler<Account>(Account.class), accountId);}catch (Exception e) {throw new RuntimeException(e);}}@Overridepublic void saveAccount(Account account) {try{runner.update("insert into account(name,money)values(?,?)", account.getName(), account.getMoney());}catch (Exception e) {throw new RuntimeException(e);}}@Overridepublic void updateAccount(Account account) {try{runner.update("update account set name=?,money=? where id=?", account.getName(), account.getMoney(), account.getId());}catch (Exception e) {throw new RuntimeException(e);}}@Overridepublic void deleteAccount(Integer accountId) {try{runner.update("delete from account where id=?", accountId);}catch (Exception e) {throw new RuntimeException(e);}} }
  • IAccountService.java;
package com.itheima.service;import com.itheima.domain.Account; import java.util.List;/*** 賬戶的業(yè)務(wù)層接口*/ public interface IAccountService {List<Account> findAllAccount();Account findAccountById(Integer accountId);void saveAccount(Account account);void updateAccount(Account account);void deleteAccount(Integer acccountId); }
  • AccountServiceImpl.java;
package com.itheima.service.impl;import com.itheima.dao.IAccountDao; import com.itheima.domain.Account; import com.itheima.service.IAccountService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List;/*** 賬戶的業(yè)務(wù)層實現(xiàn)類*/ @Service("accountService") public class AccountServiceImpl implements IAccountService {@Autowiredprivate IAccountDao accountDao;@Overridepublic List<Account> findAllAccount() {return accountDao.findAllAccount();}@Overridepublic Account findAccountById(Integer accountId) {return accountDao.findAccountById(accountId);}@Overridepublic void saveAccount(Account account) {accountDao.saveAccount(account);}@Overridepublic void updateAccount(Account account) {accountDao.updateAccount(account);}@Overridepublic void deleteAccount(Integer acccountId) {accountDao.deleteAccount(acccountId);} }
  • bean.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:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 告知spring在創(chuàng)建容器時要掃描的包 --><context:component-scan base-package="com.itheima"></context:component-scan><!--配置QueryRunner--><bean id="runner" class="org.apache.commons.dbutils.QueryRunner" scope="prototype"><!--注入數(shù)據(jù)源--><constructor-arg name="ds" ref="dataSource"></constructor-arg></bean><!-- 配置數(shù)據(jù)源 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><!--連接數(shù)據(jù)庫的必備信息--><property name="driverClass" value="com.mysql.jdbc.Driver"></property><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/eesy"></property><property name="user" value="root"></property><property name="password" value="1234"></property></bean> </beans>
  • AccountServiceTest.java;
package com.itheima.test;import com.itheima.domain.Account; import com.itheima.service.IAccountService; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import java.util.List;/*** 使用Junit單元測試:測試我們的配置*/ public class AccountServiceTest {@Testpublic void testFindAll() {//1.獲取容器ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");//2.得到業(yè)務(wù)層對象IAccountService as = ac.getBean("accountService", IAccountService.class);//3.執(zhí)行方法List<Account> accounts = as.findAllAccount();for(Account account : accounts){System.out.println(account);}}@Testpublic void testFindOne() {//1.獲取容器ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");//2.得到業(yè)務(wù)層對象IAccountService as = ac.getBean("accountService", IAccountService.class);//3.執(zhí)行方法Account account = as.findAccountById(1);System.out.println(account);}@Testpublic void testSave() {Account account = new Account();account.setName("test");account.setMoney(12345f);//1.獲取容器ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");//2.得到業(yè)務(wù)層對象IAccountService as = ac.getBean("accountService", IAccountService.class);//3.執(zhí)行方法as.saveAccount(account);}@Testpublic void testUpdate() {//1.獲取容器ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");//2.得到業(yè)務(wù)層對象IAccountService as = ac.getBean("accountService", IAccountService.class);//3.執(zhí)行方法Account account = as.findAccountById(4);account.setMoney(23456f);as.updateAccount(account);}@Testpublic void testDelete() {//1.獲取容器ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");//2.得到業(yè)務(wù)層對象IAccountService as = ac.getBean("accountService", IAccountService.class);//3.執(zhí)行方法as.deleteAccount(4);} }

參考

Spring教程IDEA版-4天-2018黑馬SSM-02_嗶哩嗶哩 (゜-゜)つロ 干杯~-bilibili?www.bilibili.com

總結(jié)

以上是生活随笔為你收集整理的spring读取properties配置文件_Spring-1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

天天干天天干天天色 | 97香蕉久久超级碰碰高清版 | 国产 日韩 在线 亚洲 字幕 中文 | 99这里有精品 | 午夜av在线免费 | 亚洲最大av网 | 久久精品久久久精品美女 | 免费观看一级特黄欧美大片 | www视频在线免费观看 | 国内精品一区二区 | 欧美一级视频一区 | 999久久久免费视频 午夜国产在线观看 | www.伊人色.com | 在线观看日韩国产 | 中文字幕91视频 | 最近中文字幕高清字幕在线视频 | 久久综合久久久 | 精品美女久久久久 | 美腿丝袜一区二区三区 | 九色精品免费永久在线 | 一区二区伦理电影 | 亚洲免费在线视频 | av软件在线观看 | av在线短片 | 天天综合精品 | 日韩最新中文字幕 | 在线免费观看视频你懂的 | 中文高清av | 国产一区二区三区免费观看视频 | 区一区二区三在线观看 | 国产精品美女久久久久久免费 | 最新日韩视频在线观看 | 久久久久成人精品 | 亚洲精品美女久久久久 | 亚洲精品国 | 高清国产一区 | 亚洲狠狠 | 四虎在线免费观看 | 丝袜制服综合网 | 亚洲午夜精品在线观看 | 国产亚洲午夜高清国产拍精品 | 免费在线观看一级片 | www五月天婷婷 | 伊人中文网 | 青青五月天 | 欧美日韩一区二区免费在线观看 | 在线观看国产www | av激情五月 | 亚洲精品黄 | 在线91色 | 精品在线免费视频 | 免费观看一级视频 | 国产精品6999成人免费视频 | 日韩电影在线观看中文字幕 | 久久理伦片 | 成人av亚洲 | 天天插天天干天天操 | 香蕉影视在线观看 | 国产精品99爱 | 91精品麻豆 | 精品电影一区 | 97香蕉久久超级碰碰高清版 | 中文字幕免费播放 | 精品亚洲男同gayvideo网站 | 亚洲精品视频在线免费播放 | 欧美久草在线 | 五月激情亚洲 | 国产免费观看高清完整版 | 1区2区视频| 国产精品美女免费看 | 亚洲成av人影片在线观看 | 奇米影视8888在线观看大全免费 | 色噜噜在线观看视频 | 久久精品综合网 | 91在线视频一区 | 色狠狠婷婷 | 国产伦理一区二区 | 天天射天天干天天爽 | 久草网站在线观看 | 日韩亚洲国产精品 | 超碰在线色 | 日韩天堂网 | 成人动漫精品一区二区 | wwwwwww黄 | avove黑丝 | 亚洲激情小视频 | 欧美日韩视频观看 | 又爽又黄又刺激的视频 | 欧美性网站 | 精品欧美一区二区在线观看 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 日本不卡一区二区三区在线观看 | 97在线观视频免费观看 | 五月天九九 | 人人澡人人爱 | 69视频国产| 精品久久网| 欧美巨大荫蒂茸毛毛人妖 | 欧美成人a在线 | 日韩在线理论 | 日韩h在线观看 | 欧美激情视频久久 | 热re99久久精品国产99热 | 三级小视频在线观看 | 天天搞天天干天天色 | 国产一级大片免费看 | 91久久国产自产拍夜夜嗨 | 欧美日韩国产在线 | 免费观看完整版无人区 | 男女视频国产 | 成人亚洲网| 黄色成人影院 | 日韩中文字幕视频在线观看 | 免费视频资源 | 精品视频免费 | 在线观看国产成人av片 | 天天射天天干 | 国产 日韩 欧美 自拍 | 亚洲日本中文字幕在线观看 | 午夜精品久久久久久久99婷婷 | 狠狠色丁香婷婷综合橹88 | 白丝av免费观看 | 中文在线字幕免 | 免费亚洲婷婷 | 欧美日韩免费观看一区=区三区 | 在线免费黄色毛片 | 免费在线黄色av | 日韩欧美高清一区二区 | 久久久精品日本 | 亚洲精品在线观 | 日本中文字幕网址 | 免费在线观看视频一区 | 欧美色888 | 在线直播av | 日韩在线观看av | 啪啪av在线| 最新中文字幕视频 | 丁香婷婷在线 | 成年性视频 | 激情小说网站亚洲综合网 | www.99久久.com | av夜夜操| 日韩成人精品 | 99国产视频| 深夜男人影院 | 国产在线探花 | 美女黄频免费 | 久久久久久国产精品亚洲78 | 麻豆果冻剧传媒在线播放 | av日韩国产 | 天天爱天天射 | 精品三级av| 五月婷婷在线视频观看 | 天天天综合网 | 草久在线视频 | 黄色av一区| 五月天亚洲精品 | 在线观看视频免费大全 | 中文字幕在线播放第一页 | 六月天综合网 | 免费黄色小网站 | 国产精品av免费在线观看 | 精品999 | 亚洲 精品在线视频 | 日本精品视频一区 | 在线观看小视频 | 中文字幕免费一区 | 国产高清在线观看 | 夜夜天天干| 在线观看黄av | 亚洲精品免费观看视频 | 久久精品国产亚洲精品2020 | 全黄色一级片 | av高清不卡 | 亚洲欧美视频 | 一区二区三区免费在线播放 | 人人澡人人干 | 国产精品久久久免费 | 91视频这里只有精品 | 亚洲精品国产视频 | 天天干天天拍天天操 | 色婷五月天| 青草视频网 | 国产精品视频在线观看 | 免费99精品国产自在在线 | 久久综合精品国产一区二区三区 | 久久福利剧场 | 欧美日韩国产精品一区二区 | 日韩久久精品一区 | 国产一区二区观看 | 97视频在线播放 | 搡bbbb搡bbb视频 | 丰满少妇高潮在线观看 | 男女视频久久久 | 欧美日韩不卡在线 | 911久久香蕉国产线看观看 | 高清精品在线 | 探花系列在线 | 狠狠操精品| 久久久久久久久久久久久久av | 久久最新视频 | 国产成年人av | 91喷水| 日韩免费在线观看 | 亚洲精品欧美专区 | 欧亚久久 | 在线观看视频黄色 | 欧美一区日韩精品 | 99精品视频网站 | 久久99婷婷| 国产精品18毛片一区二区 | 久久精品3 | 免费视频久久久久久久 | 中文字幕在线一区观看 | 免费能看的av | 国产精品久久久久久久av大片 | 国产免费av一区二区三区 | 久久免费视频7 | 国产一区二区电影在线观看 | 99精品国产99久久久久久97 | 国产精品激情 | 亚洲精品在线视频观看 | 欧美成年网站 | 中文字幕在线色 | 亚洲免费精品一区二区 | 久久一区二区三区日韩 | 日日夜夜天天射 | www.神马久久| 美女精品久久久 | 天天射色综合 | 97超碰在线资源 | 午夜三级影院 | 天天操夜夜想 | 欧美日韩一区二区三区免费视频 | 亚洲欧美精品在线 | 色射爱| 久久伦理电影 | 日本中文字幕免费观看 | 狠狠狠色丁香综合久久天下网 | 久久久久久久久久久久电影 | 婷婷色网视频在线播放 | 五月天丁香 | 亚洲天天在线日亚洲洲精 | 天堂成人在线 | 国产日韩欧美在线观看视频 | 在线观看免费av网站 | 日韩免费看片 | 国产热re99久久6国产精品 | 人人插人人做 | 久久人人插 | 能在线观看的日韩av | .国产精品成人自产拍在线观看6 | 国产美女网站视频 | 91在线精品视频 | 精品在线99 | 狠狠干天天操 | 免费在线播放黄色 | 天天综合久久综合 | 亚洲最大激情中文字幕 | 亚洲三级精品 | 日韩动漫免费观看高清完整版在线观看 | 国产二区视频在线观看 | 久久精品日韩 | 婷婷在线播放 | 一区二区久久久久 | 成人午夜影院在线观看 | 欧美日韩高清一区二区三区 | 国产精品免费观看网站 | 免费观看黄 | 国产精品免费一区二区 | av在线播放国产 | av福利资源 | 日本夜夜草视频网站 | 欧美 日韩 性 | 欧美日韩高清在线 | 2019av在线视频| 国产精品免费看久久久8精臀av | 欧美日韩国产精品一区二区三区 | 国产精品久久99精品毛片三a | 在线观看黄色小视频 | 日本中文乱码卡一卡二新区 | www.五月婷 | 国产不卡在线观看视频 | 99免费视频 | 99精品国产视频 | 午夜精品福利在线 | 国产免费三级在线观看 | 成人黄大片 | 中文字幕影视 | 97激情影院 | 日韩成人免费在线 | 日本狠狠干 | 国产成人一区二区精品非洲 | 美女久久久久 | 在线一区电影 | 亚洲国产精品久久久久婷婷884 | 免费视频 三区 | 日韩天堂在线观看 | 在线观看亚洲国产精品 | 欧美性大战 | 国产精品久久久久一区二区三区共 | 国产高清视频网 | 免费h精品视频在线播放 | 欧美日韩午夜在线 | 中文字幕亚洲不卡 | 黄色视屏免费在线观看 | 日日夜夜草 | 久久看片网 | 亚洲一级黄色片 | 国产精品免费久久久 | 98福利在线| 色视频网站免费观看 | 麻豆久久精品 | 免费亚洲成人 | 欧美日韩在线电影 | 国产欧美在线一区 | 韩国一区二区av | 九九热中文字幕 | 国产精品久久久久一区二区国产 | 中文区中文字幕免费看 | 亚洲经典中文字幕 | 人人澡av| 日韩av电影中文字幕在线观看 | 在线亚洲人成电影网站色www | 97免费公开视频 | 国产丝袜高跟 | 一本一道久久a久久综合蜜桃 | 免费观看av网站 | 亚洲在线视频免费 | 九九99 | 中文字幕av免费在线观看 | 亚洲在线精品 | 国产精品区一区 | 91久久人澡人人添人人爽欧美 | 亚洲精品www久久久 www国产精品com | 久久三级毛片 | 欧洲精品码一区二区三区免费看 | 成人av网站在线 | 国产成人三级一区二区在线观看一 | 国产亚洲精品久久久久秋 | 天天操天天爱天天爽 | 亚洲精品99久久久久中文字幕 | 黄色a级片在线观看 | 91精品免费 | 日韩一级成人av | 91精品中文字幕 | av看片在线 | 欧美国产日韩一区二区三区 | 久久综合狠狠综合久久狠狠色综合 | 香蕉蜜桃视频 | 麻豆影视网站 | 成人超碰在线 | 国产日韩精品一区二区三区 | 国产高清一级 | 亚洲精品在线国产 | 色综合天天色 | 国产精品99久久久久的智能播放 | 在线免费观看国产视频 | 国产不卡精品 | 久草男人天堂 | 日韩综合第一页 | 91麻豆操| 久草在线视频资源 | 亚洲精品国精品久久99热 | 91pony九色丨交换 | 又湿又紧又大又爽a视频国产 | 成人黄色毛片视频 | 91精品国产91久久久久久三级 | 日本中文字幕网 | 成人av资源 | 亚洲毛片一区二区三区 | 国产 日韩 在线 亚洲 字幕 中文 | 成人一区二区三区在线 | 免费av影视 | 九色在线 | 人人人爽 | 日日草天天草 | 999免费视频 | 六月久久婷婷 | 最近更新中文字幕 | 久操久 | 午夜久久影视 | 久久老司机精品视频 | 91污在线 | 韩国一区二区三区在线观看 | 国产一级二级在线观看 | 欧美黄色特级片 | 黄色特一级片 | 天天曰天天射 | 胖bbbb搡bbbb擦bbbb| 精品美女久久久久久免费 | 手机在线黄色网址 | 不卡中文字幕在线 | 亚洲精品国产视频 | 天天色天天操综合 | 国产一区免费 | 国产精品色视频 | 国内外成人免费在线视频 | 久热色超碰 | 蜜臀久久99精品久久久无需会员 | 激情网在线视频 | 免费亚洲一区二区 | 亚洲精品一区中文字幕乱码 | 一区av在线播放 | 国产成人精品日本亚洲999 | 精品一区二区三区电影 | 国产麻豆视频在线观看 | 久久蜜臀av | 日韩欧美视频在线 | 在线直播av | 日韩电影在线一区 | 亚洲国内精品视频 | 97人人澡人人添人人爽超碰 | 精品在线视频播放 | 亚洲欧美视屏 | 久久人人爽人人爽 | 国产在线精品国自产拍影院 | 国产精品久久久影视 | 国产二级视频 | free,性欧美 九九交易行官网 | 精品国产乱码久久久久久天美 | 久草精品视频在线观看 | 91成人免费在线视频 | 欧美精品久久久久久久 | 欧美精品午夜 | 国产在线不卡 | 99久久精品无免国产免费 | 美女黄色网在线播放 | 久久99热这里只有精品国产 | 麻豆免费在线播放 | 99热最新在线 | 玖玖玖影院 | 国产蜜臀av | 麻豆一二三精选视频 | 欧美福利久久 | 久久精品视频免费观看 | 天天舔天天搞 | 国产不卡av在线 | 免费看的国产视频网站 | 国产免费区 | 最新国产精品拍自在线播放 | 91看片在线播放 | 天天天天色综合 | 黄色软件大全网站 | www.夜色321.com | 久草在线久草在线2 | 久久久久国产一区二区 | 在线小视频 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 激情久久综合网 | 国产一级片免费播放 | 久久午夜国产精品 | 天天干,天天射,天天操,天天摸 | 成人在线视频在线观看 | 中文字幕在线不卡国产视频 | 欧美极品少妇xbxb性爽爽视频 | 成人a大片 | 天天操夜夜操夜夜操 | 成人性生爱a∨ | 免费观看9x视频网站在线观看 | 色狠狠一区二区 | 丁香婷婷色综合亚洲电影 | 狠狠插天天干 | 久久久免费高清视频 | 日韩黄色免费电影 | 又粗又长又大又爽又黄少妇毛片 | 激情丁香在线 | 亚洲乱亚洲乱亚洲 | 免费观看久久 | 三级视频片 | 麻豆视频免费入口 | 国产福利一区二区在线 | h视频日本 | 在线你懂| 99热最新精品 | 园产精品久久久久久久7电影 | 婷婷免费视频 | 色婷婷天天干 | 3d黄动漫免费看 | 国产精品中文久久久久久久 | 国内精品在线观看视频 | 日韩在线视频二区 | 日日干夜夜干 | 十八岁免进欧美 | 国产高清福利在线 | 国产一区二区高清不卡 | 中文字幕在线免费观看视频 | 久久免费在线视频 | 日本在线视频一区二区三区 | 92精品国产成人观看免费 | 久久夜夜夜 | 久久高清免费视频 | 最新av中文字幕 | 欧美一区二区在线免费看 | 欧美视频日韩 | 亚洲天堂社区 | 国产精品综合久久久久久 | 黄色毛片大全 | 91精品视频免费在线观看 | 蜜臀av夜夜澡人人爽人人桃色 | 天天射天天干天天爽 | 国产一区欧美一区 | 国产日韩中文字幕在线 | 日韩免费视频线观看 | 黄色毛片一级 | 欧美性免费| 欧美吞精| 色偷偷88888欧美精品久久 | 女人18毛片a级毛片一区二区 | 久久婷婷丁香 | 国产精品99视频 | 伊人国产女 | 婷婷久久国产 | 亚洲高清网站 | 国模精品一区二区三区 | 91看片成人 | 亚洲精品女人 | 国色天香在线 | 蜜臀av夜夜澡人人爽人人 | 黄色大片视频网站 | 视频在线观看日韩 | 亚洲 欧洲 国产 日本 综合 | 91最新国产 | 久久精品99国产精品 | 国产中文字幕一区二区三区 | 天天射天天艹 | 欧美 激情在线 | 国产福利网站 | 欧美一区二区三区免费观看 | av免费网| 最近日本字幕mv免费观看在线 | 综合久久精品 | www.久久免费视频 | 日本二区三区在线 | 99精品视频播放 | 亚洲经典在线 | 99久久久国产免费 | 天堂av免费在线 | 91精品免费在线观看 | 婷婷六月在线 | 国产日韩精品一区二区三区 | 最新av网站在线观看 | 日韩videos| 有码视频在线观看 | 日韩黄色免费看 | 少妇高潮冒白浆 | 日本在线观看黄色 | 久久深夜福利免费观看 | 欧美日韩国产区 | 色偷偷97 | 爱色婷婷 | 欧美视频18 | 亚洲精品美女在线观看播放 | 9999国产精品 | 在线观看免费观看在线91 | 日韩视频一区二区三区在线播放免费观看 | 日韩色综合网 | 在线观看国产永久免费视频 | 欧美日本高清视频 | 中文字幕国产视频 | av一区二区在线观看中文字幕 | 国产专区视频在线 | 九九热免费精品视频 | 欧美日韩不卡在线视频 | 久久久高清视频 | 欧美动漫一区二区三区 | 国产一二三四在线视频 | 探花视频在线观看免费版 | 日日爱网站| 久久99久久99精品免视看婷婷 | 国产精久久久 | 国产日韩中文字幕在线 | 在线三级av | av中文在线播放 | 欧洲视频一区 | 国产精品伦一区二区三区视频 | 免费在线成人av电影 | 蜜桃视频日韩 | 成人av在线网 | 欧美色图亚洲图片 | 中文字幕一区二区三区久久 | 人人爽人人做 | 亚洲精品欧美专区 | 国内精品久久久久久中文字幕 | 99久久99精品 | 日韩极品视频在线观看 | av免费试看 | 美女搞黄国产视频网站 | 亚洲精选视频免费看 | 日韩免费在线观看 | 伊人影院99| 婷婷丁香激情 | 91福利视频网站 | 国产高清中文字幕 | 四虎海外影库www4hu | 亚洲va韩国va欧美va精四季 | 最新午夜电影 | 国产乱码精品一区二区三区介绍 | 欧美精品在线观看免费 | av在线播放不卡 | 久久久天天操 | 免费特级黄毛片 | 久久天堂影院 | 精品视频资源站 | 国产精品毛片一区二区 | 成人小视频在线免费观看 | 超碰在线人人97 | 国产美女视频一区 | 免费观看成年人视频 | 天堂av免费在线 | 欧美 激情 国产 91 在线 | av片子在线观看 | 999久久国精品免费观看网站 | 成人在线网站观看 | 国产午夜精品一区 | 色姑娘综合天天 | 欧美精品久久久久久久久久 | 一区二区视频在线播放 | 国产成人久久精品一区二区三区 | 在线观看国产成人av片 | 亚洲人人精品 | 亚洲精品国产精品乱码不99热 | 国产69精品久久久久9999apgf | 日韩一区二区三免费高清在线观看 | 天天操网站 | 高清av网 | 日韩区在线观看 | 久久99热这里只有精品国产 | 久久免费视频3 | 91精品在线观看入口 | 久久电影国产免费久久电影 | 欧美日韩国产二区三区 | 91成人免费电影 | 成人一级免费电影 | 久久影院精品 | 不卡精品视频 | 日韩在线免费高清视频 | 久久这里精品视频 | 亚洲欧洲久久久 | 成人av高清在线 | 国产日韩精品在线观看 | 久久影院精品 | 在线一区av | 成人免费在线视频观看 | 国产成人精品久久二区二区 | 丁香六月综合网 | 青青草国产免费 | 99视频精品视频高清免费 | 久久黄色a级片 | 六月丁香伊人 | 日韩中文字幕免费在线观看 | 天天操天天添天天吹 | 国产一级片久久 | 国产精品久久久久久爽爽爽 | 玖玖爱在线观看 | 亚洲一区尤物 | 亚洲欧美国产精品久久久久 | 久久精品在线视频 | 亚洲人人射 | 中文字幕视频三区 | 欧美日韩精品免费观看视频 | 国产亚洲精品中文字幕 | 中文字幕制服丝袜av久久 | 99久久婷婷国产精品综合 | av久久在线 | 中文字幕大全 | 欧洲精品在线视频 | 999精品 | 在线电影中文字幕 | 91视频88av| .精品久久久麻豆国产精品 亚洲va欧美 | 天天色天天色天天色 | 久久免费a | 欧美高清成人 | 日韩欧美一区二区三区在线观看 | 高清国产午夜精品久久久久久 | 久久精品久久99精品久久 | 日韩欧美精品一区二区三区经典 | 黄色a在线观看 | 国产香蕉视频在线观看 | 天天婷婷| 午夜影院一级片 | 美女免费黄视频网站 | 在线国产一区 | 色婷婷综合久久久中文字幕 | 97精品国产97久久久久久 | 欧美日韩国产在线 | 91麻豆国产福利在线观看 | 一区二区网| 国产黄在线观看 | 国产精品毛片久久久久久久久久99999999 | 亚洲精品色婷婷 | 国产亚洲精品美女 | 好看的国产精品视频 | 欧美国产不卡 | 99精品乱码国产在线观看 | 国产亚洲永久域名 | 伊人亚洲精品 | 免费观看一级特黄欧美大片 | 又黄又爽又刺激视频 | 97av精品| 在线直播av | 免费福利视频网 | 一本一本久久a久久精品牛牛影视 | 视频在线一区二区三区 | 亚洲国产精品500在线观看 | 国产精品久久久久久超碰 | 国产精品一区二区三区免费看 | 成人免费色 | 99爱国产精品 | 免费日韩高清 | 色婷婷激情四射 | 亚洲理论在线 | 国产人成一区二区三区影院 | 国产区精品视频 | 色噜噜在线观看 | 高清国产午夜精品久久久久久 | 日韩在线电影一区二区 | 国产 精品 资源 | 国产三级精品三级在线观看 | 免费一级片在线观看 | 欧美精品久久99 | 中文字幕观看av | 九热精品 | 在线不卡a | 欧美日韩综合在线 | 黄色软件大全网站 | 国产大陆亚洲精品国产 | 久一在线 | 国产精品成人久久久 | 精品久久久久国产免费第一页 | 久久久久久久综合色一本 | 欧美一区二区三区不卡 | 日韩精品91偷拍在线观看 | 日本久久电影 | 中国一区二区视频 | 午夜影院日本 | 女人高潮一级片 | 黄色资源网站 | 国内精品久久天天躁人人爽 | 99综合影院在线 | 六月丁香综合 | 少妇bbr搡bbb搡bbb | 99精品视频免费在线观看 | 久久久久看片 | 在线观看免费91 | av手机在线播放 | 99热手机在线 | 在线看日韩av | 精品美女国产在线 | 人人爱人人做人人爽 | 97电影手机版 | 国产一级免费片 | 国产精品va | 在线性视频日韩欧美 | 精品99免费 | 人人干在线观看 | 国产 日韩 在线 亚洲 字幕 中文 | 亚洲成人资源网 | 成人禁用看黄a在线 | 337p日本欧洲亚洲大胆裸体艺术 | 黄网站大全 | 爱爱一区| 亚洲一区欧美激情 | 天天色天天爱天天射综合 | 亚洲国产精品人久久电影 | 麻豆影视在线播放 | 精品99免费视频 | 日韩av区| 久久精视频 | 欧美日韩精品在线观看视频 | 欧美a在线看 | 国产在线不卡一区 | 精品国产精品国产偷麻豆 | 亚洲永久精品视频 | 在线亚洲免费视频 | 99视频偷窥在线精品国自产拍 | 色婷婷激情电影 | 视频在线一区 | 九九九热| 在线看片中文字幕 | 久久综合福利 | 91免费视频网站在线观看 | 亚洲欧美国产日韩在线观看 | 欧美日本一区 | 久久久综合电影 | 欧美日韩国产精品爽爽 | 97人人澡人人爽人人模亚洲 | 国产中文视 | 成人永久免费 | 波多野结衣理论片 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 国产乱对白刺激视频不卡 | 波多野结衣视频一区 | 亚洲精品一区二区网址 | 亚洲综合成人专区片 | 99在线观看免费视频精品观看 | 国产乱对白刺激视频在线观看女王 | 国产成人一区二区三区久久精品 | 久久综合爱| 国产精品福利久久久 | 国产日本在线观看 | 成人丁香花 | 在线观看免费成人 | 久久国产精品99久久久久久丝袜 | 麻豆国产露脸在线观看 | 成人h电影在线观看 | 丁香花五月 | 在线观看av中文字幕 | 免费毛片aaaaaa | 亚洲免费视频在线观看 | 韩国av一区二区三区在线观看 | 五月婷婷,六月丁香 | 日韩在线大片 | 精品国产一区在线观看 | 99久久夜色精品国产亚洲 | 超碰97国产 | 97人人澡人人添人人爽超碰 | 国产精彩视频 | 天堂av色婷婷一区二区三区 | 欧美成人手机版 | 三级免费黄色 | 中文字幕一区二区三区久久 | 丁香九月激情 | 日韩三级不卡 | 国产精品麻豆99久久久久久 | 色欧美88888久久久久久影院 | 国产va精品免费观看 | 久一在线 | 久久欧美视频 | 色婷婷天天干 | 久久99久久99精品免观看软件 | 精品99视频| 久久久国际精品 | 在线看片成人 | 国精产品999国精产品岳 | 中文资源在线播放 | 国产精品乱码久久久久久1区2区 | 国产美女免费视频 | 国产第一页福利影院 | 免费在线观看一区 | 免费开视频 | 亚洲伊人网在线观看 | 九九热视频在线播放 | 99re亚洲国产精品 | 日韩欧美在线观看一区二区三区 | 亚洲精品xxxx| 日韩激情网 | 国内三级在线观看 | 免费在线观看污网站 | 2000xxx影视 | 久久久国产精华液 | 国产一区二区三区四区大秀 | 亚洲国产精品电影 | 成人免费共享视频 | 一本一本久久a久久精品综合小说 | av高清影院 | 国产成人在线精品 | 另类老妇性bbwbbw高清 | 日韩久久网站 | 3d黄动漫免费看 | 欧美一区二区精美视频 | 国产三级午夜理伦三级 | 国产中文字幕三区 | 久久久久久久久久久久国产精品 | 免费黄色在线网站 | 中文字幕日韩av | 国产精品白丝jk白祙 | 国产精品久久久777 成人手机在线视频 | 久久久久夜色 | 久久a免费视频 | 成人午夜毛片 | 欧美孕妇视频 | 中文字幕在线影视资源 | 色的网站在线观看 | 久久视频99 | 久久国产影院 | 伊人色综合久久天天 | 一区二区三区手机在线观看 | 在线观看麻豆av | 天天天天天天天操 | 精品国产区 | 成人av久久| 国产一区免费视频 | 最近中文字幕久久 | 天堂在线视频中文网 | 五月激情六月丁香 | 国产精品亚洲综合久久 | 日韩在线视频看看 | 九九爱免费视频在线观看 | 国产区精品 | 六月丁香综合网 | 精品国产亚洲一区二区麻豆 | 91片网 | 在线观看色网站 | 91福利影院在线观看 | 欧美a级在线 | 中文字幕一区二区在线观看 | 色婷婷视频在线观看 | 免费av小说 | 婷婷av网 | 亚洲无吗天堂 | 在线激情小视频 | 婷婷电影在线观看 | 精品国产伦一区二区三区观看体验 | 91人人网 | 91精选在线观看 | 久久久久久久久久久黄色 | 91精品国自产拍天天拍 | 91一区啪爱嗯打偷拍欧美 | 中文字幕 国产视频 | 九九九在线 | 久草久视频 | 探花视频网站 | 亚洲区另类春色综合小说校园片 | av中文字幕免费在线观看 | 在线观看日韩国产 | 日韩精品第1页 | 国产专区日韩专区 | 国内亚洲精品 | 久久九九久久九九 | 激情开心网站 | 成 人 黄 色 片 在线播放 | 国产日本亚洲高清 | 欧美日韩18| 91自拍视频在线观看 | www.亚洲黄色 | 久操操 | 久久字幕精品一区 | 亚洲高清av | 国产精品99久久久久久有的能看 | 亚洲精品男女 | 日韩伦理片hd| 国产在线看 | 日韩成人精品在线观看 | 色综合久 | 人人爱人人添 | 欧美性色黄 | 美女又爽又黄 | 亚洲精品国产精品国产 | 黄网站污 | 亚洲视频资源在线 | 精品久久久久国产免费第一页 | 久久久99精品免费观看乱色 | 成人av在线观 | 江苏妇搡bbbb搡bbbb | 久草在线高清视频 | 就操操久久 | 99视频在线观看免费 | 久久你懂的 | 亚洲国产资源 | www.大网伊人 | 美女免费av| 四虎影视久久久 | www.天天草 | 99电影456麻豆 | 超碰在线公开免费 | 日韩欧美在线一区二区 | 天天干.com| 超碰人人做 | 久久综合狠狠综合 | 国产手机在线精品 | 国产美女精品视频 | 欧美精品久久久久久久久老牛影院 | 久久久久久久久久久久电影 | 999成人免费视频 | 亚洲 中文 欧美 日韩vr 在线 | 欧美怡红院视频 | 国产主播大尺度精品福利免费 | 欧美日韩视频观看 | 国产精品不卡一区 | 成人av免费在线播放 | 亚洲精品网页 | 伊人婷婷网 | www婷婷 | 天天干天天操天天操 | 日韩在线免费看 | 五月婷婷一级片 | 操操爽| 色偷偷av男人天堂 | 亚洲精品高清在线观看 | 欧美日本啪啪无遮挡网站 | 国产色爽 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 久久精品牌麻豆国产大山 | 亚洲精品视频在线观看免费视频 | 国产在线专区 | 亚洲综合色网站 | 91精品国产综合久久福利 | 午夜av免费在线观看 | 亚洲综合视频网 | 日本韩国在线不卡 | 久久综合加勒比 | 久久夜视频 | 中文字幕av一区二区三区四区 | 99精品网站 | 国产高清视频色在线www | 狠狠狠狠狠狠狠狠干 |