一个CXF集成SPRING的WEBSERVICE完整实例
1 首先准备以下JAR包
- activation.jar
- commons-logging-1.1.1.jar
- cxf-2.5.6.jar
- jaxb-api-2.2.1.jar
- jaxb-impl-2.1.3.jar
- jaxws-api-2.2.8.jar
- neethi-3.0.2.jar
- ow2-jws-2.0-spec-1.0.11.jar
- spring-aop-3.0.5.RELEASE.jar
- spring-asm-3.0.5.RELEASE.jar
- spring-beans-3.0.5.RELEASE.jar
- spring-context-3.0.5.RELEASE.jar
- spring-context-support-3.0.5.RELEASE.jar
- spring-core-3.0.5.RELEASE.jar
- spring-expression-3.0.5.RELEASE.jar
- spring-oxm-3.0.5.RELEASE.jar
- spring-web-3.0.5.RELEASE.jar
- spring-ws-core-2.0.2.RELEASE.jar
- spring-ws-security-2.0.2.RELEASE.jar
- spring-xml-1.5.9.jar
- stax-api-1.0.jar
- stax2-api-3.1.1.jar
- webservices-api-2.2.0-1.jar
- webservices-extra-2.1-20.jar
- woodstox-core-asl-4.1.2.jar
- ws-test.jar
- wsdl4j-1.6.2.jar
- wss4j-1.6.7.jar
- xmlschema-core-2.0.3.jar
activation.jar
commons-logging-1.1.1.jar
cxf-2.5.6.jar
jaxb-api-2.2.1.jar
jaxb-impl-2.1.3.jar
jaxws-api-2.2.8.jar
neethi-3.0.2.jar
ow2-jws-2.0-spec-1.0.11.jar
spring-aop-3.0.5.RELEASE.jar
spring-asm-3.0.5.RELEASE.jar
spring-beans-3.0.5.RELEASE.jar
spring-context-3.0.5.RELEASE.jar
spring-context-support-3.0.5.RELEASE.jar
spring-core-3.0.5.RELEASE.jar
spring-expression-3.0.5.RELEASE.jar
spring-oxm-3.0.5.RELEASE.jar
spring-web-3.0.5.RELEASE.jar
spring-ws-core-2.0.2.RELEASE.jar
spring-ws-security-2.0.2.RELEASE.jar
spring-xml-1.5.9.jar
stax-api-1.0.jar
stax2-api-3.1.1.jar
webservices-api-2.2.0-1.jar
webservices-extra-2.1-20.jar
woodstox-core-asl-4.1.2.jar
ws-test.jar
wsdl4j-1.6.2.jar
wss4j-1.6.7.jar
xmlschema-core-2.0.3.jar
我的环境是IBMJDK5,因而有一些xml及webservice包是不存在的,就会比在SUN JDK的环境中要多一些JAR包,如ow2-jws-2.0-spec-1.0.11.jar,webservices-api-2.2.0-1.jar,jaxws-api-2.2.8.jar等,根据实际情况进行选择了。
2 编写服务端
2.1 新建一个空的WEB工程,我这里命名为ws_test,将其放置于TOMCAT的webapps目录;
2.2 然后在ws_test下面建立WEB-INF文件夹,并在WEB-INF文件夹中建立目录lib;
2.3 将上面提到的JAR包都拷贝到lib目录中;
2.4 在WEB-INF目录中新建web.xml文件,并将如下内容放于其中:
- <?xml version="1.0" encoding="ISO-8859-1"?>
- <web-app xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
- version="2.5">
- <description>
- Web Service Test.
- </description>
- <display-name>Web Service Test</display-name>
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath*:applicationContext-server.xml</param-value>
- </context-param>
- <listener>
- <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
- </listener>
- <servlet>
- <servlet-name>CXFService</servlet-name>
- <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>CXFService</servlet-name>
- <url-pattern>/*</url-pattern>
- </servlet-mapping>
- </web-app>
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<description>
Web Service Test.
</description>
<display-name>Web Service Test</display-name>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext-server.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<servlet>
<servlet-name>CXFService</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CXFService</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
这个配置文件是WEB应用的核心配置文件,如Listener的配置,servlet请求的映射等,这里并配置了启动的时候加载SPRING,并初使化我们的WEBSERVICE服务端配置文件。
2.5 在ECLIPSE中新建JAVA工程,并在工程中新建lib目录,将上面提到的JAR包全部放到lib目录,并将他们全部加入到classpath中;
2.6 增加服务端的JAVA类:
- package com.use.test.ws.entity;
- public class User {
- int id ;
- String name = null;
- String address = null;
- String email = null;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getAddress() {
- return address;
- }
- public void setAddress(String address) {
- this.address = address;
- }
- public String getEmail() {
- return email;
- }
- public void setEmail(String email) {
- this.email = email;
- }
- }
package com.use.test.ws.entity;
public class User {
int id ;
String name = null;
String address = null;
String email = null;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
- package com.use.test.ws.server;
- import javax.jws.WebParam;
- import javax.jws.WebService;
- import javax.jws.soap.SOAPBinding;
- import javax.jws.soap.SOAPBinding.Style;
- import com.use.test.ws.entity.User;
- /**
- * <b>function:</b>定制客户端请求WebService所需要的接口
- */
- @WebService
- @SOAPBinding(style = Style.RPC)
- public interface IService {
- public User getUserByName(@WebParam(name = "name") String name);
- public void setUser(User user);
- }
package com.use.test.ws.server;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
import com.use.test.ws.entity.User;
/**
* <b>function:</b>定制客户端请求WebService所需要的接口
*/
@WebService
@SOAPBinding(style = Style.RPC)
public interface IService {
public User getUserByName(@WebParam(name = "name") String name);
public void setUser(User user);
}
- package com.use.test.ws.server;
- import java.util.Date;
- import javax.jws.WebParam;
- import javax.jws.WebService;
- import javax.jws.soap.SOAPBinding;
- import javax.jws.soap.SOAPBinding.Style;
- import com.use.test.ws.entity.User;
- /**
- * <b>function:</b> WebService传递复杂对象,如JavaBean、Array、List、Map等
- */
- @WebService
- @SOAPBinding(style = Style.RPC)
- @SuppressWarnings("deprecation")
- public class TestService implements IService {
- public User getUserByName(@WebParam(name = "name") String name) {
- User user = new User();
- user.setId(new Date().getSeconds());
- user.setName(name);
- user.setAddress("china");
- user.setEmail(name + "@test.com");
- return user;
- }
- public void setUser(User user) {
- System.out.println("############Server setUser###########");
- System.out.println("setUser:" + user);
- }
- }
package com.use.test.ws.server;
import java.util.Date;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
import com.use.test.ws.entity.User;
/**
* <b>function:</b> WebService传递复杂对象,如JavaBean、Array、List、Map等
*/
@WebService
@SOAPBinding(style = Style.RPC)
@SuppressWarnings("deprecation")
public class TestService implements IService {
public User getUserByName(@WebParam(name = "name") String name) {
User user = new User();
user.setId(new Date().getSeconds());
user.setName(name);
user.setAddress("china");
user.setEmail(name + "@test.com");
return user;
}
public void setUser(User user) {
System.out.println("############Server setUser###########");
System.out.println("setUser:" + user);
}
}
2.7 在src目录下建立applicationContext-client.xml,并放入以下内容:
<span style="color: rgb(9, 144, 0);"><span style="color: rgb(0, 0, 0); font-weight: bold;"></span></span><div class="dp-highlighter bg_html"><div class="bar"><div class="tools"><strong>[html]</strong> <a target=_blank title="view plain" class="ViewSource" href="http://blog.csdn.net/fenglibing/article/details/16842587#">view plain</a><span data-mod="popu_168"> <a target=_blank title="copy" class="CopyToClipboard" href="http://blog.csdn.net/fenglibing/article/details/16842587#">copy</a></span><span data-mod="popu_169"> <a target=_blank title="print" class="PrintSource" href="http://blog.csdn.net/fenglibing/article/details/16842587#">print</a></span><a target=_blank title="?" class="About" href="http://blog.csdn.net/fenglibing/article/details/16842587#">?</a></div></div><ol class="dp-xml"><li class="alt"><span><span class="tag"><</span><span class="tag-name">span</span><span> </span><span class="attribute">xmlns</span><span>=</span><span class="attribute-value">"http://www.w3.org/1999/xhtml"</span><span class="tag">></span><span class="tag"><</span><span class="tag-name">span</span><span> </span><span class="attribute">xmlns</span><span>=</span><span class="attribute-value">"http://www.w3.org/1999/xhtml"</span><span class="tag">></span><span class="tag"><?</span><span class="tag-name">xml</span><span> </span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span> </span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span class="tag">?></span><span> </span></span></li><li><span><span class="tag"><</span><span class="tag-name">beans</span><span> </span><span class="attribute">xmlns</span><span>=</span><span class="attribute-value">"http://www.springframework.org/schema/beans"</span><span> </span></span></li><li class="alt"><span> <span class="attribute">xmlns:context</span><span>=</span><span class="attribute-value">"http://www.springframework.org/schema/context"</span><span> </span></span></li><li><span> <span class="attribute">xmlns:jaxws</span><span>=</span><span class="attribute-value">"http://cxf.apache.org/jaxws"</span><span> </span></span></li><li class="alt"><span> <span class="attribute">xmlns:xsi</span><span>=</span><span class="attribute-value">"http://www.w3.org/2001/XMLSchema-instance"</span><span> </span></span></li><li><span> <span class="attribute">xsi:schemaLocation</span><span>="http://www.springframework.org/schema/beans </span></span></li><li class="alt"><span> http://www.springframework.org/schema/beans/spring-beans-3.0.xsd </span></li><li><span> http://www.springframework.org/schema/context </span></li><li class="alt"><span> http://www.springframework.org/schema/context/spring-context-3.0.xsd </span></li><li><span> http://cxf.apache.org/jaxws </span></li><li class="alt"><span> http://cxf.apache.org/schemas/jaxws.xsd"<span class="tag">></span><span> </span></span></li><li><span> <span class="tag"><</span><span class="tag-name">import</span><span> </span><span class="attribute">resource</span><span>=</span><span class="attribute-value">"classpath:META-INF/cxf/cxf.xml"</span><span class="tag">/></span><span> </span></span></li><li class="alt"><span> <span class="tag"><</span><span class="tag-name">import</span><span> </span><span class="attribute">resource</span><span>=</span><span class="attribute-value">"classpath:META-INF/cxf/cxf-extension-soap.xml"</span><span class="tag">/></span><span> </span></span></li><li><span> <span class="tag"><</span><span class="tag-name">import</span><span> </span><span class="attribute">resource</span><span>=</span><span class="attribute-value">"classpath:META-INF/cxf/cxf-servlet.xml"</span><span class="tag">/></span><span> </span></span></li><li class="alt"><span> <span class="tag"><</span><span class="tag-name">bean</span><span> </span><span class="attribute">id</span><span>=</span><span class="attribute-value">"userServiceBean"</span><span> </span><span class="attribute">class</span><span>=</span><span class="attribute-value">"com.use.test.ws.server.TestService"</span><span class="tag">/></span><span> </span></span></li><li><span> <span class="tag"><</span><span class="tag-name">bean</span><span> </span><span class="attribute">id</span><span>=</span><span class="attribute-value">"inMessageInterceptor"</span><span> </span><span class="attribute">class</span><span>=</span><span class="attribute-value">"org.apache.cxf.interceptor.LoggingInInterceptor"</span><span class="tag">/></span><span> </span></span></li><li class="alt"><span> <span class="tag"><</span><span class="tag-name">bean</span><span> </span><span class="attribute">id</span><span>=</span><span class="attribute-value">"outLoggingInterceptor"</span><span> </span><span class="attribute">class</span><span>=</span><span class="attribute-value">"org.apache.cxf.interceptor.LoggingOutInterceptor"</span><span class="tag">/></span><span> </span></span></li><li><span> <span class="tag"><</span><span class="tag-name">jaxws:server</span><span> </span><span class="attribute">id</span><span>=</span><span class="attribute-value">"userService"</span><span> </span><span class="attribute">serviceClass</span><span>=</span><span class="attribute-value">"com.use.test.ws.server.IService"</span><span> </span><span class="attribute">address</span><span>=</span><span class="attribute-value">"/Users"</span><span class="tag">></span><span> </span></span></li><li class="alt"><span> <span class="tag"><</span><span class="tag-name">jaxws:serviceBean</span><span class="tag">></span><span> </span></span></li><li><span> <span class="tag"><</span><span class="tag-name">ref</span><span> </span><span class="attribute">bean</span><span>=</span><span class="attribute-value">"userServiceBean"</span><span class="tag">/></span><span> </span></span></li><li class="alt"><span> <span class="tag"></</span><span class="tag-name">jaxws:serviceBean</span><span class="tag">></span><span> </span></span></li><li><span> <span class="tag"><</span><span class="tag-name">jaxws:inInterceptors</span><span class="tag">></span><span> </span></span></li><li class="alt"><span> <span class="tag"><</span><span class="tag-name">ref</span><span> </span><span class="attribute">bean</span><span>=</span><span class="attribute-value">"inMessageInterceptor"</span><span class="tag">/></span><span> </span></span></li><li><span> <span class="tag"></</span><span class="tag-name">jaxws:inInterceptors</span><span class="tag">></span><span> </span></span></li><li class="alt"><span> <span class="tag"><</span><span class="tag-name">jaxws:outInterceptors</span><span class="tag">></span><span> </span></span></li><li><span> <span class="tag"><</span><span class="tag-name">ref</span><span> </span><span class="attribute">bean</span><span>=</span><span class="attribute-value">"outLoggingInterceptor"</span><span class="tag">/></span><span> </span></span></li><li class="alt"><span> <span class="tag"></</span><span class="tag-name">jaxws:outInterceptors</span><span class="tag">></span><span> </span></span></li><li><span> <span class="tag"></</span><span class="tag-name">jaxws:server</span><span class="tag">></span><span> </span></span></li><li class="alt"><span><span class="tag"></</span><span class="tag-name">beans</span><span class="tag">></span><span> </span></span></li><li><span><span class="tag"></</span><span class="tag-name">span</span><span class="tag">></span><span class="tag"></</span><span class="tag-name">span</span><span class="tag">></span><span class="tag"><</span><span class="tag-name">span</span><span> </span><span class="attribute">style</span><span>=</span><span class="attribute-value">"color: rgb(9, 144, 0);"</span><span class="tag">></span><span class="tag"><</span><span class="tag-name">span</span><span> </span><span class="attribute">style</span><span>=</span><span class="attribute-value">"color: rgb(0, 0, 0); font-weight: bold;"</span><span class="tag">></span><span class="tag"><</span><span class="tag-name">span</span><span> </span><span class="attribute">style</span><span>=</span><span class="attribute-value">"color: rgb(0, 0, 0); font-weight: bold;"</span><span class="tag">></span><span class="tag"></</span><span class="tag-name">span</span><span class="tag">></span><span class="tag"></</span><span class="tag-name">span</span><span class="tag">></span><span class="tag"></</span><span class="tag-name">span</span><span class="tag">></span><span> </span></span></li></ol></div><pre class="html" style="display: none;" name="code"><span xmlns="http://www.w3.org/1999/xhtml"><span xmlns="http://www.w3.org/1999/xhtml"><?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:jaxws="http://cxf.apache.org/jaxws" 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-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <import resource="classpath:META-INF/cxf/cxf.xml"/> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/> <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/> <bean id="userServiceBean" class="com.use.test.ws.server.TestService"/> <bean id="inMessageInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor"/> <bean id="outLoggingInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor"/> <jaxws:server id="userService" serviceClass="com.use.test.ws.server.IService" address="/Users"> <jaxws:serviceBean> <ref bean="userServiceBean"/> </jaxws:serviceBean> <jaxws:inInterceptors> <ref bean="inMessageInterceptor"/> </jaxws:inInterceptors> <jaxws:outInterceptors> <ref bean="outLoggingInterceptor"/> </jaxws:outInterceptors> </jaxws:server> </beans> </span></span><span style="color: rgb(9, 144, 0);"><span style="color: rgb(0, 0, 0); font-weight: bold;"><span style="color: rgb(0, 0, 0); font-weight: bold;"></span></span></span>
2.8 将建立的JAVA工程导出jar包,只导出src下面的内容即,并将这个jar包放到上面的TOMCAT工程中的ws_test/WEB-INF/lib目录下,并启动TOMCAT服务器;
2.9 启动成功后,此时访问URL:http://localhost:8080/ws_test/Users?wsdl,应该会看到WSDL的输出。
3 编写客户端
3.1 独立的客户端请求类
- package com.use.test.ws.client;
- import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
- import com.use.test.ws.entity.User;
- import com.use.test.ws.server.IService;
- public class TestClient {
- public static void main(String[] args) {
- JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
- factory.setServiceClass(IService.class);
- factory.setAddress("http://localhost:8080/ws_test/Users");
- IService service = (IService) factory.create();
- System.out.println("#############Client getUserByName##############");
- User user = service.getUserByName("hoojo");
- System.out.println(user);
- user.setAddress("China-Guangzhou");
- service.setUser(user);
- }
- }
package com.use.test.ws.client;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import com.use.test.ws.entity.User;
import com.use.test.ws.server.IService;
public class TestClient {
public static void main(String[] args) {
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(IService.class);
factory.setAddress("http://localhost:8080/ws_test/Users");
IService service = (IService) factory.create();
System.out.println("#############Client getUserByName##############");
User user = service.getUserByName("hoojo");
System.out.println(user);
user.setAddress("China-Guangzhou");
service.setUser(user);
}
}
点击右键就可以运行这个类。
3.2 与SPRING的集成,首先需要在src下面建立配置文件applicationContext-client.xml,将输入以下内容:
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:jaxws="http://cxf.apache.org/jaxws"
- 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-3.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd
- http://cxf.apache.org/jaxws
- http://cxf.apache.org/schemas/jaxws.xsd">
- <import resource="classpath:META-INF/cxf/cxf.xml"/>
- <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
- <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
- <jaxws:client id="userWsClient" serviceClass="com.use.test.ws.server.IService" address="http://localhost:8080/ws_test/Users"/>
- </beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jaxws="http://cxf.apache.org/jaxws"
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-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml"/>
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
<jaxws:client id="userWsClient" serviceClass="com.use.test.ws.server.IService" address="http://localhost:8080/ws_test/Users"/>
</beans>
3.3 建立JAVA类
- package com.use.test.ws.client;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- import com.use.test.ws.entity.User;
- import com.use.test.ws.server.IService;
- /**
- * <b>function:</b>请求Spring整合CXF的WebService客户端
- */
- public class SpringUsersWsClient {
- public static void main(String[] args) {
- ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-client.xml");
- IService service = ctx.getBean("userWsClient", IService.class);
- System.out.println("#############Client getUserByName##############");
- User user = service.getUserByName("hoojo");
- System.out.println(user);
- user.setAddress("China-Guangzhou");
- service.setUser(user);
- }
- }
package com.use.test.ws.client;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.use.test.ws.entity.User;
import com.use.test.ws.server.IService;
/**
* <b>function:</b>请求Spring整合CXF的WebService客户端
*/
public class SpringUsersWsClient {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-client.xml");
IService service = ctx.getBean("userWsClient", IService.class);
System.out.println("#############Client getUserByName##############");
User user = service.getUserByName("hoojo");
System.out.println(user);
user.setAddress("China-Guangzhou");
service.setUser(user);
}
}
直接运行这个类就OK了。
4 说明 转载于http://blog.csdn.net/fenglibing/article/details/16842587