锘??xml version="1.0" encoding="utf-8" standalone="yes"?>春暖花开亚洲性无区一区二区 ,欧美亚洲精品一区二区,亚洲已满18点击进入在线观看http://www.tkk7.com/zyl/category/17749.html濂藉ソ瀛︿範(fàn)錛屽ぉ澶╁悜涓?/description>zh-cnTue, 27 Feb 2007 19:37:30 GMTTue, 27 Feb 2007 19:37:30 GMT60鍏充簬spring 2.0鑷畾涔墄ml 鏍囪 錛堜簩 濡備綍瀹炵幇錛?/title><link>http://www.tkk7.com/zyl/archive/2006/10/27/77708.html</link><dc:creator>甯冭。閮?/dc:creator><author>甯冭。閮?/author><pubDate>Fri, 27 Oct 2006 10:18:00 GMT</pubDate><guid>http://www.tkk7.com/zyl/archive/2006/10/27/77708.html</guid><wfw:comment>http://www.tkk7.com/zyl/comments/77708.html</wfw:comment><comments>http://www.tkk7.com/zyl/archive/2006/10/27/77708.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/zyl/comments/commentRss/77708.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/zyl/services/trackbacks/77708.html</trackback:ping><description><![CDATA[     鎽樿: 鐪嬩簡(jiǎn)spring test 鐢ㄤ緥錛屽叾瀹炲疄鐜拌繖涓鍔熻兘榪樼畻姣旇緝綆鍗曪紝涓昏鍒嗕互涓嬬殑姝ラ錛屽叿浣撶殑瀹炰緥鍙互鍘誨弬鑰僺pring 鑷甫鐨則estcase棣栧厛瀹氫箟鐩稿叧xsd鏂囦歡錛岀敤浜庨獙璇佺浉搴旂殑琛屼負(fù)錛毬?涓昏澧炲姞浜?涓嚜瀹氫箟鍏冪礌鍜?涓睘鎬э細(xì)<?xml version="1.0" encoding="UTF-8" standalone="no"?>聽聽聽 <xsd:schema xmlns="htt...  <a href='http://www.tkk7.com/zyl/archive/2006/10/27/77708.html'>闃呰鍏ㄦ枃</a><img src ="http://www.tkk7.com/zyl/aggbug/77708.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/zyl/" target="_blank">甯冭。閮?/a> 2006-10-27 18:18 <a href="http://www.tkk7.com/zyl/archive/2006/10/27/77708.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍏充簬spring 2.0鑷畾涔墄ml 鏍囪 錛堜竴 涓昏鐨勭浉鍏崇被錛?/title><link>http://www.tkk7.com/zyl/archive/2006/10/27/77707.html</link><dc:creator>甯冭。閮?/dc:creator><author>甯冭。閮?/author><pubDate>Fri, 27 Oct 2006 10:08:00 GMT</pubDate><guid>http://www.tkk7.com/zyl/archive/2006/10/27/77707.html</guid><wfw:comment>http://www.tkk7.com/zyl/comments/77707.html</wfw:comment><comments>http://www.tkk7.com/zyl/archive/2006/10/27/77707.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/zyl/comments/commentRss/77707.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/zyl/services/trackbacks/77707.html</trackback:ping><description><![CDATA[聽 鍦╯pring 2.0 涓紝澧炲姞浜?jiǎn)鑷畾涔墄ml鏍囪榪欎竴閲嶅ぇ鐨勫姛鑳姐備笅闈富瑕佺湅涓涓媠pring 2.0瀹炵幇榪欎竴鍔熻兘鐨勪富瑕佺浉鍏崇被錛?br /><br />聽<b>NamespaceHandlerResolver錛堟帴鍙o級(jí)</b><br />聽聽聽 鐢盌efaultBeanDefinitionDocumentReader浣跨敤錛岀敤浜庡畾浣峃amespaceHandler錛屾寚瀹氱壒瀹氱殑鍛藉悕絀洪棿uri<br /><br />聽聽 瀹炵幇綾伙細(xì)<br />聽聽 <b>DefaultNamespaceHandlerResolver</b><br />聽聽 <br />聽聽 閫氳繃map 淇濆瓨鎵鏈夌殑瀵瑰簲鍏崇郴<br />聽聽 榛樿浣跨敤spring.handlers鏂囦歡鏉ヤ繚瀛樻墍鏈夌殑handlers<br />聽聽 鍙互瀹氫箟鍏朵粬鐨刲ocation 濡傦細(xì)<br /><br />聽聽 String location = "org/springframework/beans/factory/xml/support/customNamespace.properties";<br />聽聽 NamespaceHandlerResolver resolver = new DefaultNamespaceHandlerResolver(getClass().getClassLoader(), location);<br />聽聽 <br />聽聽<b> NamespaceHandler錛堟帴鍙o級(jí)<br />聽聽聽 <br /></b>聽聽聽聽聽 鍩虹鎺ュ彛錛岀敤浜嶥efaultBeanDefinitionDocumentReader澶勭悊鑷畾涔夊懡鍚嶇┖闂淬?br />聽聽聽聽聽 鏂規(guī)硶錛?br />聽聽聽聽 聽聽聽 void init();<br />聽聽聽聽聽聽聽聽 鐢盌efaultBeanDefinitionDocumentReader璋冪敤鍦ㄦ瀯閫犲畬鍚庝絾鍦ㄨВ鏋愯嚜瀹氫箟鍏冪礌鍓嶃?br />聽 <br />聽聽 聽聽聽聽聽 BeanDefinition parse(Element element, ParserContext parserContext);<br />聽聽聽聽聽聽聽聽 瑙f瀽鎸囧畾鐨勫厓绱犮?br />聽 <br />聽聽 聽 聽 聽 BeanDefinitionHolder decorate(Node element, <br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 BeanDefinitionHolder definition, <br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ParserContext parserContext);<br />聽聽聽聽聽聽聽聽 鎵ц鐩稿簲鐨勪慨楗般?br /><br />聽聽 瀹炵幇綾伙細(xì)<br />聽聽聽聽 <br />聽聽聽聽 <b>NamespaceHandlerSupport錛堟娊璞$被錛?/b><br />聽聽 <br />聽聽 涓昏鐨勪笁涓柟娉曪細(xì)<br />聽聽 protected final void registerBeanDefinitionDecorator(<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 String elementName, <br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 BeanDefinitionDecorator decorator)<br />聽聽 娉ㄥ唽decorator錛岄氳繃element<br />聽 <br />聽聽 protected final void registerBeanDefinitionDecoratorForAttribute(<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 String attributeName, <br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 BeanDefinitionDecorator decorator)<br />聽聽聽 娉ㄥ唽decorator錛岄氳繃attr<br />聽聽 <br />聽聽聽 protected final void registerBeanDefinitionParser(<br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 String聽 elementName, <br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 BeanDefinitionParser parser)<br />聽聽聽 娉ㄥ唽BeanDefinitionParser錛岄氳繃element<br /><br />聽聽 瀹為檯鐨勬搷浣滅敱鍏蜂綋鐨凚eanDefinitionDecorator 鎴栬匓eanDefinitionParser 鎵ц<br /><br />聽 <b>BeanDefinitionDecorator(鎺ュ彛)</b><br /><br />聽聽 瑁呴グ鐩稿叧鐨勮嚜瀹氫箟灞炴с?br /><br />聽聽聽聽 AbstractInterceptorDrivenBeanDefinitionDecorator<br />聽聽聽聽聽聽聽聽聽 鐢ㄤ簬娉ㄥ唽鐩稿簲鐨処nterceptor bean 瀹氫箟錛屼嬌鐢╝op浠g悊<br /><br />聽 <b>鍏朵粬綾伙細(xì)<br /><br /></b>聽聽聽 PluggableSchemaResolver錛岀敤浜庤嚜瀹氫箟鐩稿叧鐨剆chema,榛樿鐨剆chema 淇濆瓨浜巗pring.schemas鏂囦歡涓?br /><br />聽聽聽 鍙互閫氳繃瑕嗙洊resolveEntity鏂規(guī)硶鏉ヨ杞界浉搴旂殑鑷畾涔墄sd鏂囦歡<br /><br /><b>聽 涓昏鐨勬墽琛岀被錛?br />聽 </b><br />聽 XmlBeanDefinitionReader<br />聽 <br />聽聽聽 鐢ㄤ簬澶勭悊鐩稿簲鐨勮鍙栧伐浣滐紝鍏跺疄涓昏鐨勫伐浣滃媧劇粰BeanDefinitionDocumentReader<br /><br /><br />聽 瀹為檯鐨勭被錛屽氨浠嬬粛鍒拌繖錛屼笅涓鑺傞氳繃瀹炰緥鏉ヨ鏄庡浣曞畾涔夎嚜瀹氫箟xml 鍏冪礌<br /><b><br /></b><br /><br /><br /><br /><br /><img src ="http://www.tkk7.com/zyl/aggbug/77707.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/zyl/" target="_blank">甯冭。閮?/a> 2006-10-27 18:08 <a href="http://www.tkk7.com/zyl/archive/2006/10/27/77707.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>spring 2.0 鍏充簬浜嬪姟鐨勫彉鍖栵紙涓昏涓哄0鏄庢т簨鍔★級(jí)http://www.tkk7.com/zyl/archive/2006/09/18/70364.html甯冭。閮?/dc:creator>甯冭。閮?/author>Mon, 18 Sep 2006 12:13:00 GMThttp://www.tkk7.com/zyl/archive/2006/09/18/70364.htmlhttp://www.tkk7.com/zyl/comments/70364.htmlhttp://www.tkk7.com/zyl/archive/2006/09/18/70364.html#Feedback0http://www.tkk7.com/zyl/comments/commentRss/70364.htmlhttp://www.tkk7.com/zyl/services/trackbacks/70364.html鍦?1.x涓紝spring 鐨勪簨鍔″0鏄庯紝涓鐩存槸閲囩敤鍔ㄦ佷唬鐞哹ean 瀹炵幇鐨勶紝涔熷氨鏄噰鐢?span style="font-size: 10.5pt; font-family: 'Times New Roman';" lang="EN-US">ProxyFactoryBean鎴栬呭瓙綾?span style="font-size: 10.5pt; font-family: 'Times New Roman';" lang="EN-US">TransactionProxyFactoryBean鏉ュ疄鐜扮殑

