posts - 66,  comments - 11,  trackbacks - 0
          Spring提供了對Sun的標(biāo)準(zhǔn)的持久化API-JDO的整合,以及其他開放源碼的ORM框架,如Hibernate、ApacheOJB和iBATIS SQL Maps.Spring對這些技術(shù)的支持沒有像它對JDBC的支持那么廣泛。
          <?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/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
              
          <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
                  
          <property name="jndiName">
                      
          <value>java:comp/env/jdbc/trainingDatasource</value>
                  
          </property>
              
          </bean>
              
          <!-- 管理Hibernate資源,在應(yīng)用的整個生命周期里,你只要保存一個SessionFactory實例就可以了。-->
              
          <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
                  
          <!-- 先要知道連接哪個數(shù)據(jù)源 -->
                  
          <property name="dataSource">
                      
          <ref bean="dataSource"/>
                  
          </property>
                  
          <!-- Hibernate本身有數(shù)十個屬性,通過這些屬性你就可以控制它的行為。當(dāng)在Spring之外使用Hibernage的時候,
                  Hibernate在應(yīng)用的class path下的某個地方尋找一個名叫hibernate.properties的文件,并用它來進行配置。
                  然而,用Spring就不需要在一個獨立的屬性文件里管理這些配置。 
          -->
                  
          <property name="hibernateProperties">
                      
          <props>
                          
          <prop key="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect</prop>
                      
          </props>
                  
          </property>
                  
          <!-- 同樣,你也要告訴Spring從哪里讀取Hibernate.hbm.xml映射文件 -->
                  
          <property name="mappingResources">
                      
          <list>
                          
          <value>Student.hbm.xml</value>
                      
          </list>
                  
          </property>
                  
          <!-- 還有一種簡單的方法設(shè)置映射文件資源,你可以用你應(yīng)用的class path下的一個子路徑來配置
                  mappingDirectoryLocation屬性,spring將找到這個路徑下的每個*.hbm.xml文件,來配置SessionFactory 
          -->
                  
          <property name="mappingDirectoryLocations">
                      
          <list>
                          
          <value>classpath:/com/springinaction/training/model</value>
                      
          </list>
                  
          </property>
              
          </bean>
              
          <!-- 如果把這個模版對象織入到一個個DAOBean中顯得很麻煩的時候,可以使用Spring自動連接功能來將模版對象隱士的織入到
              DAObean. 
          -->
              
          <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
                  
          <property name="sessionFactory">
                      
          <ref bean="sessionFactory"/>
                  
          </property>
              
          </bean>
              
          </beans>
          posted @ 2009-11-14 15:59 王永慶 閱讀(259) | 評論 (0)編輯 收藏

          調(diào)用存儲過程:
          Spring通過實現(xiàn)CallableStatementCallback來支持存儲過程。假定有個存儲過程的名字是ARCHIVE_STUDENTS,執(zhí)行代碼如下:

          package com.testproject.spring.datasource;

          import java.sql.CallableStatement;
          import java.sql.SQLException;

          import org.springframework.jdbc.core.CallableStatementCallback;
          import org.springframework.jdbc.core.JdbcTemplate;
          /*
           * 為了讓JdbcTemplate工作,它所需要的,只是一個DataSource實例。
           
          */

          public class StudentDaoImpl implements StudentDao {
              
          private JdbcTemplate jdbcTemplate;
              
              
          public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
                  
          this.jdbcTemplate = jdbcTemplate;
              }

              
          /**
               * 調(diào)用存儲過程,通過CallableStatementCallback來實現(xiàn)
               
          */

              
          public void archiveStudentData(){
                  CallableStatementCallback cb 
          = new CallableStatementCallback(){
                      
          public Object doInCallableStatement(CallableStatement cs)throws SQLException{
                          cs.execute();
                          
          return null;
                      }

                  }
          ;
                  jdbcTemplate.execute(
          "{ARCHIVE_STUDENTS}",cb);
              }

          }


          把操作創(chuàng)建成對象:

          插入:

          package com.testproject.spring.datasource;

          import java.sql.Types;

          import javax.sql.DataSource;

          import org.springframework.jdbc.core.SqlParameter;
          import org.springframework.jdbc.object.SqlUpdate;
          /**
           * Spring提供了一種真正把數(shù)據(jù)庫操作建模成對象的方法,這樣就在的代碼和直接JDBC之間又加了一個絕緣層。
           * 首先,這些數(shù)據(jù)庫操作對象是線程安全的,意味著對于每個數(shù)據(jù)庫操作,你只需創(chuàng)建一個實例。
           * 其次,任何數(shù)據(jù)庫操作對象必須在運行前先編譯一下,這樣就讓對象知道什么時候可以預(yù)備statement,以便在稍后能執(zhí)行它們。
           * 使用:
           * private InsertPerson insertPerson;
           * public int insertPerson(Person person){
           *     return insertPerson.insert(person);
           * }
           *
           
          */

          public class InsertPerson extends SqlUpdate {
              
          public InsertPerson(DataSource ds){
                  
          //首先要給sqlUpdate提供一個DataSource,用來創(chuàng)建JdbcTemplate
                  setDataSource(ds);
                  setSql(
          "insert into person(id,firstName,lastName) values(?,?,?)");
                  
          //其次,我們需要為statement中的每個參數(shù)調(diào)用這個方法,順序也是很重要的
                  declareParameter(new SqlParameter(Types.NUMERIC));
                  declareParameter(
          new SqlParameter(Types.VARCHAR));
                  declareParameter(
          new SqlParameter(Types.VARCHAR));
                  
          //最后編譯它,每個數(shù)據(jù)庫操作對象必須在它被使用之前編譯好。
                  compile();
              }

              
          public int insert(Person person){
                  Object[] params 
          = new Object[]{
                          person.getId(),
                          person.getFirstName(),
                          person.getLastName()
                  }
          ;
                  
          return update(params);
              }

          }

          查詢:

          package com.testproject.spring.datasource;

          import java.sql.ResultSet;
          import java.sql.SQLException;
          import java.sql.Types;

          import javax.sql.DataSource;

          import org.springframework.jdbc.core.SqlParameter;
          import org.springframework.jdbc.object.MappingSqlQuery;

          /**
           * 使用:
           * private PersonByIdQuery personByIdQuery;
           * public person getPerson(Integer id){
           *     Object[] params = new Object[]{id};
           *  return (Person)personByIdQuery.execute(params).get(0);
           * }
           *
           
          */

          public class PersonByIdQuery extends MappingSqlQuery {
              
              
          public PersonByIdQuery(DataSource ds){
                  
          super(ds,"select id,first_name,last_name from person where id=?");
                  declareParameter(
          new SqlParameter("id",Types.INTEGER));
                  compile();
              }

              
              
          protected Object mapRow(ResultSet rs, int rowNumber) throws SQLException {
                  Person person 
          = new Person();
                  person.setId((Integer)rs.getObject(
          "id"));
                  person.setFirstName(rs.getString(
          "first_name"));
                  person.setLastName(rs.getString(
          "last_name"));
                  
          return person;
              }


          }

           

          posted @ 2009-11-14 15:21 王永慶 閱讀(281) | 評論 (0)編輯 收藏
          實現(xiàn)WEB服務(wù)客戶
          web服務(wù)是跨平臺的、跨語言的,所以WEB服務(wù)的客戶端使用的語言和平臺和他的服務(wù)端沒有必然的關(guān)系。比如我們可以在.Net下開發(fā)、部署web服務(wù),然后在J2EE平臺下調(diào)用它,或者使用在J2EE平臺下開發(fā)、部署web服務(wù),然后使用VB來調(diào)用它。
          在J2EE平臺中,WEB服務(wù)客戶同EJB客戶類似。如下兩種方式能夠訪問到WEB服務(wù):
          1、不借助于JNDI查找,即使用單獨的JAX-RPC客戶訪問。
          2、借助于JNDI上下文訪問WEB服務(wù)的J2EE客戶
          第一種方法稱之為靜態(tài)存根,此時需要在客戶端預(yù)先生成SOAP客戶存根,這同RMI存根類似。第二種方法稱之為動態(tài)代理。它將在運行時獲得WSDL描述,然后創(chuàng)建動態(tài)代理。無論采用哪種方式訪問WEB服務(wù),客戶都需要獲得服務(wù)Endpoint地址URL,否則單憑JNDI名是很難訪問到WEB服務(wù)的。
          package com.testproject.ejb.web;

          import java.net.URL;

          import javax.xml.namespace.QName;
          import javax.xml.rpc.Service;
          import javax.xml.rpc.ServiceFactory;

          /**
           * 單獨JAX-RPC客戶代碼實例。
           * 它使用了動態(tài)代理方法,以獲得對遠程WEB服務(wù)的引用。
           *
           
          */

          public class HelloClient {
              
          static String host = "localhost";
              
          //web服務(wù)的名字
              static String serviceURL = "HelloBean";
              
          //名稱空間
              static String nameSpaceUri = "urn:examples";
              
          static String serviceName = "HelloWorldWS";
              
          //web服務(wù)調(diào)用的地址
              static String serviceEndpointAddress = "http://"+host+":8000"+serviceURL;
              
          public static void main(String[] args)throws Exception{
                  HelloInterface hello 
          = null;
                  
          //動態(tài)代理方法
                  
          //1、指定WSDL文件的位置
                  URL url = new URL(serviceEndpointAddress+"?WSDL");
                  
          //2、創(chuàng)建服務(wù)工廠實例
                  ServiceFactory serviceFactory = ServiceFactory.newInstance();
                  
          //3、創(chuàng)建服務(wù)對象,以作為代理工廠
                  Service HelloService = serviceFactory.createService(url,new QName(nameSpaceUri,serviceName));
                  
          //4、獲得port引用
                  hello = (HelloInterface)HelloService.getPort(HelloInterface.class);
                  
          //調(diào)用hello()方法
                  System.out.println("Dynamic Proxy:"+hello.hello());
              }

          }

          posted @ 2009-11-13 16:45 王永慶 閱讀(139) | 評論 (0)編輯 收藏
          EJB2.1和web服務(wù)
          1、下載安裝服務(wù)器后,需要設(shè)置環(huán)境變量。
          Set J2EE_HOME=J2EE安裝目錄
          Set CLASSPATH 
          =%CLASSPATH%;%J2EE_HOME%\\lib\\j2ee.jar;.
          Set Path =%Path%;%J2EE_HOME%\\bin;.

          2、創(chuàng)建初始目錄
          +HelloBeanService
              +META-INF(application.xml;sun-j2ee-ri.xml )
              +ejb
                 +META-INF(ejb-jar.xml; webservices.xml;mapping.xml)
                 -*.java文件(EJB相關(guān)的類)
                 -config.xml
          3、定義web服務(wù)接口
          package com.testproject.ejb.web;

          /*
           * Hello服務(wù)Endpoint接口
           * 需要注意的是,這里使用的是EJB2.1無狀態(tài)會話Bean,它作為WEB服務(wù)端點時可以不提供Home接口和Remote
           * Locale接口,它提供的是web服務(wù)端點接口,這個接口擴展了Remote接口。
           
          */

          public interface HelloInterface extends java.rmi.Remote {
              
          public String hello()throws java.rmi.RemoteException;
          }


          4、實現(xiàn)服務(wù)端點接口
          package com.testproject.ejb.web;

          import java.rmi.RemoteException;

          import javax.ejb.EJBException;
          import javax.ejb.SessionBean;
          import javax.ejb.SessionContext;

          /*
           * 定義了服務(wù)端點接口,接下來的任務(wù)就是開發(fā)無狀態(tài)會話Bean。無狀態(tài)會話Bean同樣需要實現(xiàn)SessionBean接口,
           * 服務(wù)端點接口定義的方法在會話Bean中實現(xiàn)。
           
          */

          public class HelloBean implements SessionBean {
              
              
          public void ejbCreate(){
                  
          /*
                   * 這里不能接收任何參數(shù)
                   
          */

              }


              
          public void ejbActivate() throws EJBException, RemoteException {
              }


              
          public void ejbPassivate() throws EJBException, RemoteException {
              }


              
          public void ejbRemove() throws EJBException, RemoteException {
              }


              
          public void setSessionContext(SessionContext arg0) throws EJBException,
                      RemoteException 
          {
              }

              
          /*
               * 業(yè)務(wù)方法:輸出hello
               
          */

              
          public String hello(){
                  
          return "Hello wyq";
              }


          }


          5、創(chuàng)建EJB描述
          用于部署成Web服務(wù)的無狀態(tài)會話Bean的描述符和普通的無狀態(tài)會話Bean不同ejb-jar.xml
          <?xml version="1.0" encoding="UTF-8"?>
          <ejb-jar version="2.1"
          xmlns
          ="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation
          ="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd">
              
          <display-name>HelloBean</display-name>
              
          <enterprise-beans>
                  
          <session>
                      
          <display-name>HelloBean</display-name>
                      
          <ejb-name>HelloBean</ejb-name>
                      
          <service-endpoint>com.testproject.ejb.web.HelloInterface</service-endpoint>
                      
          <ejb-class>com.testproject.ejb.web.HelloBean</ejb-class>
                      
          <session-type>Stateless</session-type>
                      
          <transaction-type>Container</transaction-type>
                  
          </session>
              
          </enterprise-beans>
          </ejb-jar>

          在這個新的部署描述符中,使用<service-endpoint>指定了服務(wù)端點,同時,必須指定EJB為無狀態(tài)會話Bean
          6、生成WEB服務(wù)描述

          下面的任務(wù)就是生成一個Web服務(wù)描述,我們通常使用工具來生成這個描述符。在這里使用J2EE提供的wscompile工具來生成。在使用wscompile工具生成web服務(wù)描述前,首先手工編寫一個簡單的XML描述config.xml

          <?xml version="1.0" encoding="UTF-8"?>
          <configuration xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
              
          <service 
                  
          name="MyHelloBeanService" 
                  targetNamespace
          ="urn:HelloBean" 
                  typeNamespace
          ="urn:HelloBean"
                  packageName
          ="helloBeanService">
                  
          <interface name="com.testproject.ejb.web.HelloInterface"/>
              
          </service>
          </configuration>

          在這個描述中,指定了目標(biāo)的名稱空間、包的名字和Web服務(wù)端點接口:HelloInterface。如下命令就可以生成一個web服務(wù)描述

          c:\\ HelloBeanService\\ejb \\>wscompile -define -d . -nd . -classpath . config.xml
          自動生成MyHelloBeanService.wsdl文件。
          7、編寫一個web服務(wù)映射文件:
          在ejb\\META-INF目錄下新建一個mapping.xml文件,然后編輯這個描述符
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE java-wsdl-mapping PUBLIC
              "-//IBM Corporation,Inc.//DTD J2EE JAX-RPC mapping 1.0//EN"
              "http://www.ibm.com/standards/xml/webservices/j2ee/j2ee_jaxrpc_mapping_1_0.dtd"
          >
          <java-wsdl-mapping>
              
          <package-mapping>
                  
          <package-type>HelloBeanService</package-type>
                  
          <namespaceURI>urn:HelloBean</namespaceURI>
              
          </package-mapping>
          </java-wsdl-mapping>
          8、編寫webservices.xml文件
          另外,還需要提供webservices.xml文件,并存放到Ejb-jar存檔的META-INF目錄中。各個J2EE產(chǎn)品可能提供相應(yīng)的部署工具來創(chuàng)建這個文件。
          9、EJB打包
          另外,web服務(wù)部署描述符在EJB-JAR文件中的位置是META-INF/webservices.xml.把生成的HelloBeanService.wsdl拷貝到ejb\\META-INF目錄下
          c:\\HelloBeanService\\ejb\\jar cvf ejb.jar com META-INF
          10、Application打包
          HelloBeanService\\MEAT-INF目錄下創(chuàng)建2個文件:application.xml和sun-j2ee-ri.xml
          application.xml
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE application PUBLIC '-//Sun Microsystems,
              Inc.//DTD J2EE Application 1.3//EN'
              'http://java.sun.com/dtd/application_1_3.dtd'
          >
          <application>
              
          <description>Application description</description>
              
          <display-name>HelloBeanServiceApp</display-name>
              
          <module>
                  
          <ejb>ejb.jar</ejb>
              
          </module>
          </application>

          最后歸檔
          c:\\ HelloBeanService\\ejb\\>copy ejb.jar ../
          c:\\ HelloBeanService\\ejb\\>cd..
          c:\\ HelloBeanService\\\\>jar cvf encryptservice.ear ejb.jar META-INF

           


           

          posted @ 2009-11-13 16:13 王永慶 閱讀(161) | 評論 (0)編輯 收藏
               摘要:     Spring的一個目標(biāo)就是讓你遵循對接口編程的面向?qū)ο笤瓌t。DAO的存在提供了讀寫數(shù)據(jù)庫中數(shù)據(jù)的一種方 法。只要把這個功能通過接口暴露,應(yīng)用的其他部分就可以通過這些接口訪問數(shù)據(jù)庫了。     在Spring的DAO框架里,Connection對象是通過DataSource獲得的。     從JN...  閱讀全文
          posted @ 2009-11-12 19:46 王永慶 閱讀(190) | 評論 (0)編輯 收藏
              這次的辭職和以往有些不同,以前的辭職都是懷著迫不及待的心情,而且離職之后心情特別舒暢。但是這次辭職之后總是感覺心里空蕩蕩的。由于從金錢、從發(fā)展、從技術(shù)、還有從管理的經(jīng)驗上,我都覺得這里沒有我發(fā)展的空間,感覺自己有能力帶出一個出色的團隊,所以離職是必須的。但是這種空蕩的源頭我還沒有找到,是想念以前的那些好兄弟、好姐妹。還是想念那個不知道我在想什么的她。
              感覺自己心里的牽掛太多,不是說她。自己做了10多個場景,有復(fù)雜有簡單的,離開公司之后,還想著那些接我的人能不能把我的場景接好。就在昨天晚上,還有個新來的小伙問了我些問題,看來接手的不是太順利。沒有辦法,公司的開發(fā)模式就是這樣,有利有弊,接手的人只要能干活就可以了,不需要你思考。我討厭這種模式,而且他也沒有重要的對待我。只有離開是我的選擇。擔(dān)心我們的團隊,擔(dān)心我的主管,擔(dān)心我的隊友?,F(xiàn)在團隊非?;靵y,有很多人提出離職,他們太盲目了,沒有目的性,就像我和我好朋友說的,我是謀定而后動,他則是先動而后謀,他的下分工作目標(biāo)可能是工作輕松點,錢拿的多點,我們公司確實太累了。而我的目標(biāo)就是項目經(jīng)理,在這個公司的期間,我每次看到團隊遇到困難的時候,我都能看到事情的本質(zhì),所以看問題還是很準(zhǔn)的,自己也想去嘗試一下。
               你的羽翼已經(jīng)豐滿了,就是缺少在藍天下翱翔的經(jīng)驗,自己慢慢積累吧,在這個項目里我不能在給你什么了,我剩下的只有自己的經(jīng)驗和技術(shù),自己的經(jīng)驗屬于自己的。前幾天還在哭鼻子的你,堅強點吧,你已經(jīng)長大了,遇到問題想辦法去解決它,不要去回避。不知道你想不想在這個程序的世界里自由翱翔,不知道你的心有沒有那么大,我看到的你是不屬于程序的這片天空的,所以還在擔(dān)心走在這條路上的你。多余了,因為飛在路上的你根本就沒想到你在成長路上的我。
              希望你們一切都好,我的大家,我也會在自己的道路上努力,我相信我自己,我也相信我們的友誼。
          posted @ 2009-11-11 11:35 王永慶 閱讀(191) | 評論 (0)編輯 收藏
          年終獎"除12"稅收優(yōu)惠

          按照《國家稅務(wù)總局關(guān)于調(diào)整個人取得全年一次性獎金等計算征收個人所得稅方法問題的通知》規(guī)定,對個人某個月取得的全年一次性獎金,可以先除以12個月,再按其商數(shù)確定適用稅率和速算扣除數(shù)。

          具 體的解釋是,行政機關(guān)、企事業(yè)單位向其雇員發(fā)放的一次性獎金(包括:年終加薪、實行年薪制和績效工資辦法的單位,根據(jù)考核情況兌現(xiàn)的年薪和績效工資)可單 獨作為一個月工資、薪金所得計算納稅,并按以下計稅辦法:先將雇員當(dāng)月內(nèi)取得的全年一次性獎金,除以12個月,按其商數(shù)確定適用稅率和速算扣除數(shù)。如果雇 員當(dāng)月工資薪金所得高于(或等于)稅法規(guī)定的費用扣除額(個稅起征點)的,則將一次性獎金全額作為應(yīng)稅所得額,計算應(yīng)納稅額。適用公式為:應(yīng)納稅額=雇員 當(dāng)月取得全年一次性獎金×商數(shù)對應(yīng)的適用稅率-速算扣除數(shù)。

          而在這個規(guī)定之前,個人所取得的年終獎金是全額作為應(yīng)納稅所得額來尋找適用稅率及速算扣除數(shù)的。具體公式為:應(yīng)納稅額=雇員當(dāng)月取得的全年一次性獎金*獎金全額對應(yīng)的適用稅率-對應(yīng)的速算扣除數(shù)。

          可別小看這"12",如此這般將年終獎先除以12,所得稅率可就大大降低了,能為員工減輕不少稅負呢。

          比 如,某私營企業(yè)主王老板要給自己的得力干將張先生準(zhǔn)備年終獎。年終獎為12000元,按原有規(guī)定,12000元作為單月收入,對應(yīng)的適用稅率為20%,速 算扣除數(shù)為375元,則張先生這筆年終獎應(yīng)納個人所得稅款為2025元(12000×20%-375)。但若按新辦法,張先生12000元年終獎先除以 12,得到商數(shù)為1000元,1000元對應(yīng)的適用稅率為10%,速算扣除數(shù)為25。因此,新辦法下,張先生只需交納個人所得稅1175元 (12000×10%-25)。也就是說,如果采用新辦法,張先生可少交850元的個人所得稅。換而言之,張先生實際拿到手的稅后年終獎可以多850元。

          月薪較低者還有"特別"優(yōu)惠

          對于日常每月工資較低的個人,年終獎還會有另一層稅收優(yōu)惠。為此,平常對員工比較"摳門"的老板,可要發(fā)發(fā)善心,在過年前給員工多些獎金哦。

          按 照前述國家稅務(wù)總局的《通知》規(guī)定,如果在發(fā)放一次性獎金的當(dāng)月,雇員工資薪金所得低于稅法規(guī)定的費用扣除額(即個稅起征點,2006年1月1日后全國統(tǒng) 一為1600元),應(yīng)將全年一次性獎金減去"雇員當(dāng)月工資薪金所得與費用扣除額的差額"后的余額作為應(yīng)納稅額,再按前述辦法確定全年一次性獎金的適用稅率 和速算扣除數(shù)。

          具體如下:如果雇員當(dāng)月工資薪金所得低于稅法規(guī)定的費用扣除額的,適用公式為:應(yīng)納稅額=(雇員當(dāng)月取得全年一次性獎金-雇員當(dāng)月工資薪金所得與費用扣除額的差額)×適用稅率-速算扣除數(shù)。

          比 如,王老板手下有個普通工人蔣某,雖然月薪只有1200元,但平常工作非常賣力,尤其最近大半年來表現(xiàn)特別突出,長進很快。新年到了,王老板準(zhǔn)備在年輕工 人中間樹立一個學(xué)習(xí)典型,蔣某正是一個不錯的選擇。那么,王老板完全可以通過給蔣某多發(fā)放一些年終獎,并拉開蔣某所獲年終獎與其他同級工人年終獎所得距離 的方式,暗示大家公司是"獎優(yōu)懲劣"的,由此激勵年輕人要奮發(fā)圖強,多為企業(yè)做績效。若王老板此次給蔣某發(fā)放6000元的年終獎,按照原來的老辦 法,6000元獎金對應(yīng)的所得稅率為20%,速算扣除數(shù)為375元,蔣某需要被繳納的個人所得稅額為825元(6000×20%-375),實際拿到手的 稅后獎金為5175元。

          而按照新辦法,則蔣某這筆年終獎可以先除以12,得到商數(shù)為500,對應(yīng)的所得稅率為5%,速算扣除數(shù)為0。 同時,由于蔣某當(dāng)月的工資收入只有1200元,比國家規(guī)定的1600元費用扣除額還低400元,因此蔣某這筆年終獎實際的應(yīng)納稅額為5600元 (6000-400),其應(yīng)該被繳納的個人所得稅額為108元(5400×5%-0),實際拿到手的稅后獎金有5892元。

          分次獎金不如歸總發(fā)放

          但是,老板們還必須明確一個概念,國家稅務(wù)總局對于年終獎這樣一次性發(fā)放的獎金稅收優(yōu)惠政策,每個員工每年只能享受一次。

          因為前述《通知》規(guī)定,在一個納稅年度里,對每一個納稅人,該計算辦法只允許采用一次。同時,雇員取得除全年一次性獎金以外的其他各種名目獎金,如半年獎、季度獎、加班獎、先進獎、考勤獎等,仍舊是一律與當(dāng)月工資、薪金合并,按稅法規(guī)定繳納個人所得稅。

          正 是基于這一點,我們在此提出一個發(fā)放獎金的竅門,就是如果老板們想為員工盡量減輕稅負,應(yīng)盡量減少季度獎、半年獎等名目繁多的獎金發(fā)放次數(shù),而是把這些本 欲發(fā)放的獎金先在平時"記賬",然后和年終獎一起,一次性發(fā)給員工。這樣一來,員工全年得到的稅后獎金收入,并不會減少,反而會增加。

          比 如,作為王老板得力助手的張先生,除了12000元的年終獎,王老板每個季度還會發(fā)2000元的季度獎金給他。由于張先生的月工資為6000元,平常每月 的應(yīng)納稅所得額6000-1600=4400元,對應(yīng)的適用稅率為15%,速算扣除數(shù)為125元,應(yīng)納稅額為535元。但每次發(fā)放季度獎時,都必須與其當(dāng) 月的工資收入合并繳稅,所以每次發(fā)放季度獎的那個月,也是他最不愿意看到工資明細單的那個月--那個月的所得稅率和所得稅額令他非常"郁悶"。在那些月份 里,他的當(dāng)月所得總額為8000元,減去1600元的起征點(費用扣除額),應(yīng)納稅所得額為6400元,對應(yīng)的適用稅率為20%,對應(yīng)的速算扣除數(shù)為 375元,應(yīng)納稅額為905元。所以說,2000元的季度獎為他當(dāng)月增加了370元(905-535)的稅收負擔(dān)。一年四個季度,四次季度獎一共繳稅 1480元。加上12000元的單次年終獎所得稅為1175元,那么張先生需要全年總共2萬元的獎金繳納所得稅2655元。

          如果王老板平時不給張先生分次發(fā)季度獎,而是將總共8000元的季度獎與12000元的年終獎一起放在元月發(fā)放,那么張先生的年度獎金一共需要繳稅1975元(20000×10%-25)。

          顯然,對于張先生而言,一般來說是更樂意接受老板一次性給他發(fā)放年終獎2萬元,而不是將2萬元拆開為季度獎和年終獎分次發(fā)放,因為這樣可以減少680元的稅金負擔(dān)。

          我國個人所得稅稅率表(工資、薪金所得適用)

          級數(shù) 全月應(yīng)納稅所得額 稅率(%) 速算扣除數(shù)(元)
          1 不超過500元的 5 0
          2 超過500元至2000元的部分(含2000元) 10 25
          3 超過2000元至5000元的部分(含5000元) 15 125
          4 超過5000元至20000元的部分(含20000元) 20 375
          5 超過20000元至40000元的部分(含40000元) 25 1375
          6 超過40000元至60000元的部分(含60000元) 30 3375
          7 超過60000元至80000元的部分(含80000元) 35 6375
          8 超過80000元至100000元的部分(含100000元) 40 10375
          9 超過100000元的部分 45 15375


          注:正常月份下,工資,月應(yīng)納稅所得額= 月工資、薪金所得-1600元;月應(yīng)納稅額= 月應(yīng)納稅所得額×適用稅率-速算扣除數(shù)
          posted @ 2009-11-09 10:57 王永慶 閱讀(1021) | 評論 (0)編輯 收藏
              Web服務(wù)是構(gòu)建B2B應(yīng)用最為重要的利器之一,使用它能夠構(gòu)建、集成大型的系統(tǒng)。這一切都是通過發(fā)送XML消息給已定義的模塊化接口完成的。借助于無狀態(tài)會話Bean能夠構(gòu)建Web服務(wù)。為實現(xiàn)Java客戶對Web服務(wù)的訪問,需要使用到JAX-RPC.Web服務(wù)是構(gòu)建SOA的一種方式。SOA是架構(gòu)方法,它能夠?qū)⒏鞣N異構(gòu)應(yīng)用集成起來,并組成更大的分布式應(yīng)用,最后通過服務(wù)接口的形式將整個應(yīng)用支撐起來。
              服務(wù)提供者創(chuàng)建抽象服務(wù)定義,并將它發(fā)布到服務(wù)注冊器中。對于WEB服務(wù)而言,服務(wù)定義是通過WSDL文件給出的;服務(wù)注冊器需要遵循UDDI標(biāo)準(zhǔn)。服務(wù)請求者可以使用一套查詢機制從服務(wù)注冊器中查找到WSDL文件,如果找到合適的服務(wù)定義,請求者將綁定到服務(wù)提供者上。
              服務(wù)接口類似于對象或EJB接口。但是對于WEB服務(wù)而言,服務(wù)接口更為靈活。比如服務(wù)實現(xiàn)和客戶處于松耦合的關(guān)系,而這在其他EJB應(yīng)用或分布式應(yīng)用中是實現(xiàn)不了的。這種松耦合使得客戶和服務(wù)實現(xiàn)能夠運行在不同平臺上,比如Microsoft.NET客戶能夠訪問到J2EE應(yīng)用服務(wù)器中所運行的服務(wù)。另外,相比Java對象而言,Web服務(wù)實體的粒度更粗。
              通過標(biāo)準(zhǔn)化接口,能夠加強SOA的模塊化;通過松耦合,能夠提高SOA的靈活性;通過XML,能夠增強SOA擴展性。在B2B場合,這些都是很重要的因素。WEB服務(wù)能夠在那些使用了多種異構(gòu)平臺的企業(yè)應(yīng)用中大顯身手。所有的WEB服務(wù)都是構(gòu)建在XML和Internet協(xié)議上的。EJB只能夠采用Java開發(fā)。如果使用其他語言開發(fā)應(yīng)用,互操作如何實現(xiàn)?
              組成WEB服務(wù)的事實標(biāo)準(zhǔn)可以通過如下等式表達:
              Web服務(wù) = WSDL+SOAP+UDDI

          1、WSDL語言比Java更抽象、廣度更大。HelloWorldWSDL中存在<service>標(biāo)簽,它能夠在具體地址提供若干<port>.<port>代表了服務(wù)接口及對具體協(xié)議的綁定。
          2、服務(wù)描述包含了Endpoint地址。WSDL是由Java接口和對象引用構(gòu)成的。換句話說,Web服務(wù)不存在真正的實體,它們不是對象,因此必須將它們按照模塊化對待。
          3、根據(jù)輸入、輸出定義操作。開發(fā)者需要將輸入、輸出消息表示為XML元素。
          4、采用的綁定是SOAP綁定。到目前為止,只能采用SOAP綁定。也請注意,<soap:binding>標(biāo)簽還存在style="rpc"屬性,因此可以看出style還存在其他取值,目前,用于交換SOAP消息的另一種風(fēng)格是文檔風(fēng)格(document-style)。文檔風(fēng)格意味著在SOAP消息體中不在包含對具體操作的描述。

              SOAP協(xié)議為Web服務(wù)和它們的客戶定義了XML消息格式。SOAP消息格式非常簡單。它實際包含兩部分內(nèi)容:其一,HTTP POST請求頭信息。其二,XML文檔,這就是SOAP信封(Envelope)。另外,通過上述兩分SOAP消息,我們還想表達Web服務(wù)中的另一個重要概念。從SOAP協(xié)議的使用過程來看,它非常輕量,因為它對處于交互中的客戶和服務(wù)沒有任何限制。但是,從SOAP協(xié)議的大小、性能角度考慮,它并不輕量。如果不壓縮SOAP消息,則需要在網(wǎng)絡(luò)上傳遞大量的SOAP數(shù)據(jù)消息。因此,采用二進制更為明智,比如CORAB的IIOP協(xié)議。對于含有大量的SOAP數(shù)據(jù)消息進行壓包和解包操作將耗費大量的CPU時間。請不要忘記,WEB服務(wù)的誕生背景,它只是為集成應(yīng)用而來的,而不是替換現(xiàn)有的高性能中間件平臺技術(shù)。否則,就不需要使用web服務(wù)了。

              XML文檔和平臺無關(guān)性,借助于標(biāo)準(zhǔn)化的XML文檔,WEB服務(wù)能夠幫助集成異構(gòu)的分布式系統(tǒng)。在實際應(yīng)用開發(fā)過程中,它具有許多優(yōu)勢,比如松耦合、平臺無關(guān)性、遵循XML方面的標(biāo)準(zhǔn)、能夠合并不同的XML技術(shù)等。借助于XML能夠?qū)崿F(xiàn)應(yīng)用和中間件平臺的松耦合,這是很重要的優(yōu)勢。
              比如在開發(fā)EJB組件時,客戶和服務(wù)器端同事需要使用組件接口。一旦組件接口發(fā)生變動,比如需要往方法簽名中新增參數(shù),則EJB組件本身需要重新構(gòu)建、集成、部署。當(dāng)然,客戶也逃脫不了重新編譯的命運。因此,它們之間并沒有實現(xiàn)松耦合,開發(fā)者不能獨立的開發(fā)應(yīng)用組件。否則,一旦某些組件發(fā)生變動,應(yīng)用的其他部分也需要變動。我們都希望應(yīng)用具有良好的擴展性。對基于IIOP的請求消息而言,所有的參與者必須使用相同的類型信息,否則不能夠正確對消息進行解包操作。而且,在IIOP技術(shù)領(lǐng)域中,應(yīng)用必須能夠理解消息的所有內(nèi)容。如果基于XML和XML消息開發(fā)應(yīng)用,則這些限制將不復(fù)存在。
             
              J2EE平臺技術(shù)對WEB服務(wù)提供了一流的支持能力。無論WEB服務(wù)實現(xiàn),還是WEB服務(wù)客戶,都可以使用JAVA語言開發(fā)完成。在J2EE中,使用WEB服務(wù)同RMI、RMI-IIOP并沒有多大區(qū)別。他們都將具體傳輸層屏蔽掉,使得開發(fā)者能夠?qū)W⒂跇I(yè)務(wù)邏輯。
              JSR921規(guī)范,即實現(xiàn)企業(yè)WEB服務(wù),定義了WEB服務(wù)編程模型。它使用術(shù)語port組件,描述web服務(wù)的服務(wù)器端視圖。它是服務(wù)接口的java實現(xiàn)。而且,它遵循服務(wù)接口到Java的映射,并提供了相應(yīng)的Java實現(xiàn)。需要將它部署并運行在容器中。使用EJB開發(fā)WEB服務(wù)需要創(chuàng)建若干port組件。其中,還需要提供若干XML部署描述符。當(dāng)然,直接基于EJB實現(xiàn)WEB服務(wù)是J2EE平臺中實現(xiàn)WEB服務(wù)的最大優(yōu)勢。

              JAX-RPC服務(wù)端點接口,現(xiàn)在,來開發(fā)另一遠程接口,它將企業(yè)Bean所提供的業(yè)務(wù)方法都列舉出來,我們稱之為服務(wù)Endpoint接口(Service Endpoint Interface,SEI),下面給出了代碼。
             

          package com.testproject.ejb.web;

          /*
           * Hello服務(wù)Endpoint接口
           * 需要注意的是,這里使用的是EJB2.1無狀態(tài)會話Bean,它作為WEB服務(wù)端點時可以不提供Home接口和Remote
           * Locale接口,它提供的是web服務(wù)端點接口,這個接口擴展了Remote接口。
           
          */

          public interface HelloInterface extends java.rmi.Remote {
              
          public String hello()throws java.rmi.RemoteException;
          }

           

              JAX-RPC要求WEB服務(wù)提供SEI,EJB容器同WEB服務(wù)交互時需要使用它。JAX-RPC規(guī)范要求SEI遵循如下規(guī)則:
          1、接口必須間接或直接繼承java.rmi.Remote.
          2、所有的方法必須拋出java.rmi.RemoteException.
          3、方法參數(shù)和返回類型必須是JAX-RPC支持的JAVA類型。
          4、SEI中不能包含敞亮。

              在J2EE1.4平臺中,可以對EJB技術(shù)進行了升級,使得無狀態(tài)會話Bean可以直接部署為Web服務(wù)端點。這樣,在J2ee1.4平臺下,開發(fā)Web服務(wù)將更加簡單。這樣,EJB2.1中的無狀態(tài)會話Bean可以有3種不同的客戶端:本地接口的客戶端、遠程接口的客戶端和web服務(wù)客戶端。EJB的WEB服務(wù)客戶端視圖通過WSDL文檔描述。
              待續(xù)......

           


           


              

             
          posted @ 2009-11-09 10:22 王永慶 閱讀(175) | 評論 (0)編輯 收藏
          當(dāng)我們有很多類需要通知時,顯示的創(chuàng)建每個代理就會顯得很笨拙。幸運的是,Spring有一個自動代理機制,它可以讓容器為我們產(chǎn)生代理。Spring有2個類提供這種服務(wù):BeanNameAutoProxyCreate和DefaultAdvisorAutoProxyCreator.

          BeanNameAutoProxyCreate:為匹配一系列名字的Bean自動創(chuàng)建代理。它也允許在名字的2端進行通配符的匹配。
          <?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/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
              
          <bean id="performanceThresholdInterceptor" class="com.wyq.spring.common.aopinstance.autoproxy.PerformanceThresholdInterceptor">
                  
          <constructor-arg>
                      
          <value>5000</value>
                  
          </constructor-arg>
              
          </bean>
              
          <!-- 
                  如果Bean是一個Advisor或攔截器,它將應(yīng)用到代理對象的所有方法上。如果是通知的話,Advisor切入點
                  會根據(jù)不同Bean將通知應(yīng)用到不同的地方。
               
          -->
              
          <bean id="performanceThresholdProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
                  
          <property name="beanNames">
                      
          <list>
                          
          <value>*Service</value>
                      
          </list>
                  
          </property>
                  
          <property name="interceptorNames">
                      
          <value>performanceThresholdInterceptor</value>
                  
          </property>
              
          </bean>
          </beans>
          更強大的自動代理創(chuàng)建器是DefaultAdvisorAutoProxyCreator.當(dāng)ApplicationContext讀入所有Bean的配置信息后,DefaultAdvisorAutoProxyCreator將掃描上下文,尋找所有的Advisor.它將這些Advisor應(yīng)用到所有符合Advisor切入點的Bean中。
          <?xml version="1.0" encoding="UTF-8"?>
          <beans
              
          xmlns="http://www.springframework.org/schema/beans"
              xmlns:xsi
          ="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation
          ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
              
          <bean id="performanceThresholdInterceptor" class="com.wyq.spring.common.aopinstance.autoproxy.PerformanceThresholdInterceptor">
                  
          <constructor-arg>
                      
          <value>5000</value>
                  
          </constructor-arg>
              
          </bean>
              
          <!-- 
                  一個Advisor是一個切入點和一個通知的結(jié)合體。不用顯示的將Advisor與其他東西結(jié)合,現(xiàn)在只要簡單的定義他們,然后讓他們自動
                  應(yīng)用到他們匹配的地方。這樣松耦合Bean以及他們的通知就實現(xiàn)了。你只管寫好你的Bean,寫好你的通知,讓容器來充當(dāng)媒婆。
               
          -->
              
          <bean id="advisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
                  
          <property name="advice">
                      
          <bean class="com.wyq.spring.common.aopinstance.autoproxy.PerformanceThresholdInterceptor"></bean>
                  
          </property>
                  
          <property name="pattern">
                      
          <value>.+Service\..+</value>
                  
          </property>
              
          </bean>
              
          <bean id="autoProxyCreator" class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
              
          </bean>
          </beans>

          posted @ 2009-11-06 16:00 王永慶 閱讀(262) | 評論 (0)編輯 收藏
          引入與其他類型的通知不同,引入影響的是整個類。他們通過給需要消息的類添加方法和屬性來實現(xiàn)。引入讓你能夠動態(tài)地建立復(fù)合對象,提供了多態(tài)繼承的好處。
          Spring通過一個特殊的方法攔截器接口IntroductionMethodInterceptor來實現(xiàn)引入。這個接口添加一個方法:
          boolean implementsInterface(Class intf);
          如果IntroductionMethodInterceptor是為了實現(xiàn)指定接口,那么方法implementsInterface應(yīng)該返回true.就是說,調(diào)用這個接口聲明的方法的任何調(diào)用將被委派給IntroductionMethodInterceptor的invoke()方法.invoke()方法負責(zé)實現(xiàn)這個方法,不能調(diào)用MethodInvocation.proceed().他引入了新的接口,調(diào)用目標(biāo)對象是沒有用的。

          Spring提供了一個方便的類來處理我們的大多數(shù)應(yīng)用:DelegatingintroductionInterceptor.代碼:
          package com.wyq.spring.base.aopinstance;

          import java.util.Date;

          /** 
           * 
          @author 作者 
           * 
          @version 創(chuàng)建時間:2009-11-6 下午02:58:21 
           * 類說明 
           
          */
          public interface Auditable {
              
          void setLastModifiedDate(Date date);
              Date getLastModifiedDate();
          }

          package com.wyq.spring.base.aopinstance;

          import java.util.Date;

          import org.springframework.aop.support.DelegatingIntroductionInterceptor;

          /** 
           * 
          @author 作者 
           * 
          @version 創(chuàng)建時間:2009-11-6 下午03:00:06 
           * 類說明 
           
          */
          public class AuditableMixin extends DelegatingIntroductionInterceptor implements
                  Auditable {
              
          private Date lastModifiedDate;
              
          /*
               * 注意我們不用實現(xiàn)invoke()方法了,DelegatingIntroductionInterceptor為我們實現(xiàn)了這
               * 個方法。DelegatingIntroductionInterceptor也要實現(xiàn)你的混合類暴露的任何方法,并且將
               * 任何對這些方法的調(diào)用委托給這個混合類。因為我們的類實現(xiàn)了Auditable,對這個接口的方法的
               * 所有調(diào)用都將調(diào)用我們的攔截器。任何其他方法將委托給目標(biāo)對象。
               
          */
              
          public Date getLastModifiedDate() {
                  
          return lastModifiedDate;
              }

              
          public void setLastModifiedDate(Date lastModifiedDate) {
                  
          this.lastModifiedDate = lastModifiedDate;
              }

          }

          創(chuàng)建一個引入Advisor:
          因為引入通知只應(yīng)用在類層次上,所以引入有他們自己的Advisor:IntroductionAdvisor.Spring也提供了一個適合大多數(shù)情況的缺省實現(xiàn)。它的名字叫做DefaultIntroductionAdvisor.
          BeanFactory對象是一個負責(zé)創(chuàng)建其他JavaBean的JavaBean.我們的ProxyFactoryBean創(chuàng)建代理對象。和其他JavaBean一樣,它有控制行為的屬性。
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

          <beans>
              
          <!-- 創(chuàng)建一個目標(biāo)對象 -->
              
          <bean id="courseTarget" class="com.springinaction.training.model.Course"></bean>
              
          <!-- 創(chuàng)建一個引入 -->
              
          <bean id="auditableMixin" class="com.springinaction.training.advice.AuditableMixin"></bean>
              
          <!-- 創(chuàng)建一個引入通知 -->
              
          <bean id="auditableAdvisor" class="org.springframework.aop.support.DefaultIntroductionAdvisor">
                  
          <constructor-arg>
                      
          <ref bean="auditableMixin"/>
                  
          </constructor-arg>
              
          </bean>
              
          <!-- 創(chuàng)建一個代理
                  
          ProxyFactoryBean的屬性
                   target:代理的目標(biāo)對象
                   proxyinterfaces:代理應(yīng)該實現(xiàn)的接口列表
                   interceptorNames:需要應(yīng)用到目標(biāo)對象上的通知Bean的名字,可以是攔截器、Advisor或者其他通知類型的名字。
                   singleton:在每次抵用getBean時,工廠是否返回的是同一個代理實例。如果是有狀態(tài)通知,應(yīng)該設(shè)置為false.
                   aopProxyFactory:通常不需要使用這個屬性。
                   ProxyTargetClass:是否代理目標(biāo)類,而不是接口類。
                -->
              
          <bean id="course" class="org.springframework.aop.framework.ProxyFactoryBean">
                  
          <property name="proxyTargetClass">
                      
          <value>true</value>
                  
          </property>
                  
          <property name="singleton">
                      
          <value>false</value>
                  
          </property>
                  
          <property name="proxyInterfaces">
                      
          <value>com.springinaction.training.advice.Auditable</value>
                  
          </property>
                  
          <property name="interceptorNames">
                      
          <ref bean="auditableAdvisor"/>
                  
          </property>
                  
          <property name="target">
                      
          <ref bean="courseTarget"/>
                  
          </property>
              
          </bean>
          </beans>

          posted @ 2009-11-06 15:35 王永慶 閱讀(169) | 評論 (0)編輯 收藏
          僅列出標(biāo)題
          共7頁: 上一頁 1 2 3 4 5 6 7 下一頁 
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          關(guān)注blogs

          搜索

          •  

          最新評論

          • 1.?re: 心中的那個她[未登錄]
          • 如果心情能那么容易放開就好了,碰到她是我的緣分,但是她的緣分不知道在哪里。
          • --王永慶
          • 2.?re: 心中的那個她[未登錄]
          • 兄弟,喜歡就大膽去追好了,就是因為喜歡才會有不愉快,如果想一輩子沒有這些煩惱,找一個可有可無的人就好了。這種事講的是緣分吧。別人對你好不好其實不太重要。放開心情就好了。
          • --萍水相逢
          • 3.?re: 心中的那個她
          • 只能同甘不能共苦,就他媽算了吧,程序員也是人??!我現(xiàn)在也很討厭女的不理解人情。
          • --咖啡妝
          • 4.?re: 難以割舍的那份情感
          • 評論內(nèi)容較長,點擊標(biāo)題查看
          • --王永慶
          • 5.?re: 難以割舍的那份情感
          • 評論內(nèi)容較長,點擊標(biāo)題查看
          • --隔葉黃鶯

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 桦甸市| 永和县| 弥渡县| 长岛县| 永昌县| 安阳县| 忻城县| 青海省| 合江县| 偏关县| 海淀区| 和林格尔县| 交口县| 迁西县| 中超| 长葛市| 阜城县| 白河县| 富裕县| 玉树县| 武城县| 宜丰县| 任丘市| 威远县| 棋牌| 上蔡县| 察隅县| 丰台区| 多伦县| 信阳市| 邵阳县| 弥渡县| 广昌县| 师宗县| 奈曼旗| 玉田县| 延边| 江孜县| 温宿县| 合阳县| 保康县|