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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring常用注解总结

發(fā)布時間:2025/4/9 javascript 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring常用注解总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

傳統(tǒng)的Spring做法是使用.xml文件來對bean進(jìn)行注入或者是配置aop、事物,這么做有兩個缺點:
1、如果所有的內(nèi)容都配置在.xml文件中,那么.xml文件將會十分龐大;如果按需求分開.xml文件,那么.xml文件又會非常多。總之這將導(dǎo)致配置文件的可讀性與可維護(hù)性變得很低。
2、在開發(fā)中在.java文件和.xml文件之間不斷切換,是一件麻煩的事,同時這種思維上的不連貫也會降低開發(fā)的效率。
為了解決這兩個問題,Spring引入了注解,通過"@XXX"的方式,讓注解與Java Bean緊密結(jié)合,既大大減少了配置文件的體積,又增加了Java Bean的可讀性與內(nèi)聚性。

不使用注解:

先看一個不使用注解的Spring示例,在這個示例的基礎(chǔ)上,改成注解版本的,這樣也能看出使用與不使用注解之間的區(qū)別,先定義一個老虎:

package com.spring.model;public class Tiger {private String tigerName="TigerKing";public String toString(){return "TigerName:"+tigerName;} }

再定義一個猴子:

package com.spring.model;public class Monkey {private String monkeyName = "MonkeyKing";public String toString(){return "MonkeyName:" + monkeyName;}}

定義一個動物園:

package com.spring.model;public class Zoo {private Tiger tiger;private Monkey monkey;public Tiger getTiger() {return tiger;}public void setTiger(Tiger tiger) {this.tiger = tiger;}public Monkey getMonkey() {return monkey;}public void setMonkey(Monkey monkey) {this.monkey = monkey;}public String toString(){return tiger + "\n" + monkey;}}

spring的配置文件這么寫:

<?xml version="1.0" encoding="UTF-8"?> <beansxmlns="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"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsd"><bean id="zoo" class="com.spring.model.Zoo" ><property name="tiger" ref="tiger" /><property name="monkey" ref="monkey" /></bean><bean id="tiger" class="com.spring.model.Tiger" /><bean id="monkey" class="com.spring.model.Monkey" /></beans>

測試方法:

public class TestAnnotation {/*** 不使用注解*/@Testpublic void test(){//讀取配置文件ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext2.xml");Zoo zoo=(Zoo) ctx.getBean("zoo");System.out.println(zoo.toString());} }

都很熟悉,權(quán)當(dāng)復(fù)習(xí)一遍了。

1、@Autowired

@Autowired顧名思義,就是自動裝配,其作用是為了消除代碼Java代碼里面的getter/setter與bean屬性中的property。當(dāng)然,getter看個人需求,如果私有屬性需要對外提供的話,應(yīng)當(dāng)予以保留。

@Autowired默認(rèn)按類型匹配的方式,在容器查找匹配的Bean,當(dāng)有且僅有一個匹配的Bean時,Spring將其注入@Autowired標(biāo)注的變量中。

因此,引入@Autowired注解,先看一下spring配置文件怎么寫:

1 <?xml version="1.0" encoding="UTF-8"?>2 <beans3 xmlns="http://www.springframework.org/schema/beans"4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"5 xmlns:p="http://www.springframework.org/schema/p"6 xmlns:context="http://www.springframework.org/schema/context"7 xsi:schemaLocation="http://www.springframework.org/schema/beans8 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd9 http://www.springframework.org/schema/context 10 http://www.springframework.org/schema/context/spring-context-3.0.xsd 11 "> 12 13 <context:component-scan base-package="com.spring" /> 14 15 <bean id="zoo" class="com.spring.model.Zoo" /> 16 <bean id="tiger" class="com.spring.model.Tiger" /> 17 <bean id="monkey" class="com.spring.model.Monkey" /> 18 19 </beans>

注意第13行,使用必須告訴spring一下我要使用注解了,告訴的方式有很多,<context:component-scan base-package="xxx" />是一種最簡單的,spring會自動掃描xxx路徑下的注解。

看到第15行,原來zoo里面應(yīng)當(dāng)注入兩個屬性tiger、monkey,現(xiàn)在不需要注入了。再看下,Zoo.java也很方便,把getter/setter都可以去掉:

package com.spring.model;import org.springframework.beans.factory.annotation.Autowired;public class Zoo {@Autowiredprivate Tiger tiger;@Autowiredprivate Monkey monkey;public String toString(){return tiger + "\n" + monkey;}}

這里@Autowired注解的意思就是,當(dāng)Spring發(fā)現(xiàn)@Autowired注解時,將自動在代碼上下文中找到和其匹配(默認(rèn)是類型匹配)的Bean,并自動注入到相應(yīng)的地方去。

有一個細(xì)節(jié)性的問題是,假如bean里面有兩個property,Zoo.java里面又去掉了屬性的getter/setter并使用@Autowired注解標(biāo)注這兩個屬性那會怎么樣?答案是Spring會按照xml優(yōu)先的原則去Zoo.java中尋找這兩個屬性的getter/setter,導(dǎo)致的結(jié)果就是初始化bean報錯。?

OK,假設(shè)此時我把.xml文件的16行、17行兩行給去掉,再運行,會拋出異常:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'zoo': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.spring.model.Tiger com.spring.model.Zoo.tiger; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.spring.model.Tiger] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:285)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1074)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580)at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)at com.spring.test.TestAnnotation.test(TestAnnotation.java:16)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)at java.lang.reflect.Method.invoke(Method.java:597)at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)at org.junit.runners.ParentRunner.run(ParentRunner.java:300)at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.spring.model.Tiger com.spring.model.Zoo.tiger; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.spring.model.Tiger] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:502)at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:84)at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:282)... 36 more Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.spring.model.Tiger] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:920)at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:789)at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:703)at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:474)... 38 more

因為,@Autowired注解要去尋找的是一個Bean,Tiger和Monkey的Bean定義都給去掉了,自然就不是一個Bean了,Spring容器找不到也很好理解。那么,如果屬性找不到我不想讓Spring容器拋出異常,而就是顯示null,可以嗎?可以的,其實異常信息里面也給出了提示了,就是將@Autowired注解的required屬性設(shè)置為false即可:

package com.spring.model;import org.springframework.beans.factory.annotation.Autowired;public class Zoo {@Autowired(required=false)private Tiger tiger;@Autowired(required=false)private Monkey monkey;public String toString(){return tiger + "\n" + monkey;}}

此時,找不到tiger、monkey兩個屬性,Spring容器不再拋出異常而是認(rèn)為這兩個屬性為null。