鑰冭檻涓嬮潰鐨勪緥瀛愶細(xì)(鐢?.x瀹炵幇錛?br /><bean id="myTxManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
聽聽聽 <property name="sessionFactory" ref="mySessionFactory"/>
聽 </bean>

聽 <bean id="myProductService" class="org.springframework.aop.framework.ProxyFactoryBean">
聽聽聽 <property name="proxyInterfaces" value="product.ProductService"/>
聽聽聽 <property name="target">
聽聽聽聽聽聽聽 <bean class="product.DefaultProductService">
聽聽聽聽聽聽聽聽聽聽聽 <property name="productDao" ref="myProductDao"/>
聽聽聽聽聽聽聽 </bean>
聽聽聽 </property>
聽聽聽 <property name="interceptorNames">
聽聽聽聽聽 <list>
聽聽聽聽聽聽聽 <value>myTxInterceptor</value> <!-- the transaction interceptor (configured elsewhere) -->
聽聽聽聽聽 </list>
聽聽聽 </property>
聽 </bean>

聽<bean id="myTxInterceptor"

class="org.springframework.transaction.interceptor.TransactionInterceptor">

<property name="transactionManager">

聽聽 <ref bean="myTransactionManager"/>

</property>

<property name="transactionAttributeSource">

聽 <value>

聽聽 product.ProductService.increasePrice*=PROPAGATION_REQUIRED

聽 product.ProductService.someOtherBusinessMethod=PROPAGATION_MANDATORY

聽 </value>

</property>

</bean>

鎴栬?br />

<bean id="myProductService"

class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

<property name="transactionManager">

<ref bean="myTransactionManager"/>

</property>

<property name="target">

<ref bean="myProductServiceTarget"/>

</property>

<property name="transactionAttributes">

<props>

<prop key="increasePrice*">PROPAGATION_REQUIRED</prop>

<prop key="someOtherBusinessMethod">PROPAGATION_MANDATORY</prop>

</props>

</property>
</bean>

褰撶劧錛岃繖闇瑕佹瘡涓湇鍔℃帴鍙i兘瑕佸0鏄庝竴涓簨鍔ean 錛岃繖姣旇緝楹葷儲(chǔ)錛屽綋鐒?dòng)灱宻pring 涔熸彁渚涗簡(jiǎn)鍙﹀涓縐嶈В鍐蟲柟妗?br />
閲囩敤BeanNameAutoProxyCreator 鑷姩浠g悊澹版槑鍏ュ彛鏉ュ叏灞澹版槑鎵鏈夌殑浜嬪姟銆?br /><bean id="matchAllWithPropReq"
聽聽聽聽聽聽聽聽聽class="org.springframework.transaction.interceptor.MatchAlwaysTransactionAttributeSource">
聽聽聽聽聽聽聽聽聽<property name="transactionAttribute"><value>PROPAGATION_REQUIRED</value></property>
</bean>

