javascript
jax-rs jax-ws_极端懒惰:使用Spring Boot开发JAX-RS服务
jax-rs jax-ws
我認為可以公平地說,作為軟件開發人員,我們一直在尋找編寫更少的代碼的方法,這些代碼可以自動地或不能自動地完成更多的工作。 考慮到這一點,作為Spring產品組合的驕傲成員的Spring Boot項目中斷了傳統方法,極大地加快了并簡化了基于Spring的應用程序的開發。
關于Spring Boot ,還有很多要說的東西 ,關于它如何工作以及如何與大多數(即使不是全部) Spring項目進行無縫集成的內在細節。 但是它的功能遠不止于此,它支持與流行的Java框架進行一流的集成。
在本文中,我們將探討如何將Spring Boot與Apache CXF項目結合使用,以進行快速的REST(ful)Web服務開發。 我們很快就會看到, Spring Boot會處理很多樣板,讓我們專注于應用程序中具有真正價值的部分。 希望在本文結尾處,為您的項目采用Spring Boot的好處顯而易見。
這樣,我們就可以開始開發一個簡單的人員管理REST(ful)Web服務 ,并將其包裝到熟悉的PeopleRestService JAX-RS資源中:
@Path("/people") @Component public class PeopleRestService {@GET@Produces({MediaType.APPLICATION_JSON})public Collection<Person> getPeople() {return Collections.singletonList(new Person("a@b.com", "John", "Smith"));} }此處添加的內容不多,是非常簡單的實現,它返回人員的硬編碼集合。 我們可以通過多種方式打包和部署此JAX-RS服務,但可以說最簡單的方法是將其托管在嵌入式servlet容器(例如Tomcat , Jetty或Undertow)中 。 隨之而來的是例程:容器初始化,配置Spring上下文位置,注冊偵聽器,……讓我們看看Spring Boot如何通過剖析下面的Spring上下文配置來提供幫助。
@Configuration @EnableAutoConfiguration @ComponentScan(basePackageClasses = PeopleRestService.class) public class AppConfig {@Autowired private PeopleRestService peopleRestService;@Bean(destroyMethod = "shutdown")public SpringBus cxf() {return new SpringBus();}@Bean(destroyMethod = "destroy") @DependsOn("cxf")public Server jaxRsServer() {final JAXRSServerFactoryBean factory = new JAXRSServerFactoryBean();factory.setServiceBean(peopleRestService);factory.setProvider(new JacksonJsonProvider());factory.setBus(cxf());factory.setAddress("/");return factory.create();}@Beanpublic ServletRegistrationBean cxfServlet() {final ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new CXFServlet(), "/api/*");servletRegistrationBean.setLoadOnStartup(1);return servletRegistrationBean;} }AppConfig類看起來像一個典型的基于Spring Java的配置,除了此異常的@EnableAutoConfiguration批注,毫無疑問 ,它來自Spring Boot模塊。 在幕后,使用此注釋可以進行復雜且智能的猜測,尤其是猜測我們將要運行哪種應用程序以及我們的應用程序可能需要哪種Spring bean。 有了此配置后,我們只需要為我們的應用程序提供一個運行器,同時也要具有一些Spring Boot風格:
@SpringBootApplication public class Application {public static void main(String[] args) {SpringApplication.run(AppConfig.class, args);} }有了@SpringBootApplication元注釋,并使用SpringApplication初始化我們的Spring上下文,我們有了一個成熟的可運行Java應用程序,可以使用Spring Boot插件從Apache Maven運行該應用程序:
mvn spring-boot:run或打包為單個可運行的uber- JAR并從命令行調用:
mvn package java -jar target/jax-rs-2.0-cxf-spring-boot-0.0.1-SNAPSHOT.jar就是這樣,僅需幾個注釋以及一行代碼( main方法)。 一旦運行了應用程序,我們就可以確保我們的人員管理REST(ful)Web服務已正確部署并可以正常運行:
$ curl -i http://localhost:8080/api/peopleHTTP/1.1 200 OK Content-Type: application/json;charset=utf-8 Transfer-Encoding: chunked Server: Jetty(9.3.8.v20160314)[{"email":"a@b.com","firstName":"John","lastName":"Smith"}]在這一點上,您可能想知道它是如何工作的? 我們沒有在任何地方處理servlet容器,所以Jetty如何滿足我們的請求? 事實是,我們僅需要包含我們選擇的容器作為依賴項,例如使用Apache Maven的pom.xml文件:
<dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-server</artifactId><version>9.3.8.v20160314</version> </dependency>Spring Boot與@ EnableAutoConfiguration / @ SpringBootApplication一起完成其余工作:它檢測到類路徑中是否存在Jetty ,得出一個有效的結論,即我們的意圖是運行Web應用程序并用必要的內容補充Spring上下文。 不只是輝煌嗎?
如果不涵蓋Spring Boot項目的另一個重要功能,那就是不公平的完成:集成測試支持。 在這方面, Spring Boot采用相同的方法,并提供了一些注釋,以消除所有我們不得不另外編寫的腳手架。 例如:
@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = AppConfig.class) @WebIntegrationTest(randomPort = true) public class PeopleRestServiceIntegrationTest {@Value("${local.server.port}") private int port;@Beforepublic void setUp() {RestAssured.port = port;}@Testpublic void testListOfPersonsIsBeingReturnedSuccessfuly() {given().when() .contentType(ContentType.JSON).get("/api/people").then().statusCode(200).log().ifValidationFails();} }@SpringApplicationConfiguration (請注意我們在測試中使用的配置與主應用程序相同)和@WebIntegrationTest這兩個注解,它們將Web應用程序測試的細節考慮在內并在隨機端口上運行嵌入式Servlet容器,并且我們已經針對人員管理JAX-RS服務進行了全面的集成測試。 可通過local.server.port環境屬性獲得運行servlet容器的端口,因此我們可以在測試背景中配置REST保證的端口。 簡單容易。
在本文中,我們僅研究了使用Spring Boot來提高JAX-RS項目的開發速度的一種特定用例。 Spring Boot帶來了許多瑣碎的事情,每個發行版中都添加了越來越多的智能,更不用說與所選IDE的出色集成。 我希望您真的對Spring Boot感到興奮,并渴望了解更多有關Spring Boot的信息。 值得花費時間和精力。
完整的項目可以在Github上找到 。
翻譯自: https://www.javacodegeeks.com/2016/05/laziness-extreme-developing-jax-rs-services-spring-boot.html
jax-rs jax-ws
總結
以上是生活随笔為你收集整理的jax-rs jax-ws_极端懒惰:使用Spring Boot开发JAX-RS服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怀旧服盗贼天赋(魔兽世界怀旧服盗贼天赋)
- 下一篇: 湖南景点排行榜前十名(湖南旅游景点排名前