2、Qualifier(指定注入Bean的名稱)

如果容器中有一個以上匹配的Bean,則可以通過@Qualifier注解限定Bean的名稱,看下面的例子:

定義一個Car接口:

package com.spring.service;public interface ICar {public String getCarName(); }

兩個實現(xiàn)類BMWCar和BenzCar:

package com.spring.service.impl;import com.spring.service.ICar;public class BMWCar implements ICar{public String getCarName(){return "BMW car";} } package com.spring.service.impl;import com.spring.service.ICar;public class BenzCar implements ICar{public String getCarName(){return "Benz car";} }

再寫一個CarFactory,引用car(這里先不用@Qualifier注解):

package com.spring.model;import org.springframework.beans.factory.annotation.Autowired;import com.spring.service.ICar;public class CarFactory {@Autowiredprivate ICar car;public String toString(){return car.getCarName();}}

配置文件:

<?xml version="1.0" encoding="UTF-8"?> <beansxmlns="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"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsd"><context:component-scan base-package="com.spring" /><!-- Autowired注解配合Qualifier注解 --><bean id="carFactory" class="com.spring.model.CarFactory" /><bean id="bmwCar" class="com.spring.service.impl.BMWCar" /><bean id="benz" class="com.spring.service.impl.BenzCar" /></beans>

測試方法:

/*** Autowired注解配合Qualifier注解*/ @Test public void test1(){//讀取配置文件ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext2.xml");CarFactory carFactory=(CarFactory) ctx.getBean("carFactory");System.out.println(carFactory.toString()); }

運行一下,不用說,一定是報錯的,Car接口有兩個實現(xiàn)類,Spring并不知道應(yīng)當(dāng)引用哪個實現(xiàn)類。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'carFactory': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException:
Could not autowire field: private com.spring.service.ICar com.spring.model.CarFactory.car; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException:
No unique bean of type [com.spring.service.ICar] is defined: expected single matching bean but found 2: [bmwCar, benz]at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:285)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1074)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580)at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)at com.spring.test.TestAnnotation.test1(TestAnnotation.java:25)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)at java.lang.reflect.Method.invoke(Method.java:597)at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)at org.junit.runners.ParentRunner.run(ParentRunner.java:300)at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.spring.service.ICar com.spring.model.CarFactory.car; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [com.spring.service.ICar] is defined: expected single matching bean but found 2: [bmwCar, benz]at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:502)at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:84)at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:282)... 36 more Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [com.spring.service.ICar] is defined: expected single matching bean but found 2: [bmwCar, benz]at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:796)at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:703)at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:474)... 38 more

出現(xiàn)這種情況通常有兩種解決辦法:
(1)、在配置文件中刪除其中一個實現(xiàn)類,Spring會自動去base-package下尋找Car接口的實現(xiàn)類,發(fā)現(xiàn)Car接口只有一個實現(xiàn)類,便會直接引用這個實現(xiàn)類。
(2)、實現(xiàn)類就是有多個該怎么辦?此時可以使用@Qualifier注解來指定Bean的名稱:

package com.spring.model;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier;import com.spring.service.ICar;public class CarFactory {@Autowired@Qualifier("bmwCar")private ICar car;public String toString(){return car.getCarName();}}

此處會注入名為"bmwCar"的Bean。

3、Resource

@Resource注解與@Autowired注解作用非常相似,這個就簡單說了,看例子:

package com.spring.model;import javax.annotation.Resource;public class Zoo1 {@Resource(name="tiger")private Tiger tiger;@Resource(type=Monkey.class)private Monkey monkey;public String toString(){return tiger + "\n" + monkey;} }

這是詳細(xì)一些的用法,說一下@Resource的裝配順序:
(1)、@Resource后面沒有任何內(nèi)容,默認(rèn)通過name屬性去匹配bean,找不到再按type去匹配
(2)、指定了name或者type則根據(jù)指定的類型去匹配bean
(3)、指定了name和type則根據(jù)指定的name和type去匹配bean,任何一個不匹配都將報錯

然后,區(qū)分一下@Autowired和@Resource兩個注解的區(qū)別:
(1)、@Autowired默認(rèn)按照byType方式進(jìn)行bean匹配,@Resource默認(rèn)按照byName方式進(jìn)行bean匹配
(2)、@Autowired是Spring的注解,@Resource是J2EE的注解,這個看一下導(dǎo)入注解的時候這兩個注解的包名就一清二楚了
Spring屬于第三方的,J2EE是Java自己的東西,因此,建議使用@Resource注解,以減少代碼和Spring之間的耦合。

4、Service

上面這個例子,還可以繼續(xù)簡化,因為spring的配置文件里面還有15行~17行三個bean,下一步的簡化是把這三個bean也給去掉,使得spring配置文件里面只有一個自動掃描的標(biāo)簽,增強(qiáng)Java代碼的內(nèi)聚性并進(jìn)一步減少配置文件。

要繼續(xù)簡化,可以使用@Service。先看一下配置文件,當(dāng)然是全部刪除了:

<?xml version="1.0" encoding="UTF-8"?> <beansxmlns="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"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsd"><context:component-scan base-package="com.spring" /></beans>

是不是感覺很爽?起碼我覺得是的。OK,下面以Zoo.java為例,其余的Monkey.java和Tiger.java都一樣:

package com.spring.model;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;@Service public class Zoo {@Autowiredprivate Tiger tiger;@Autowiredprivate Monkey monkey;public String toString(){return tiger + "\n" + monkey;}}

這樣,Zoo.java在Spring容器中存在的形式就是"zoo",即可以通過ApplicationContext的getBean("zoo")方法來得到Zoo.java。@Service注解,其實做了兩件事情:
(1)、聲明Zoo.java是一個bean,這點很重要,因為Zoo.java是一個bean,其他的類才可以使用@Autowired將Zoo作為一個成員變量自動注入。
(2)、Zoo.java在bean中的id是"zoo",即類名且首字母小寫。

如果,我不想用這種形式怎么辦,就想讓Zoo.java在Spring容器中的名字叫做"Zoo",可以的:

package com.spring.model;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service;@Service("Zoo") @Scope("prototype") public class Zoo {@Autowiredprivate Tiger tiger;@Autowiredprivate Monkey monkey;public String toString(){return tiger + "\n" + monkey;}}

這樣,就可以通過ApplicationContext的getBean("Zoo")方法來得到Zoo.java了。