<bean id="matchAllTxInterceptor"
聽聽聽聽聽聽聽聽聽class="org.springframework.transaction.interceptor.TransactionInterceptor">
聽聽聽聽聽聽聽聽聽<property name="transactionManager"><ref bean="transactionManager"/></property>
聽聽聽聽聽聽聽聽聽<property name="transactionAttributeSource"><ref bean="matchAllWithPropReq"/></property>
</bean>
<bean id="autoProxyCreator"
聽聽聽聽聽聽聽聽聽class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
聽聽聽聽聽聽聽聽聽<property name="interceptorNames">
聽聽聽聽聽聽聽聽聽聽聽聽<list>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<idref local="matchAllTxInterceptor"/>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<idref bean="hibInterceptor"/>
聽聽聽聽聽聽聽聽聽聽聽聽</list>
聽聽聽聽聽聽聽聽聽</property>
聽聽聽聽聽聽聽聽聽<property name="beanNames">
聽聽聽聽聽聽聽聽聽聽聽聽<list>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<idref local="core-services-applicationControllerSevice"/>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<idref local="core-services-deviceService"/>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<idref local="core-services-authenticationService"/>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<idref local="core-services-packagingMessageHandler"/>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<idref local="core-services-sendEmail"/>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<idref local="core-services-userService"/>

聽聽聽聽聽聽聽聽聽聽聽聽</list>
聽聽聽聽聽聽聽聽聽</property>
</bean>
list涓寘鍚簡(jiǎn)鎵鏈夐渶瑕佸疄鐜頒簨鍔$殑鏈嶅姟bean聽

聽spring 2.0甯︽潵鐨刟op鍙樺寲鍜宐ean xml schema鐨勫彉鍖栵紝浣垮緱浜嬪姟鐨勫鐞嗗彉寰楁洿鍔犵殑綆鍗?
鍚宎op涓鏍鳳紝浜嬪姟涔熼噰鐢ㄤ袱縐嶆柟寮忔潵澶勭悊錛屼竴縐嶄富瑕佷負(fù)xml 澹版槑錛屽彟澶栫殑涓縐嶄篃灝辨槸娉ㄩ噴鐨勫紩鍏ャ?br />鍏堟潵鐪嬬涓縐嶆儏鍐碉細(xì)
<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"
聽聽聽聽聽聽 xmlns:tx="http://www.springframework.org/schema/tx"
聽聽聽聽聽聽 xsi:schemaLocation="
聽聽聽聽聽聽 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
聽聽聽聽聽聽 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
聽聽聽聽聽聽 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
">

<!-- SessionFactory, DataSource, etc. omitted -->

聽 <bean id="myTxManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
聽聽聽 <property name="sessionFactory" ref="mySessionFactory"/>
聽 </bean>

聽 <aop:config>
聽聽 <!-- 榪欏畾涔変簡(jiǎn)涓昏鐨勫垏闈紝涔熷氨鏄偅浜涙帴鍙e彲浠ヤ嬌鐢ㄤ簨鍔?榪欓噷鍙槸璇存墽琛?font color="#000000">ProductService鐨勬墍鏈夋柟娉?/font>-->
聽聽聽 <aop:pointcut id="productServiceMethods" expression="execution(* product.ProductService.*(..))"/>
聽聽聽 <aop:advisor advice-ref="txAdvice" pointcut-ref="productServiceMethods"/>
聽 </aop:config>
聽聽<!--涓昏鐨勪簨鍔?advice 澹版槑浜嬪姟鐨勭浉鍏沖睘鎬?->
聽 <tx:advice id="txAdvice" transaction-manager="myTxManager">
聽聽聽 <tx:attributes>
聽聽聽聽聽 <tx:method name="increasePrice*" propagation="REQUIRED"/>
聽聽聽聽聽 <tx:method name="someOtherBusinessMethod" propagation="REQUIRES_NEW"/>
聽聽聽聽聽 <tx:method name="*" propagation="SUPPORTS" read-only="true"/>
聽聽聽 </tx:attributes>
聽 </tx:advice>

聽 <bean id="myProductService" class="product.SimpleProductService">
聽聽聽 <property name="productDao" ref="myProductDao"/>
聽 </bean>

</beans>

絎簩縐嶆柟寮忥紝浣跨敤 @Transactional 娉ㄩ噴

@Transactional

public interface FooService {

聽聽聽 Foo getFoo(String fooName);

聽聽聽 Foo getFoo(String fooName, String barName);

聽聽聽 void insertFoo(Foo foo);

聽聽聽 void updateFoo(Foo foo);

}


xml 閰嶇疆

<!-- from the file 'context.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:aop="http://www.springframework.org/schema/aop"

聽聽聽聽聽聽 xmlns:tx="http://www.springframework.org/schema/tx"

聽聽聽聽聽聽 xsi:schemaLocation="

聽聽聽聽聽聽 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

聽聽聽聽聽聽 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd

聽聽聽聽聽聽 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

<!-- this is the service object that we want to make transactional -->

<bean id="fooService" class="x.y.service.DefaultFooService"/>

<!-- enable the configuration of transactional behavior based on annotations -->

<tx:annotation-driven/>

<!-- a PlatformTransactionManager is still required -->

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

聽聽聽 <!-- sourced from somewhere else -->

聽聽聽 <property name="dataSource" ref="dataSource"/>

</bean>

<!-- other <bean/> definitions here -->

</beans>

public class DefaultFooService implements FooService {

聽聽聽 public Foo getFoo(String fooName) {

聽聽聽聽聽聽聽 // do something

聽聽聽 }

聽聽聽 // these settings have precedence

聽聽 @Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)

聽聽聽 public void updateFoo(Foo foo) {

聽聽聽聽聽聽聽 // do something

聽聽聽 }

}



]]>
spring aop 2.0 緙栫▼(涓?http://www.tkk7.com/zyl/archive/2006/09/17/70116.html甯冭。閮?/dc:creator>甯冭。閮?/author>Sun, 17 Sep 2006 03:13:00 GMThttp://www.tkk7.com/zyl/archive/2006/09/17/70116.htmlhttp://www.tkk7.com/zyl/comments/70116.htmlhttp://www.tkk7.com/zyl/archive/2006/09/17/70116.html#Feedback4http://www.tkk7.com/zyl/comments/commentRss/70116.htmlhttp://www.tkk7.com/zyl/services/trackbacks/70116.html鍓嶉潰榪欐槸璁蹭簡(jiǎn)璁稿鐨勬蹇碉紝涓嬮潰浠ヤ竴涓緥瀛愭潵璇存槑錛?br />涓涓緢濂界悊瑙g殑aop 渚嬪瓙錛屼篃灝辨槸鏃ュ織鏈嶅姟銆?br />鍏堜粠aop絎竴縐嶆柟寮忔潵瀹炵幇錛屼篃灝辨槸xml閰嶇疆鏂瑰紡
鍏堝垱寤哄熀鏈殑鏃ュ織綾伙細(xì)
public class Logger {

聽聽聽 private static Log log = LogFactory.getLog(Logger.class);

聽聽聽 public void entry(String message) {
聽聽聽聽聽聽聽 log.info(message);
聽聽聽 }
}
榪欓噷鍙槸綆鍗曠殑涓涓柟娉曪紝褰撶劧瀹為檯鎯呭喌鍙兘涓嶅悓銆?br />鐢變簬xml閰嶇疆闇瑕佷竴涓柟闈㈢殑瀹炵幇bean
鎵浠ュ垱寤轟竴涓畝鍗曠殑bean 錛?br />public class LogBean {

聽聽聽 private Logger logger = new Logger();

聽聽聽 public Object aroundLogCalls(ProceedingJoinPoint joinPoint) throws Throwable {
聽聽聽聽聽聽聽 logger.entry("before invoke method:"
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 + joinPoint.getSignature().getName());
聽聽聽聽聽聽聽 Object object = joinPoint.proceed();
聽聽聽聽聽聽聽 logger.entry("after invoke method:"
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 + joinPoint.getSignature().getName());
聽聽聽聽聽聽聽 return object;
聽聽聽 }
}
榪欓噷閲囧彇綆鍗曠殑around advice錛屽叾浠栫被鍨嬬殑advice 鍩烘湰涓婇兘宸笉澶?br />
褰撶劧鏈変簡(jiǎn)榪欎袱涓牳蹇?jī)鐨勬棩蹇椌c伙紝闇瑕佷竴涓祴璇曠被錛岀敤浜庢祴璇曘?br />public class TestBean {

聽聽聽 public void method1() {
聽聽聽聽聽聽聽 System.out.println("in method1");
聽聽聽 }

聽聽聽 public void method2() {
聽聽聽聽聽聽聽 System.out.println("in method2");
聽聽聽 }
}
榪欏氨鏄渶瑕佹祴璇曠殑綾諱簡(jiǎn)錛岄渶瑕佽褰曟棩蹇楃殑鏂規(guī)硶鍙湁涓や釜錛岃繖閲岀敤System.out.println錛屽彧鏄兂鏄劇ず鏂規(guī)硶鐨勮皟鐢ㄩ『搴忋?br />

鐒跺悗鍏抽敭鐨勫湪浜巟ml鐨勯厤緗簡(jiǎn)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="聽xmlns:xsi="聽xmlns:aop="http://www.springframework.org/schema/aop"
聽xsi:schemaLocation="
http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsd">

聽<aop:config>
聽聽聽聽<!--聽聽expression 琛ㄧず瑕佹墽琛岀殑鍖歸厤琛ㄨ揪寮忥紝榪欓噷鍖歸厤鎵鏈夌殑public鏂規(guī)硶錛屼絾鏄幓闄ogger綾葷殑鎵鏈夋柟娉曪紝闃叉鏃犻檺璋冪敤-->