這里我還多加了一個@Scope注解,應(yīng)該很好理解。因為Spring默認(rèn)產(chǎn)生的bean是單例的,假如我不想使用單例怎么辦,xml文件里面可以在bean里面配置scope屬性。注解也是一樣,配置@Scope即可,默認(rèn)是"singleton"即單例,"prototype"表示原型即每次都會new一個新的出來。

————————————————————————————————————————————————————————————————————

使用注解來構(gòu)造IoC容器
用注解來向Spring容器注冊Bean。需要在applicationContext.xml中注冊<context:component-scan base-package=”pagkage1[,pagkage2,…,pagkageN]”/>。

如:在base-package指明一個包

<context:component-scan base-package="cn.gacl.java"/>

表明cn.gacl.java包及其子包中,如果某個類的頭上帶有特定的注解【@Component/@Repository/@Service/@Controller】,就會將這個對象作為Bean注冊進(jìn)Spring容器。也可以在<context:component-scan base-package=” ”/>中指定多個包,如:

<context:component-scan base-package="cn.gacl.dao.impl,cn.gacl.service.impl,cn.gacl.action"/>

多個包逗號隔開。

1、@Component
@Component是所有受Spring 管理組件的通用形式,@Component注解可以放在類的頭上,@Component不推薦使用。

2、@Controller
@Controller對應(yīng)表現(xiàn)層的Bean,也就是Action,例如:

@Controller @Scope("prototype") public class UserAction extends BaseAction<User>{…… }

使用@Controller注解標(biāo)識UserAction之后,就表示要把UserAction交給Spring容器管理,Spring容器中會存在一個名字為"userAction"action,這個名字是根據(jù)UserAction類名來取的。注意:如果@Controller不指定其value【@Controller】,則默認(rèn)的bean名字為這個類的類名首字母小寫如果指定value【@Controller(value="UserAction")】或者【@Controller("UserAction")】,則使用value作為bean的名字

這里的UserAction還使用了@Scope注解,@Scope("prototype")表示將Action的范圍聲明為原型,可以利用容器的scope="prototype"來保證每一個請求有一個單獨的Action來處理,避免strutsAction的線程安全問題。spring?默認(rèn)scope?是單例模式(scope="singleton"),這樣只會創(chuàng)建一個Action對象,每次訪問都是同一Action對象,數(shù)據(jù)不安全,struts2?是要求每次次訪問都對應(yīng)不同的Actionscope="prototype"?可以保證當(dāng)有請求的時候都創(chuàng)建一個Action對象。

3、@Service
@Service對應(yīng)的是業(yè)務(wù)層Bean,例如:

@Service("userService") public class UserServiceImpl implements UserService { ……… }

?@Service("userService")注解是告訴Spring,當(dāng)Spring要創(chuàng)建UserServiceImpl的的實例時,bean的名字必須叫做"userService",這樣當(dāng)Action需要使用UserServiceImpl的的實例時,就可以由Spring創(chuàng)建好的"userService",然后注入給Action:在Action只需要聲明一個名字叫"userService"的變量來接收由Spring注入的"userService"即可,具體代碼如下:

// 注入userService @Resource(name = "userService") private UserService userService;

注意:在Action聲明的"userService"變量的類型必須是"UserServiceImpl"或者是其父類"UserService",否則由于類型不一致而無法注入,由于Action中的聲明的"userService"變量使用了@Resource注解去標(biāo)注,并且指明了其name = "userService",這就等于告訴Spring,說我Action要實例化一個"userService",你Spring快點幫我實例化好,然后給我,當(dāng)Spring看到userService變量上的@Resource的注解時,根據(jù)其指明的name屬性可以知道,Action中需要用到一個UserServiceImpl的實例,此時Spring就會把自己創(chuàng)建好的名字叫做"userService"的UserServiceImpl的實例注入給Action中的"userService"變量,幫助Action完成userService的實例化,這樣在Action中就不用通過"UserService userService = new UserServiceImpl();"這種最原始的方式去實例化userService了。如果沒有Spring,那么當(dāng)Action需要使用UserServiceImpl時,必須通過"UserService userService = new UserServiceImpl();"主動去創(chuàng)建實例對象,但使用了Spring之后,Action要使用UserServiceImpl時,就不用主動去創(chuàng)建UserServiceImpl的實例了,創(chuàng)建UserServiceImpl實例已經(jīng)交給Spring來做了,Spring把創(chuàng)建好的UserServiceImpl實例給Action,Action拿到就可以直接用了。Action由原來的主動創(chuàng)建UserServiceImpl實例后就可以馬上使用,變成了被動等待由Spring創(chuàng)建好UserServiceImpl實例之后再注入給Action,Action才能夠使用。這說明Action對"UserServiceImpl"類的“控制權(quán)”已經(jīng)被“反轉(zhuǎn)”了,原來主動權(quán)在自己手上,自己要使用"UserServiceImpl"類的實例,自己主動去new一個出來馬上就可以使用了,但現(xiàn)在自己不能主動去new "UserServiceImpl"類的實例,new "UserServiceImpl"類的實例的權(quán)力已經(jīng)被Spring拿走了,只有Spring才能夠new "UserServiceImpl"類的實例,而Action只能等Spring創(chuàng)建好"UserServiceImpl"類的實例后,再“懇求”Spring把創(chuàng)建好的"UserServiceImpl"類的實例給他,這樣他才能夠使用"UserServiceImpl",這就是Spring核心思想“控制反轉(zhuǎn)”,也叫“依賴注入”,“依賴注入”也很好理解,Action需要使用UserServiceImpl干活,那么就是對UserServiceImpl產(chǎn)生了依賴,Spring把Acion需要依賴的UserServiceImpl注入(也就是“給”)給Action,這就是所謂的“依賴注入”。對Action而言,Action依賴什么東西,就請求Spring注入給他,對Spring而言,Action需要什么,Spring就主動注入給他。

4、@ Repository
@Repository對應(yīng)數(shù)據(jù)訪問層Bean ,例如:

@Repository(value="userDao") public class UserDaoImpl extends BaseDaoImpl<User> { ……… }

@Repository(value="userDao")注解是告訴Spring,讓Spring創(chuàng)建一個名字叫"userDao"的UserDaoImpl實例。

當(dāng)Service需要使用Spring創(chuàng)建的名字叫"userDao"的UserDaoImpl實例時,就可以使用@Resource(name = "userDao")注解告訴Spring,Spring把創(chuàng)建好的userDao注入給Service即可。

// 注入userDao,從數(shù)據(jù)庫中根據(jù)用戶Id取出指定用戶時需要用到 @Resource(name = "userDao") private BaseDao<User> userDao;