聽聽聽聽聽聽<aop:pointcut id="loggableCalls"
聽聽聽聽聽聽聽聽聽 expression="execution(public * *(..)) and !execution(* org.spring.test.aop.log.Logger.*(..))"/>


聽聽<aop:aspect id="logAspect" ref="logBean">
聽聽聽<aop:around pointcut-ref="loggableCalls" method="aroundLogCalls"/>
聽聽</aop:aspect>

聽</aop:config>
聽<bean id="logBean" class="org.spring.test.aop.log.LogBean" />
聽<bean id="testBean" class="org.spring.test.aop.log.TestBean"/>

</beans>

鐜板湪鍐欎竴涓祴璇曠被錛?br />
public class LogXmlTest extends RootTest {

聽聽聽 @Override
聽聽聽 protected String getBeanXml() {
聽聽聽聽聽聽聽 return "org/spring/test/aop/log/bean.xml";
聽聽聽 }

聽聽聽 public void testLog() {
聽聽聽聽聽聽聽 TestBean bean = (TestBean) ctx.getBean("testBean");
聽聽聽聽聽聽聽 bean.method1();
聽聽聽聽聽聽聽 bean.method2();
聽聽聽 }

}

public abstract class RootTest extends TestCase {

聽聽聽 protected ApplicationContext聽 ctx;

聽聽聽 protected Log log = LogFactory.getLog(getClass());

聽聽聽 protected RootTest() {
聽聽聽聽聽聽聽 ctx = new ClassPathXmlApplicationContext(getBeanXml());
聽聽聽 }

聽聽聽 protected abstract String getBeanXml();

}

鎵撳嵃鐨勬秷鎭涓嬶細(xì)
2006-09-17 11:08:28,203 INFO [org.spring.test.aop.log.Logger] - before invoke method:method1
in method1
2006-09-17 11:08:28,203 INFO [org.spring.test.aop.log.Logger] - after invoke method:method1
2006-09-17 11:08:28,218 INFO [org.spring.test.aop.log.Logger] - before invoke method:method2
in method2
2006-09-17 11:08:28,218 INFO [org.spring.test.aop.log.Logger] - after invoke method:method2

絎簩縐嶅疄鐜版柟寮忥紝閲囩敤娉ㄩ噴鏂瑰紡錛?br />
Logger 綾諱笉鍙?br />鍒涘緩涓涓狶ogAspect綾?br />@Aspect
public class LogAspect {

聽聽聽 private Logger logger = new Logger();

聽聽聽 @Pointcut("execution(public * *(..))")
聽聽聽 public void publicMethods() {

聽聽聽 }

聽聽聽 @Pointcut("execution(* org.spring.test.aop.log.Logger.*(..))")
聽聽聽 public void logObjectCalls() {

聽聽聽 }

聽聽 @Pointcut("publicMethods()&&!logObjectCalls()")
聽聽聽 public void loggableCalls() {

聽聽聽 }

聽聽聽 @Around("loggableCalls()")
聽聽聽 public Object aroundLogCalls(ProceedingJoinPoint joinPoint) throws Throwable {
聽聽聽聽聽聽聽 logger.entry("before invoke method:"
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 + joinPoint.getSignature().getName());
聽聽聽聽聽聽聽 Object object = joinPoint.proceed();
聽聽聽聽聽聽聽 logger.entry("after invoke method:"
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 + joinPoint.getSignature().getName());
聽聽聽聽聽聽聽 return object;
聽聽聽 }
}

閰嶇疆鏂囦歡灝辯畝鍗曞浜?br /><?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="聽xmlns:xsi="聽xmlns:aop="聽xsi:schemaLocation="
http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
聽<aop:aspectj-autoproxy/>

聽<!-- 鎴栬呬嬌鐢ㄤ互涓嬪畾涔?br />聽


聽<bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator" />

聽-->
聽<bean id="logAspect" class="org.spring.test.aop.log.LogAspect"/>
聽<bean id="testBean" class="org.spring.test.aop.log.TestBean"/>

</beans>

嫻嬭瘯綾伙細(xì)
璺熶笂闈㈢殑宸笉澶?br />鎶妜ml鏂囦歡鎹㈡帀灝辮

鎵撳嵃鐨勬柟寮忓樊涓嶅

涓漢榪樻槸姣旇緝鍠滄絎簩縐嶅疄鐜般?/p>

]]>
spring aop緙栫▼(浜?http://www.tkk7.com/zyl/archive/2006/09/15/69966.html甯冭。閮?/dc:creator>甯冭。閮?/author>Fri, 15 Sep 2006 11:31:00 GMThttp://www.tkk7.com/zyl/archive/2006/09/15/69966.htmlhttp://www.tkk7.com/zyl/comments/69966.htmlhttp://www.tkk7.com/zyl/archive/2006/09/15/69966.html#Feedback0http://www.tkk7.com/zyl/comments/commentRss/69966.htmlhttp://www.tkk7.com/zyl/services/trackbacks/69966.html鍓嶉潰涓昏浠嬬粛浜?jiǎn)濡備綍閫氳繃xml瀹炵幇aop緙栫▼錛屼笅闈富瑕佷粙緇嶅浣曢氳繃@AspectJ鏉ュ疄鐜般?br />涓轟簡(jiǎn)浣緻AspectJ 鏀寔鐢熸晥,
闇瑕佸仛浠ヤ笅姝ラ錛?br />鍦?/span>xml涓緗?/span>

<aop:aspectj-autoproxy/>

鎴栬?br />鍦▁ml涓姞鍏?br /><bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator" />

澹版槑 aspect

<bean id="myAspect" class="org.xyz.NotVeryUsefulAspect">

聽聽 <!-- configure properties of aspect here as normal -->

</bean>

package org.xyz;

import org.aspectj.lang.annotation.Aspect;

@Aspect

public class NotVeryUsefulAspect {

}

澹版槑 pointcut

@Pointcut("execution(* transfer(..))")

public void transfer() {}


澹版槑 advice

Before advice:

@Before("com.xyz.myapp.SystemArchitecture.dataAccessOperation()")

public void doAccessCheck() {

聽聽聽 // ...

}

After returning advice:

@AfterReturning("com.xyz.myapp.SystemArchitecture.dataAccessOperation()")

public void doAccessCheck() {

聽聽聽 // ...

}

鎴栬?/span>

@AfterReturning(
pointcut="com.xyz.myapp.SystemArchitecture.dataAccessOperation()",
returning="retVal")

public void doAccessCheck(Object retVal) {

聽聽聽 // ...

}

After throwing advice錛?o:p>

@AfterThrowing("SystemArchitecture.dataAccessOperation()")

public void doRecoveryActions() {

聽聽聽 // ...

}

鎴栬?/span>

@AfterThrowing(

聽聽聽 pointcut=" SystemArchitecture.dataAccessOperation()",

聽聽聽 throwing="ex")

public void doRecoveryActions(DataAccessException ex) {

聽聽聽 // ...

}

After (finally) advice錛?o:p>

@After("com.xyz.myapp.SystemArchitecture.dataAccessOperation()")

public void doReleaseLock() {

聽聽聽 // ...

}

Around advice錛?o:p>

@Around("com.xyz.myapp.SystemArchitecture.businessService()")

public Object doBasicProfiling( ProceedingJoinPoint pjp) throws Throwable {

聽聽聽 // start stopwatch

聽聽聽 Object retVal = pjp.proceed();

聽聽聽 // stop stopwatch

聽聽聽 return retVal;

}

Advice parameters錛?o:p>

@Before("com.xyz.myapp.SystemArchitecture.dataAccessOperation() &&" + "args(account,..)" )

public void validateAccount(Account account) {

// ...

}

澹版槑鍙傛暟鍚嶇О錛?/span>

@Before(

聽聽 value="com.xyz.lib.Pointcuts.anyPublicMethod() && " +

聽聽聽聽聽聽聽聽 "@annotation(auditable)",

argNames="auditable" )

public void audit(Auditable auditable) {

AuditCode code = auditable.value();

// ...

}

Advice 鎺掑簭錛?o:p>

涓鑸互澹版槑鐨勬柟娉曟搴忎負(fù)鍏堝悗

涓嶅悓鐨?/span> Advice 錛岄氳繃瀹炵幇 Ordered 鎺ュ彛錛屾潵鎺掑簭


Introductions

鐢ㄤ簬寮曞叆鏂扮殑鎺ュ彛

@Aspect

public class UsageTracking {

@DeclareParents(value="com.xzy.myapp.service.*+",

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 defaultImpl=DefaultUsageTracked.class)

public static UsageTracked mixin;

@Before("com.xyz.myapp.SystemArchitecture.businessService() &&" +

聽聽聽聽聽聽聽聽聽 "this(usageTracked)")

public void recordUsage(UsageTracked usageTracked) {

聽聽聽 usageTracked.incrementUseCount();

}

}



]]>
spring 2.0 aop緙栫▼(涓)http://www.tkk7.com/zyl/archive/2006/09/15/69805.html甯冭。閮?/dc:creator>甯冭。閮?/author>Fri, 15 Sep 2006 01:41:00 GMThttp://www.tkk7.com/zyl/archive/2006/09/15/69805.htmlhttp://www.tkk7.com/zyl/comments/69805.htmlhttp://www.tkk7.com/zyl/archive/2006/09/15/69805.html#Feedback0http://www.tkk7.com/zyl/comments/commentRss/69805.htmlhttp://www.tkk7.com/zyl/services/trackbacks/69805.html涓昏鍒嗕負(fù)涓ゅぇ鏂歸潰
1.鏀寔綆鍗曠殑aop xml閰嶇疆
2.鏀寔@AspectJ鐨勬敞閲?br />
鍏堟潵鐪嬩竴鐪嬬涓縐嶆儏鍐碉細(xì)
鐢蟲槑涓涓猘spect錛屽湪xml涓殑鐢蟲槑濡備笅錛?br />

<aop:config>

<aop:aspect id="myAspect" ref="aBean">

聽聽聽 ...

</aop:aspect>

</aop:config>

<bean id="aBean" class="...">

...

</bean>


鐢蟲槑pointcut

<aop:config>

<aop:pointcut id="businessService"

聽聽聽聽聽聽聽 expression="execution(* com.xyz.myapp.service.*.*(..))"/>

</aop:config>


鐢蟲槑advice

Before advice錛?/span>

<aop:aspect id="beforeExample" ref="aBean">

聽聽聽 <aop:before

聽聽聽聽聽 pointcut-ref="dataAccessOperation"

聽聽聽聽聽 method="doAccessCheck"/>

</aop:aspect>

After returning advice:

<aop:aspect id="afterReturningExample" ref="aBean">

聽聽聽 <aop:after-returning

聽聽聽聽聽 pointcut-ref="dataAccessOperation"

聽聽聽聽聽 method="doAccessCheck"/>

聽聽聽聽聽聽聽聽聽

聽聽聽 ...

聽聽聽

</aop:aspect>

鎴栬呭甫鏈夎繑鍥炲弬鏁?/span>

<aop:aspect id="afterReturningExample" ref="aBean">

聽聽聽 <aop:after-returning

聽聽聽聽聽 pointcut-ref="dataAccessOperation"

聽聽聽聽 returning="retVal"