—————————————————————————————————————————————————————————————————————

Spring常用注解匯總?
本文匯總了Spring的常用注解,以方便大家查詢和使用,具體如下:

使用注解之前要開啟自動掃描功能,其中base-package為需要掃描的包(含子包)。

<context:component-scan base-package="cn.test"/>

@Configuration把一個類作為一個IoC容器,它的某個方法頭上如果注冊了@Bean,就會作為這個Spring容器中的Bean。
@Scope注解 作用域
@Lazy(true) 表示延遲初始化
@Service用于標(biāo)注業(yè)務(wù)層組件、?
@Controller用于標(biāo)注控制層組件(如struts中的action)
@Repository用于標(biāo)注數(shù)據(jù)訪問組件,即DAO組件。
@Component泛指組件,當(dāng)組件不好歸類的時候,我們可以使用這個注解進(jìn)行標(biāo)注。
@Scope用于指定scope作用域的(用在類上)
@PostConstruct用于指定初始化方法(用在方法上)
@PreDestory用于指定銷毀方法(用在方法上)
@DependsOn:定義Bean初始化及銷毀時的順序
@Primary:自動裝配時當(dāng)出現(xiàn)多個Bean候選者時,被注解為@Primary的Bean將作為首選者,否則將拋出異常
@Autowired 默認(rèn)按類型裝配,如果我們想使用按名稱裝配,可以結(jié)合@Qualifier注解一起使用。如下:
@Autowired @Qualifier("personDaoBean") 存在多個實例配合使用
@Resource默認(rèn)按名稱裝配,當(dāng)找不到與名稱匹配的bean才會按類型裝配。
@PostConstruct 初始化注解
@PreDestroy 摧毀注解 默認(rèn) 單例? 啟動就加載
@Async異步方法調(diào)用

轉(zhuǎn)載于:https://www.cnblogs.com/eer123/p/9112555.html

總結(jié)

以上是生活随笔為你收集整理的Spring常用注解总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