聽聽聽聽聽 method="doAccessCheck"/>

聽聽聽聽聽聽聽聽聽

聽聽聽 ...

聽聽聽

</aop:aspect>

After throwing advice錛?/span>

<aop:aspect id="afterThrowingExample" ref="aBean">

聽聽聽 <aop:after-throwing

聽聽聽聽聽 pointcut-ref="dataAccessOperation"

聽聽聽聽 method="doRecoveryActions"/>

聽聽聽聽聽聽聽聽聽

聽聽聽 ...

聽聽聽

</aop:aspect>

鎴栬呭甫鏈塼hrowing

<aop:aspect id="afterThrowingExample" ref="aBean">

聽聽聽 <aop:after-throwing

聽聽聽聽聽 pointcut-ref="dataAccessOperation"

聽聽聽聽聽 throwing="dataAccessEx"

聽聽聽聽聽 method="doRecoveryActions"/>

聽聽聽聽聽聽聽聽聽

聽聽聽 ...

聽聽聽

</aop:aspect>

After (finally) advice錛?/span>

<aop:aspect id="afterFinallyExample" ref="aBean">

聽聽聽 <aop:after

聽聽聽聽聽 pointcut-ref="dataAccessOperation"

聽聽聽聽聽 method="doReleaseLock"/>

聽聽聽聽聽聽聽聽聽

聽聽聽 ...

聽聽聽

</aop:aspect>

Around advice錛?/span>

<aop:aspect id="aroundExample" ref="aBean">

聽聽聽 <aop:around

聽聽聽聽聽 pointcut-ref="businessService"

聽聽聽聽聽 method="doBasicProfiling"/>

聽聽聽聽聽聽聽聽聽

聽聽聽 ...

聽聽聽

</aop:aspect>

Advice parameters錛?/span>

<aop:before

pointcut="Pointcuts.anyPublicMethod() and @annotation(auditable)"

method="audit"

arg-names="auditable"/>


瀵逛簬寮曞叆鎺ュ彛錛?a name="_Toc144432334">Introductions錛夛細(xì)

<aop:aspect id="usageTrackerAspect" ref="usageTracking">

<aop:declare-parents

聽聽聽聽聽 types-matching="com.xzy.myapp.service.*+",

聽聽聽聽聽 implement-interface="UsageTracked"
聽聽聽聽 default-impl=" service.tracking.DefaultUsageTracked"/>

<aop:before

聽聽聽 pointcut="com.xyz.myapp.SystemArchitecture.businessService()

聽聽聽聽聽聽聽聽聽聽聽聽聽 and this(usageTracked)"

聽聽聽 method="recordUsage"/>