在线播放 日韩专区 | 国产高清在线永久 | 五月天堂网| 亚洲情感电影大片 | 伊人干综合 | 亚洲视频456| 香蕉免费在线 | 国产精品毛片一区二区三区 | 免费看成人片 | 在线观看成人国产 | 久久久久国产成人免费精品免费 | 91精品视频在线看 | 国产精品免费一区二区三区在线观看 | 久久久久久久久久久久久久电影 | 国产在线观看免费 | 天堂在线成人 | 免费成人看片 | 五月婷婷黄色网 | 久久影视一区 | 成人国产电影在线观看 | 国产91在线 | 美洲 | 国产 日韩 欧美 中文 在线播放 | 日韩精品中文字幕在线 | 日韩电影一区二区三区 | 91av电影网| 97超碰精品 | 中文字幕 国产专区 | 97在线观看免费观看高清 | 99视频在线看 | 国产美女精彩久久 | 欧美精品免费在线观看 | 美女久久久久久久久久 | 日韩区在线观看 | 久久免费一级片 | av成人免费 | 99久久99精品 | 国产99re| 夜夜躁狠狠躁日日躁 | 成人在线观看资源 | 91精品天码美女少妇 | 99操视频 | 97超碰精品 | 中文在线免费视频 | 久久精品国产亚洲a | 日韩精品欧美专区 | 欧美福利片在线观看 | 91亚洲精品国偷拍 | 中文字幕在线观看视频网站 | 欧洲在线免费视频 | 超碰在线公开免费 | 久久久免费电影 | 日韩美一区二区三区 | 51久久夜色精品国产麻豆 | 成人av免费在线看 | 国产专区精品视频 | 91成版人在线观看入口 | 国产最顶级的黄色片在线免费观看 | 久久尤物电影视频在线观看 | 99久久婷婷国产综合亚洲 | 日韩免费视频观看 | 草久在线 | 91丨精品丨蝌蚪丨白丝jk | 人人超碰人人 | 色婷婷在线播放 | 91精品久久久久久综合乱菊 | 欧美日韩一级视频 | 色婷婷激情五月 | 男女视频久久久 | 美州a亚洲一视本频v色道 | 97超碰在线久草超碰在线观看 | 欧美成人a在线 | 狠狠色丁香婷婷综合久小说久 | 婷婷久久网 | av色一区 | 欧洲不卡av | 亚洲在线看 | 久久伊人爱| 日本黄网站 | 国产剧情一区在线 | 久久久久久久久久久久久久电影 | 日韩精品视频网站 | 超碰免费公开 | 国产精品久久久久9999吃药 | 五月天av在线 | 久久免费视频国产 | 成人午夜电影网 | 国产黄色精品 | 日韩视频图片 | 成人黄色视 | 久久久免费毛片 | 爱色av.com| 亚洲美女免费精品视频在线观看 | 日本精品视频免费 | 亚洲va天堂va欧美ⅴa在线 | 天堂在线v | 一二区电影 | 国产精品久久久久永久免费观看 | 97超碰中文字幕 | 最新中文字幕 | 久久婷婷国产色一区二区三区 | 日韩电影一区二区三区在线观看 | 最近日韩免费视频 | 中文字幕在线免费看 | 日韩av资源站 | 人人爽影院| 成人国产精品免费观看 | 在线视频一二三 | 日韩在线视频线视频免费网站 | 国产午夜精品一区 | 美女久久久久久久 | 亚洲精品中文字幕在线 | 中文字幕av免费观看 | 中文字幕精品一区二区三区电影 | 国产成人精品综合久久久久99 | 天天天色综合a | 一区二区三区手机在线观看 | 成人性生交视频 | 欧美成人亚洲 | 久草免费在线视频观看 | 伊人婷婷网 | 在线观看麻豆av | 成年人网站免费在线观看 | 天天射综合网视频 | 日本精品一区二区三区在线观看 | 99久久www免费 | 911久久香蕉国产线看观看 | 99在线观看精品 | 久久国产91 | 亚洲欧洲美洲av | 99精品免费 | 午夜精品影院 | 香蕉视频免费在线播放 | 国产成人精品一区二区三区 | 欧美日韩一级久久久久久免费看 | 国外调教视频网站 | 黄色网址a| 人人插人人玩 | 一区 在线 影院 | 成人黄色免费观看 | 国产精品99久久久久久人免费 | 成人小视频免费在线观看 | 美女网站黄在线观看 | 伊人av综合| 日韩 在线观看 | 中文字幕欧美三区 | 一区二区中文字幕在线播放 | 久久午夜电影 | 成人免费网站视频 | 日日夜夜噜噜噜 | 日韩v在线91成人自拍 | 亚洲一区二区三区在线看 | 91最新在线视频 | 欧美日韩精品在线免费观看 | 久久久久国产一区二区 | 国产精品国产亚洲精品看不卡 | 最近更新的中文字幕 | 99久久综合精品五月天 | 91精品爽啪蜜夜国产在线播放 | 日韩av手机在线看 | 亚洲综合欧美日韩狠狠色 | 日韩中字在线 | 麻豆视频在线免费观看 | 黄污视频网站大全 | 亚洲欧洲精品一区 | 久久精品国产一区二区 | 久久久久在线观看 | 国产黄色特级片 | 日韩r级电影在线观看 | 国产精品理论片 | 亚洲黄在线观看 | 天天骚夜夜操 | 免费视频xnxx com | 最新日韩电影 | 在线综合色 | 国产精品久久久久久久久久 | 激情婷婷av| 日韩专区一区二区 | 一区二区视频在线免费观看 | 日韩高清观看 | 国产h在线播放 | 国产精品自产拍在线观看桃花 | 在线观看视频黄 | 久久久久一区二区三区 | 精品日韩在线 | 99视频偷窥在线精品国自产拍 | 色综合久久中文字幕综合网 | 久久国内免费视频 | 欧美日韩视频观看 | 香蕉在线观看视频 | 碰超人人 | 手机看国产毛片 | 天天操比 | 91视频a| 日韩在线不卡av | 日本h在线播放 | 久久精品欧美日韩精品 | 狠狠狠的干 | 国产午夜精品在线 | 国产亚洲精品美女久久 | 久久久久久国产一区二区三区 | 国产日本亚洲高清 | 成年人av在线播放 | 亚洲日本色 | 99精品国产福利在线观看免费 | 黄色片视频免费 | 狠色在线 | www五月天婷婷 | 日韩在线一区二区免费 | 天天天干 | 久久99热这里只有精品 | 激情视频91 | 免费成人av在线看 | 久久久久免费精品国产 | 麻花豆传媒一二三产区 | 久久久精品一区二区 | 人人狠狠综合久久亚洲 | 亚洲免费资源 | 久久久久欧美精品 | 欧洲av在线 | 欧美极品少妇xxxx | 成人不用播放器 | 日韩精品一区二区三区高清免费 | 久久国产精品一国产精品 | 在线观看成人av | 天天干,夜夜操 | 丁香在线观看完整电影视频 | 国产免费一区二区三区最新6 | 九九久久久 | 欧美日韩中文字幕综合视频 | av在线h| 免费在线观看中文字幕 | 国产精品久久久久婷婷 | 视频在线精品 | 色综合久久88色综合天天人守婷 | 一区二区不卡高清 | 国产日韩欧美在线 | 欧美精品一区二区在线播放 | 911久久| 波多野结衣综合网 | 国产亚洲综合在线 | 国产一及片 | 日韩欧美精品在线视频 | 午夜99| 日韩va欧美va亚洲va久久 | 久久国产影院 | 在线国产片 | 五月开心六月伊人色婷婷 | 久久久免费观看 | 91精品国产九九九久久久亚洲 | 久久午夜电影院 | 久久国产精品99久久久久久进口 | 免费在线一区二区 | 久久久久久毛片 | 91九色丨porny丨丰满6 | 亚洲区色 | 亚洲伊人av | 中文字幕av专区 | av 在线观看 | 国产精品一区二区久久国产 | 精品嫩模福利一区二区蜜臀 | 中文字幕日韩免费视频 | 国产麻豆精品一区 | 韩国一区二区三区视频 | 夜夜视频资源 | 国产男女爽爽爽免费视频 | 黄a网| 国产一区视频在线播放 | 国产精品99久久久久人中文网介绍 | 精品亚洲在线 | 国产精品成人免费 | 日韩在线观看的 | 成人视屏免费看 | 91正在播放 | 免费看污污视频的网站 | av一级在线 | 亚洲五月六月 | 欧美大片在线看免费观看 | 久久99国产精品免费 | 五月天激情开心 | 黄色大全免费网站 | 欧美性色黄大片在线观看 | 国产精品久久99精品毛片三a | 日韩午夜精品福利 | 91爱爱网址 | 国产无遮挡又黄又爽在线观看 | 人人精品| 五月婷婷综| 日日日操操 | 久久久久亚洲精品成人网小说 | 国产精品视频全国免费观看 | 天天天干夜夜夜操 | 色播亚洲婷婷 | 亚洲一区免费在线 | 久久高清毛片 | 日韩v在线91成人自拍 | 亚洲精品合集 | 三级在线国产 | 免费观看高清 | 丝袜+亚洲+另类+欧美+变态 | 亚洲综合在线一区二区三区 | 超碰在线公开 | 久久一区二区三区超碰国产精品 | 激情视频区 | 国产精品高清在线观看 | 国产精品福利在线观看 | 91av播放| 日韩一级片大全 | 久久久精品国产免费观看同学 | 欧美99热 | 黄色一级动作片 | 日韩欧美高清一区二区三区 | 免费a级黄色毛片 | 色国产精品一区在线观看 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 亚洲永久字幕 | 国产欧美在线一区二区三区 | 亚洲好视频 | 国产r级在线观看 | 黄网站污 | 免费看的毛片 | 黄色成人影视 | 国产精品96久久久久久吹潮 | 麻豆国产精品永久免费视频 | 久久99这里只有精品 | a级片网站| 国产破处在线播放 | 亚洲美女在线国产 | 91精品国产麻豆 | 亚洲精品久久久久久中文传媒 | 国产99久久精品一区二区300 | 一区二区三区在线免费 | 欧美日韩3p | 日韩三级.com | 99视频国产精品免费观看 | 国内精品久久久久久久久久久 | 免费日韩一区二区三区 | 成人黄色电影在线观看 | 精品爱爱| 全黄网站 | 黄色在线免费观看网址 | 久久久国产一区二区 | 91片黄在线观看动漫 | 成人97人人超碰人人99 | 日本狠狠色 | 国产精品高潮呻吟久久久久 | 久久夜色网 | 日韩成人精品在线观看 | 欧美日韩高清在线观看 | 国产一区二区成人 | 亚洲欧洲精品在线 | 99精品视频在线观看 | 欧美久草在线 | 免费观看日韩 | 天天操夜夜干 | 黄色国产高清 | 精品一区二区免费 | 国产一级二级在线观看 | 午夜精品福利在线 | 天天综合网久久综合网 | 国产精品成人一区二区三区吃奶 | 国产又粗又猛又爽又黄的视频免费 | 五月婷婷久 | 999久久久精品视频 日韩高清www | 999国产精品视频 | 国产一级一级国产 | 亚洲一区精品二人人爽久久 | 制服丝袜一区二区 | 最新成人av | 亚洲免费小视频 | 九月婷婷综合网 | 欧美日韩一区二区三区不卡 | 国产精品观看在线亚洲人成网 | 日韩二区在线播放 | 欧美日韩精品在线播放 | 免费亚洲电影 | 天天干夜夜夜操天 | 在线观看亚洲免费视频 | 婷婷香蕉| 日韩区欧美久久久无人区 | 久久国产精品99精国产 | 久久久久麻豆v国产 | 在线观看的av | 国产精品观看视频 | 99久久精品国产观看 | 综合网天天色 | 在线免费性生活片 | 免费网站污 | 亚洲精品久久久蜜臀下载官网 | 天天干婷婷 | 国产精品夜夜夜一区二区三区尤 | 欧美日韩视频免费 | 久久久在线视频 | av综合站 | 69av在线视频| 久久专区 | 国产精品永久免费观看 | 天天干人人干 | 五月天婷婷在线观看视频 | 日韩黄色一区 | 波多野结衣一区 | 99视频在线播放 | 国产毛片久久 | 黄av免费在线观看 | 亚洲精品乱码久久久一二三 | 开心丁香婷婷深爱五月 | 福利视频网站 | 国产69熟| 在线国产激情视频 | 视频一区二区视频 | 日韩精品一区二区三区视频播放 | 九九九热精品免费视频观看网站 | 正在播放久久 | 96在线| 在线观看国产麻豆 | 久99久中文字幕在线 | 日韩电影在线观看一区二区三区 | 欧美日韩免费在线观看视频 | 高清免费在线视频 | 激情视频91 | 啪啪免费观看网站 | 久久一本综合 | 久操操 | 久久人人看| 日本动漫做毛片一区二区 | 日日夜夜噜| 国产69精品久久久久久 | 国产精品一区二区精品视频免费看 | 日韩欧美视频在线观看免费 | 日韩黄色软件 | 国产精品福利一区 | 天天曰 | 国产精品美女久久 | 免费看久久 | 亚洲精品男人的天堂 | 丁香激情综合国产 | a√天堂资源 | 69国产成人综合久久精品欧美 | 国产成人精品一区二区三区福利 | 成人av免费网站 | 亚洲视频分类 | 国产精品精品国产婷婷这里av | 久久天堂亚洲 | 日韩高清成人 | 日韩午夜电影网 | 色是在线视频 | 香蕉视频在线视频 | 日韩在线视频国产 | 97色狠狠 | 日韩欧美在线一区 | 国产精品成久久久久 | 日韩欧美一区二区三区免费观看 | 欧美国产亚洲精品久久久8v | 伊人久久电影网 | 久久综合网色—综合色88 | 成人av一区二区兰花在线播放 | 久久蜜臀一区二区三区av | 国产玖玖在线 | 成人av地址 | 久久成人国产 | 久久激情综合网 | 国产又粗又猛又黄又爽的视频 | 五月天亚洲激情 | 日韩mv欧美mv国产精品 | 久久字幕 | 9999国产精品| 亚洲老妇xxxxxx | 久久久久久久久久久久久国产精品 | 99中文字幕视频 | 91av视频观看 | 六月丁香六月婷婷 | 人人狠狠综合久久亚洲 | 国产一级电影免费观看 | 免费无遮挡动漫网站 | 麻豆免费在线视频 | 亚洲第二色 | 在线视频 区 | 亚洲视频免费在线观看 | 欧美精品一区二区在线观看 | 国产伦理久久精品久久久久_ | 日本三级久久久 | 国产精品美女免费 | 在线视频a | 91视频免费看片 | 亚洲精品美女久久久久 | 亚洲日本中文字幕在线观看 | 精品一区二区视频 | av电影中文字幕在线观看 | 操操综合 | 国产在线视频一区 | 99在线精品免费视频九九视 | 香蕉在线视频观看 | 国产午夜精品一区 | 午夜精品999| 91在线看网站 | 色爽网站 | 六月丁香社区 | av观看久久久| 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 久久精品国产免费看久久精品 | 免费网站看av片 | 黄色一级在线免费观看 | 久久久久9999亚洲精品 | 国产亚洲视频在线观看 | 久草在线| 特片网久久 | 免费黄色激情视频 | 国产成人一区二区精品非洲 | 久久婷婷开心 | 国产精品久久久久一区二区三区共 | 波多野结衣网址 | 美女视频黄是免费的 | 日韩视频中文字幕在线观看 | 国产一二区免费视频 | 欧美精品久久久久a | 日韩三级视频在线观看 | 91精品1区2区 | 亚州国产精品视频 | 欧美视频在线观看免费网址 | 深爱开心激情 | 久久香蕉国产精品麻豆粉嫩av | 97超碰人人澡 | 九七在线视频 | 最新国产中文字幕 | 又爽又黄又刺激的视频 | 香蕉网在线播放 | 国产精品久久久久免费观看 | 国产精品麻豆视频 | 人人爱在线视频 | 亚洲黄色成人av | 少妇bbw揉bbb欧美 | 亚洲成人精品久久 | 久久久av电影 | 狠狠色伊人亚洲综合网站色 | www亚洲国产 | 日韩极品在线 | 国内99视频 | 久久99国产精品久久99 | 亚洲性少妇性猛交wwww乱大交 | 欧美巨大| 中文字幕在线影院 | 天天插天天爽 | 国内精品久久影院 | 日本精品久久久久中文字幕5 | 福利视频一二区 | 成人一级黄色片 | 国产成人在线一区 | 99视频在线精品 | 欧美午夜理伦三级在线观看 | 国产高清在线看 | 91精品国产乱码久久桃 | 亚洲国产美女精品久久久久∴ | 色爱区综合激月婷婷 | 亚洲成人精品久久 | 天天拍天天干 | 国产精品毛片久久久久久久久久99999999 | 黄色日本免费 | 日韩视频欧美视频 | av丝袜制服 | 久草在线免 | 欧美日韩三级在线观看 | www天天干| 日韩69av | 这里只有精品视频在线观看 | 国产精品美女久久久久久久久久久 | 亚洲乱码在线观看 | 黄色大全免费观看 | 免费精品在线视频 | 国产小视频你懂的在线 | 69国产盗摄一区二区三区五区 | 精品亚洲欧美无人区乱码 | 中文字幕av在线不卡 | 九九九热精品 | 婷婷中文字幕在线观看 | 精精国产xxxx视频在线播放 | 婷婷99| 在线播放视频一区 | 香蕉视频在线视频 | 久久久91精品国产 | 久草综合在线观看 | 99精品国产99久久久久久97 | 免费视频你懂的 | 天天爱综合| 久青草国产在线 | 天天摸天天操天天爽 | 91亚洲精品久久久蜜桃 | 超碰在线色 | 国产综合片| 久久精品视频国产 | 精品久久久免费视频 | 亚洲成人免费在线 | 国产一区久久久 | 欧美二区视频 | 国产免费成人 | 综合色狠狠 | 日本午夜在线亚洲.国产 | 精品成人国产 | 波多野结衣亚洲一区二区 | 一级欧美日韩 | 在线视频 一区二区 | 亚洲国产人午在线一二区 | 日韩专区一区二区 | 久久精品成人欧美大片古装 | 成人午夜影院在线观看 | 中午字幕在线观看 | 天天干天天干天天射 | 99综合电影在线视频 | 九热在线 | 最新国产精品久久精品 | 特级黄录像视频 | 视频国产在线观看18 | 久久婷婷色综合 | www国产精品com | 久久国语露脸国产精品电影 | 午夜精品久久久久99热app | 国产原创在线 | 久久婷婷视频 | 欧美大片aaa | 中文有码在线 | 性色av免费在线观看 | 中文字幕视频播放 | a级国产毛片 | 免费在线观看成人 | 日韩精品一区二区三区水蜜桃 | 日韩高清片 | 欧美成人精品欧美一级乱黄 | 岛国av在线免费 | 91亚洲精品久久久久图片蜜桃 | 国产色在线观看 | 在线免费观看视频 | 丁香av| 在线看黄色av | 日本不卡一区二区三区在线观看 | 国产一区欧美日韩 | 中文字幕在线播放av | 成人久久综合 | 91精品麻豆 | 一区二区三区手机在线观看 | 波多野结衣网址 | 成年人毛片在线观看 | 丁香六月伊人 | 麻豆91在线看 | 曰本三级在线 | 欧美在线a视频 | 久久五月天色综合 | 91精品国产成人观看 | 天堂av免费在线 | 九九免费观看视频 | 亚洲精品免费在线观看视频 | 国产特级毛片aaaaaaa高清 | 久精品在线 | 麻豆高清免费国产一区 | av看片网| www.日日日.com | 五月婷婷激情 | 午夜国产在线观看 | 日韩视频欧美视频 | 成人黄色毛片 | 成人av电影在线 | 欧美性性网 | 久久久久久久久久久久久久免费看 | 久久在线免费视频 | 青青射| 日韩欧美国产成人 | 91中文在线 | 四虎在线视频 | 伊人黄| 久久www免费视频 | 九九热在线免费观看 | 97色婷婷成人综合在线观看 | 九九免费在线观看视频 | 亚洲欧美精品一区二区 | 蜜臀久久99精品久久久无需会员 | 久久精品aaa | 啪嗒啪嗒免费观看完整版 | 日韩电影在线观看中文字幕 | 少妇搡bbbb搡bbb搡忠贞 | 天天摸日日摸人人看 | 中文字幕在线观看第二页 | 日韩在线二区 | 成人av电影网址 | 精品久久国产一区 | 日韩欧美高清不卡 | 久久免费国产电影 | 亚洲精品视频中文字幕 | 欧洲亚洲女同hd | 99久久99久久精品国产片 | 国产真实在线 | 天天射天天射 | 久久久久久久久精 | 亚洲人成综合 | www久久精品 | 国产一级在线观看视频 | 在线免费亚洲 | 国产精品日韩欧美一区二区 | 狠狠色狠狠色综合系列 | 美女视频黄免费网站 | 国产精品视频不卡 | 亚洲视频h | 国产精品视频地址 | 久久久久久不卡 | 日韩av影视在线观看 | 操操操影院| 国产麻豆视频在线观看 | 久久久香蕉视频 | 色综合久久88 | 韩国精品福利一区二区三区 | 天天操天天舔天天爽 | 国产福利一区二区三区在线观看 | 国产精品原创视频 | 欧美一区二区三区免费看 | 国产精品久久久久久久电影 | 在线精品观看 | 国产性xxxx| 中文字幕影片免费在线观看 | 久久国产精品色婷婷 | 一区国产精品 | 亚洲一级性 | 婷婷五情天综123 | 精品夜夜嗨av一区二区三区 | 在线午夜电影神马影院 | 69精品在线观看 | 日韩理论影院 | 天天干天天操人体 | 精品国产资源 | 久久久久久久久久久久亚洲 | 色婷婷亚洲精品 | 正在播放久久 | 黄色av电影一级片 | 精品国产伦一区二区三区观看说明 | 天天操天天色天天射 | 亚洲无吗视频在线 | 97**国产露脸精品国产 | 午夜久久久影院 | 黄色录像av | 伊人成人精品 | 中文字幕视频网站 | 三级黄色在线观看 | www.69xx| 狠狠操在线 | 国产精品2区 | 国产91免费在线观看 | 日本激情视频中文字幕 | 欧美va天堂va视频va在线 | 国产一区播放 | 成年人电影免费看 | 成人在线一区二区三区 | 国产欧美精品一区二区三区 | 久草在线视频免赞 | 久久激情电影 | 91精品在线免费视频 | 亚洲国产精品久久久 | 精品国产成人 | 日韩免费在线网站 | 日韩欧美精品一区二区三区经典 | 99久久99久久精品 | 久久一区二区三区日韩 | 久久久久久久电影 | 特级毛片aaa | 欧美最新另类人妖 | 国产成人精品999在线观看 | 国产成人精品久 | 国产成人久久精品一区二区三区 | 日韩视频区 | 成人久久久电影 | 久久精品香蕉 | 黄色免费观看视频 | 在线影视 一区 二区 三区 | 免费在线一区二区 | 中文字幕在线观看视频免费 | 波多野结衣电影一区二区 | 久久久久久久久黄色 | 国产福利一区二区在线 | 国产成人综合在线观看 | a黄色一级片| 欧美黑人xxxx猛性大交 | 99视频国产精品免费观看 | 91经典在线| 免费视频91蜜桃 | 亚洲精品三级 | 久久久精品国产一区二区电影四季 | 国偷自产中文字幕亚洲手机在线 | 国产精品k频道 | 天天操天天摸天天射 | 91在线看黄 | 色99中文字幕 | 五月天电影免费在线观看一区 | 99高清视频有精品视频 | 国产黄在线观看 | 日日干 天天干 | 中文字幕av免费观看 | www激情com| 久草免费看| 国产极品尤物在线 | 亚洲国产播放 | 成人国产精品久久久久久亚洲 | 在线免费视频 你懂得 | 国产日产精品一区二区三区四区 | 九九久久影视 | 精品a在线 | 超碰成人网 | 国产精品 9999 | 亚洲精品视频在线观看网站 | 欧美色图亚洲图片 | 视频1区2区 | 一级片色播影院 | 91精品一区二区三区蜜桃 | 十八岁以下禁止观看的1000个网站 | 久久论理 | 91麻豆精品一区二区三区 | 国产精品视频内 | 国产一二区免费视频 | 天天爱天天射天天干天天 | 五月天六月婷 | 国产精品九色 | av综合在线观看 | 亚洲精品字幕在线 | 欧美精品一级视频 | 亚洲黄色av| 国产精品久久久久久久久久久免费 | 亚洲精品国产区 | 欧美日韩免费视频 | 欧美污污视频 | 日韩综合色 | 99热精品国产一区二区在线观看 | 免费观看黄色av | 国产亚洲精品久久久久久移动网络 | 婷婷久久综合九色综合 | 中文字幕一区二区三区四区 | 91av视频免费在线观看 | 亚洲欧美在线观看视频 | 色婷婷久久久综合中文字幕 | 美女视频一区二区 | 激情深爱五月 | www.福利| 国产精品一区二区av | 精品久久久影院 | 精品在线视频一区 | 亚洲国产日韩一区 | 久久精品精品电影网 | 国产成人资源 | 欧美福利在线播放 | 国内免费久久久久久久久久久 | 最近日本字幕mv免费观看在线 | 亚洲va在线va天堂 | 日韩精品一区二区三区中文字幕 | 91精品久久久久久久久久入口 | 亚洲综合色视频在线观看 | 亚洲综合成人专区片 | 青青视频一区 | 99久久国产免费看 | 99精品美女 | 久久短视频 | 成全在线视频免费观看 | 麻豆手机在线 | 亚洲精品国 | 亚洲综合欧美日韩狠狠色 | 国产一区二区在线影院 | 久久久久麻豆 | 日本黄色黄网站 | 国产精品精品久久久久久 | 丁香婷婷激情网 | 午夜视频在线观看欧美 | 亚洲精品美女在线观看 | 亚洲国产成人在线播放 | 九九综合久久 | 国产精品 日韩 | 国产91精品一区二区绿帽 | 久久图| 亚洲精品伦理在线 | 久久婷婷丁香 | 黄色在线观看免费 | 九色最新网址 | 伊人五月 | 中文字幕亚洲国产 | 日韩三级在线观看 | 9999毛片| 天天艹天天干天天 | 亚洲一区二区视频在线 | 午夜精品久久一牛影视 | 日韩欧美xxx| 免费在线观看国产精品 | 天天射网 | 国产一区二区三精品久久久无广告 | 国产丝袜高跟 | 日韩成人精品一区二区 | 日韩精品久久久久久 | 欧美一级性生活片 | www.夜夜夜| 不卡电影免费在线播放一区 | 久久久久国产精品一区二区 | 在线观看国产一区二区 | 婷婷五月在线视频 | 国产精品久久电影观看 | 99久久久久久久 | 国产欧美日韩一区 | 日韩一区精品 | 在线精品视频免费播放 | 99热只有精品在线观看 | 最近高清中文字幕在线国语5 | 丁香九月婷婷 | 日本久久久久久科技有限公司 | 黄色小说在线免费观看 | 91av在线国产 | 欧美一级小视频 | 久草网视频在线观看 | 99国产精品免费网站 | 久久久在线视频 | 日本成人中文字幕在线观看 | 999日韩| 亚洲电影黄色 | 99在线观看免费视频精品观看 | 91毛片在线观看 | 国产精品美女毛片真酒店 | 精品免费在线视频 | 欧美激情综合五月色丁香 | 99精品国产一区二区三区不卡 | 99精品在线免费在线观看 | 亚洲激情综合 | 成人毛片一区 | 人人爽久久久噜噜噜电影 | 日韩中文久久 | 亚洲视频h | av资源免费看 | 国产精品久久久久久爽爽爽 | 成年人免费av | 久久最新网址 | 高清中文字幕 | 国产丝袜网站 | 久久免费播放视频 | 国产在线久久久 | 日韩激情免费视频 | 国产精品一区二区无线 | 亚洲精品综合久久 | 亚洲男模gay裸体gay | 国产美女视频一区 | 日韩黄色大片在线观看 | 精品久操 | 六月丁香婷婷久久 | 激情五月婷婷综合 | 日韩午夜在线观看 | 久久久久女教师免费一区 | 日韩深夜在线观看 | 久久精品2 | 国产手机av在线 | 久久久精品久久日韩一区综合 | 欧美精品一区二区蜜臀亚洲 | 亚洲精品在线视频播放 | 高清色免费| 波多野结衣一区三区 | 亚洲欧美日韩一二三区 | 午夜视频在线网站 | 国产网红在线观看 | 午夜av一区二区三区 | 在线观看视频日韩 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 美女久久久久久 | 久久综合精品一区 | 日韩一区二区三区在线观看 | 亚洲精品午夜国产va久久成人 | 欧美日韩国产在线精品 | 精品久久久久亚洲 | 日韩视频免费看 | 中文字幕一区二区在线播放 | 91视频国产免费 | 亚洲综合在线播放 | 亚洲男男gaygay无套 | 成人av网站在线观看 | 五月婷婷播播 | 日日干天天 | 国产精品一区二区久久国产 | 亚洲精品乱码久久久久v最新版 | 亚洲在线视频免费观看 | 久久呀| av一级免费 | 麻豆首页 | 五月婷婷色综合 | 国产成人av在线影院 | 国产激情小视频在线观看 | 在线高清一区 | 日本精a在线观看 | av黄免费看| av福利电影 | 久久久精品国产一区二区电影四季 | 中文字幕在线观看第三页 | 91麻豆精品国产91久久久使用方法 | 六月丁香婷 | 一区二区三区日韩在线 | 色99导航 | 亚洲精品在线播放视频 | 九九热精品视频在线观看 | 国产字幕在线看 | 手机在线观看国产精品 | 亚洲精品资源在线 | 911久久香蕉国产线看观看 | 在线观看日韩精品视频 | 亚洲欧洲久久久 | 亚洲免费一级电影 | 日韩在线字幕 |