</aop:aspect>



]]>
spring 浠g爜鍒嗘瀽涔?beanshttp://www.tkk7.com/zyl/archive/2006/09/02/67233.html甯冭。閮?/dc:creator>甯冭。閮?/author>Sat, 02 Sep 2006 02:10:00 GMThttp://www.tkk7.com/zyl/archive/2006/09/02/67233.htmlhttp://www.tkk7.com/zyl/comments/67233.htmlhttp://www.tkk7.com/zyl/archive/2006/09/02/67233.html#Feedback0http://www.tkk7.com/zyl/comments/commentRss/67233.htmlhttp://www.tkk7.com/zyl/services/trackbacks/67233.html聽聽聽聽聽聽聽 榪欏嚑澶╋紝闂茬潃鏃犱簨錛岀湅璧蜂簡(jiǎn)spring鐨勬簮鐮侊紝欏轟究涔熷涔?fàn)涓涓嬶紝浜哄鐨勮璁$悊蹇點(diǎn)?br />聽聽聽聽聽聽聽 spring鐨勬簮鐮佽繕鏄瘮杈冨鐨勶紝浣嗘槸鍖哄垎鐨勫眰嬈℃瘮杈冨彲浠ャ傚姣斾簡(jiǎn)涓涓嬭嚜宸辮璁$殑紼嬪簭錛屾湁鐐規(guī)儹鎰э紝姣忔鍒嗗寘鐨勬椂鍊欙紝璁捐鐨勯兘姣旇緝鐑傘?br />聽聽聽聽聽聽聽 闂茶瘽灝戣錛屽厛鏉ョ湅鐪媠pring 鐨勬牳蹇?jī)鍖卋eans銆?br />聽聽聽聽聽聽聽 beans 鍖呬富瑕佹彁渚涗簡(jiǎn)鎺ュ彛鍜岀被鐢ㄤ簬澶勭悊java beans銆?br />聽聽聽聽聽聽聽 鍏朵腑鏈涓昏鐨勬帴鍙f槸BeanWrapper錛?br />聽聽聽聽聽聽聽 Spring 鐨勪腑蹇?jī)鎺ュ彛锛岀敤浜庤畨K棶javabeans 鐨勪綆灞傛搷浣溿傞粯璁ゅ疄鐜頒負(fù)BeanWrapperImpl 鎻愪緵鍒嗘瀽鍜屽鐞嗘爣鍑?/span>java beans 鐢ㄤ簬get 鍜?/span>set 灞炴э紝鍙栧緱灞炴ф弿榪幫紝鏌ヨ灞炴х殑璇?/span>/鍐欒兘鍔涖?br />聽聽聽聽鐢ㄦ硶闈炲父綆鍗?br />聽聽聽 TestBean tb = new TestBean();
聽聽聽聽BeanWrapper bw = new BeanWrapperImpl(tb);
聽聽聽 bw.isReadableProperty("age");//鍒ゆ柇age灞炴ф槸鍚﹀彲璇?br />聽聽聽 bw.setPropertyValue("name", "tom"); //璁劇疆name灞炴х殑鍊間負(fù)tom
聽聽聽 bw.getPropertyValue("int2")//鍙栧緱灞炴?br />聽聽聽 //褰撶劧錛屾渶寮哄ぇ鐨勬槸鑳藉祵濂楄緗睘鎬э紝濡傦細(xì)
聽聽聽 //tb涓湁涓猻pouse鐨勫睘鎬э紝涔熶負(fù)TestBean錛岃繖鏍?br />聽聽 聽bw.setPropertyValue("spouse.name", "tom");聽
聽聽聽聽//絳変環(huán)浜巘b.getSpouse().setName("tom");
聽聽聽 //bw 鍚屾牱鏀寔鏁扮粍鍜岄泦鍚?map灞炴ц緗?br />聽聽聽 bw.getPropertyValue("array[0].name");
聽聽聽 bw.getPropertyValue("map[key4][0].name");
聽聽聽聽
聽聽聽聽beans鍖?榪樻彁渚涗簡(jiǎn)涓涓狿ropertyValues鐢ㄤ簬淇濆瓨澶氫釜灞炴у鹼紝榛樿鐨勫疄鐜?a name="_Toc144782329">MutablePropertyValues
聽聽聽 MutablePropertyValues pvs = new MutablePropertyValues();
聽聽聽 pvs.addPropertyValue("array[0].name", "name5");
聽聽聽 pvs.addPropertyValue("array[1].name", "name4");
聽聽聽 bw.setPropertyValues(pvs);
聽聽聽
聽聽聽 BeanWrapper鐨勫眰嬈$粨鏋勶紝涔熸瘮杈冪畝鍗曠戶鎵夸簬ConfigurablePropertyAccessor 錛岃?span style="font-size: 12pt; font-family: 'Times New Roman';" lang="EN-US">ConfigurablePropertyAccessor 鍙堢戶鎵夸簬PropertyAccessor 鍜?span style="font-size: 12pt; font-family: 'Times New Roman';" lang="EN-US">聽聽 PropertyEditorRegistry 鎺ュ彛銆?br />聽聽聽聽聽聽聽 鏈変竴鐐逛笉澶槑鐧斤紝涓轟粈涔?span style="font-size: 12pt; font-family: 'Times New Roman';" lang="EN-US">ConfigurablePropertyAccessor 瑕佺戶鎵夸簬PropertyEditorRegistry聽
聽聽聽聽聽聽聽 PropertyEditorRegistry 鐨勪富瑕佷綔鐢ㄦ槸鎻愪緵鏂規(guī)硶鐢ㄤ簬娉ㄥ唽JavaBeans PropertyEditors銆傞粯璁ょ殑瀹炵幇涓?a name="_Toc144782321">PropertyEditorRegistrySupport
聽聽聽聽聽聽聽 榪欏氨浣垮緱BeanWrapperImpl 涔熼渶瑕佺戶鎵?span style="font-size: 12pt; line-height: 173%;" lang="EN-US">PropertyEditorRegistrySupport錛屼粠瀛楅潰鎰忎箟涓婃潵璇達(dá)紝涓や釜綾諱笉鏄緢鏈夊叧緋伙紝鍏跺疄鏈涓昏鐢ㄥ埌鐨勬柟娉曪紝涔熷氨鏄痳egisterDefaultEditors(),娉ㄥ唽spring涓墍鏈夌殑灞炴х紪杈戠被銆?br />聽聽聽聽聽聽聽 beans 鍖呬腑榪樻湁涓や釜鎺ュ彛TypeConverter鍜孧ergeable 銆俆ypeConverter鐢盉eanWrapperImpl瀹炵幇錛屼富瑕佺敤浜庤漿鎹㈠睘鎬у箋傚叾涓昏鐨勫伐浣滅敱TypeConverterDelegate 榪欎釜鍖呭唴綾誨畬鎴愮殑銆侻ergeable 涓昏鏄敤鏉ュ悎騫跺煎緱錛屼笉榪囧叿浣撶殑瀹炵幇錛屽湪org.springframework.beans.factory.support 鍖呬腑銆?br />聽聽聽聽聽聽聽 beans 鍖呬腑鎻愪緵浜?jiǎn)涓や釜鏈夌敤鐨勫伐鍏肪c伙紝BeanUtils鍜孭ropertyAccessorUtils銆?/span>



]]>
主站蜘蛛池模板: 亚洲电影免费观看| 亚洲AV无码国产精品色午友在线| 波多野结衣中文字幕免费视频| 免费无遮挡无码永久视频| 久久精品国产免费| 日韩免费视频一区二区| 十八禁无码免费网站| 中国人xxxxx69免费视频| 97国产免费全部免费观看| 免费看国产精品3a黄的视频| 免费电视剧在线观看| 日韩免费电影在线观看| 亚洲不卡AV影片在线播放| 国产91精品一区二区麻豆亚洲| 亚洲一区二区三区香蕉| 亚洲av午夜福利精品一区| 亚洲伊人久久大香线蕉苏妲己| 亚洲狠狠ady亚洲精品大秀| 亚洲av专区无码观看精品天堂| 亚洲欧美日韩中文无线码 | 亚洲 国产 图片| 亚洲美女在线国产| 亚洲AV永久无码区成人网站| 精品亚洲成a人片在线观看| 精品国产日韩久久亚洲| 粉色视频免费入口| 国产一区二区三区免费观在线| 99在线热视频只有精品免费| 免费精品国产自产拍在线观看图片 | 亚洲精品无码av人在线观看| 亚洲视频在线免费观看| 久久久久se色偷偷亚洲精品av| 亚洲男人的天堂网站| 一级毛片在播放免费| 美女内射无套日韩免费播放 | xvideos永久免费入口| 免费福利电影在线观看| 中国在线观看免费高清完整版 | 国产精品免费看久久久| 免费在线观看的网站| 亚洲精品成人a在线观看|