Java注解配置rest服务_Spring Boot 注解—常用注解
注:該部分內(nèi)容包含一些常用注解,如果沒有學(xué)習(xí)過java注解的同學(xué)可以先看一下上一小節(jié)的內(nèi)容Spring Boot 注解—基本知識 ,不看也沒關(guān)系,下面就開始本節(jié)內(nèi)容。
@Configuration注解
@Configuration注解意思是往容器中加入一個組件,該組件的主要作用是進行一些配置,相當(dāng)于之前配置的配置文件,下面我們用兩種方式對其進行演示:
準(zhǔn)備工作
pom.xml<?xml ?version="1.0"?encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0?http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.itbofeng
SpringDemo
1.0-SNAPSHOT
org.springframework
spring-context
5.0.7.RELEASE
junit
junit
4.12
test
配置文件方式
1、創(chuàng)建類路徑配置文件beans.xml
2、創(chuàng)建User類package?com.itbofeng.bean;/**
*?描述:User?Bean?用來測試
*/public?class?User?{????private?String?name;????private?Integer?age;????public?User()?{
}????public?User(String?name,?Integer?age)?{????????this.name?=?name;????????this.age?=?age;
}????public?String?getName()?{????????return?name;
}????public?void?setName(String?name)?{????????this.name?=?name;
}????public?Integer?getAge()?{????????return?age;
}????public?void?setAge(Integer?age)?{????????this.age?=?age;
}????@Override
public?String?toString()?{????????return?"User{"?+????????????????"name='"?+?name?+?'\''?+????????????????",?age="?+?age?+????????????????'}';
}
}
2、在配置文件中加入User bean<?xml ?version="1.0"?encoding="UTF-8"?>
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.xsd">
3、運行測試import?com.itbofeng.bean.User;import?org.junit.Test;import?org.springframework.context.ApplicationContext;import?org.springframework.context.support.ClassPathXmlApplicationContext;/**
*?描述:測試類
*/public?class?MainConfigTest?{
@Test????public?void?testXml(){????????//通過配置文件創(chuàng)建容器,需要傳入配置文件
ApplicationContext?applicationContext=new?ClassPathXmlApplicationContext("beans.xml");????????//獲取bean
User?user=?(User)?applicationContext.getBean("user");
System.out.println(user);
}
}
運行結(jié)果
注解方式
1、創(chuàng)建配置類MainConfig.java
2、注冊組件用@Bean注解
我們看一下代碼
package?com.itbofeng;import?com.itbofeng.bean.User;import?org.springframework.context.annotation.Bean;import?org.springframework.context.annotation.Configuration;/**
*?描述:該類對@Configuration注解進行講解
*/@Configurationpublic?class?MainConfig?{????/**
*?給容器中加入Bean,相當(dāng)于配置文件總的bena標(biāo)簽
*?id?默認(rèn)是方法名稱,也可以指定id
*?class?即返回值類型
*/
@Bean
public?User?user(){????????return?new?User("lisi",18);
}
}
以上配置類就等同于beans.xml中的內(nèi)容
3、運行測試@Test
public?void?testAnnoation(){????????//通過注解創(chuàng)建容器,需要傳入配置類
ApplicationContext?applicationContext=new?AnnotationConfigApplicationContext(MainConfig.class);????????//獲取bean
User?user=?(User)?applicationContext.getBean("user");
System.out.println(user);
}
運行結(jié)果
有了該例子相信大家對@Configuration有了一個基本的認(rèn)識,其就相當(dāng)于Spring配置文件的功能,不過是以注解的方式進行體現(xiàn),之前我們在配置文件中多采用包掃描的方式進行,那么這種方式在配置類中如何體現(xiàn)呢,下面我們引入第二個注解@ComponentScan包掃描注解
@ComponentScan注解
@ComponentScan注解就相當(dāng)于 xml配置文件中的context:component-scan標(biāo)簽,下面講解一下他的基本使用方法:
xml
java@Configuration@ComponentScan("com.itbofeng")public?class?MainConfig?{??//...}
這樣就可以對com.itbofeng包下的@Controller、@Service、@Component、@Respoitory、@Component標(biāo)注的類進行掃描,并由Spring容器進行管理,當(dāng)然spring并不是這么簡單的,它還可以進行排除,僅包含,我們看一下xml和java的語法
xml
java@Configuration@ComponentScan(value?=?"com.itbofeng",excludeFilters?=?{????????@ComponentScan.Filter(type?=?FilterType.ANNOTATION,classes?=?{Controller.class})
},
includeFilters?=?{????????@ComponentScan.Filter(type?=?FilterType.ANNOTATION,classes?=?{Service.class})
},useDefaultFilters?=?false)public?class?MainConfig?{??//...}
對于jdk1.8及以上@ComponentScan支持重復(fù)注解,另外還有@ComponentScans注解可以寫多個@ComponentScan注解,另外需要說明的兩種過濾方式排除和僅包含在一個包掃描中僅可出現(xiàn)一個。
關(guān)于@ComponentScan.Filter.type的取值大家可以參考:https://www.cnblogs.com/kevin-yuan/p/5068448.html
我們之前看到過@Bean注解,但并未對該注解進行詳細(xì)介紹
@Bean
前面我們初步體驗了一下@bean注解的作用也很簡單常用來標(biāo)注在方法上面,來表示往spring容器中添加一個組件如上面的利用@Bean往容器中添加一個User組件,在xml中我們不僅能夠往容器中添加一個bean而且還能設(shè)置lazy-init、scope的屬性,這些屬性在注解里面可以這樣使用@Lazy
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)????@Bean
public?User?user(){????????return?new?User("lisi",18);
}
等同于
@Component、@Configuration、@Controller、@Service、@Repository
其實在web開發(fā)中我們最常用的組件是@Component、@Configuration、@Controller、@Service、@Repository這幾個注解都有一個作用,往容器中添加一個組件他們都是@Component組合注解,他們標(biāo)注在類上面,表示往spring容器中添加一個組件,@Controller用來標(biāo)注在Controller上面,@Service用來標(biāo)注Service層上面,@Repository用來標(biāo)注在持久層上面,@Configuration用來標(biāo)注在配置類上,@Component用來標(biāo)注在其他組件上面。
@RequestMapping
在SpringMVC中還有個重要的注解@RequestMapping,它是用來做地址映射的,就是說,我們一個請求,該如何映射到我們的方法上面。它可用于類或方法上,用于類上,表示類中的所有響應(yīng)請求的方法都是以該地址作為父路徑。RequestMapping注解有六個屬性,其中常用的有value, method、非常用的有params,headers、consumes,produces,value:指定請求的實際地址,method: ?指定請求的method類型, GET、POST、PUT、DELETE等(符合Rest風(fēng)格);params: 指定request中必須包含某些參數(shù)值是,才讓該方法處理。headers: 指定request中必須包含某些指定的header值,才能讓該方法處理請求。consumes: 指定處理請求的提交內(nèi)容類型(Content-Type),例如application/json, text/html;produces: 指定返回的內(nèi)容類型,僅當(dāng)request請求頭中的(Accept)類型中包含該指定類型才返回,例子:package?com.itbofeng.controller;import?org.springframework.stereotype.Controller;import?org.springframework.web.bind.annotation.RequestMapping;import?org.springframework.web.bind.annotation.RequestMethod;
@Controllerpublic?class?UserController?{
@RequestMapping(value?=?"/hello",method?=?RequestMethod.GET)
public?String?hello(){????????return?"hello";
}
}
@ResponseBody
如果我們配置了視圖解析器ViewResolver,如果我們訪問 localhost:8080/hello還并不能夠返回hello,其會返回視圖解析器的前綴+hello+后綴的頁面,如果我們想要其向瀏覽器返回hello內(nèi)容,則需要@ResponseBody注解,該注解就是將返回值直接返回給瀏覽器,如果返回值是一個對象,則會返回該對象的json對象,其可以標(biāo)注在方法上表示該方法返回遵守該規(guī)則,也可以標(biāo)注在類上,表示該類下的所有方法都遵守該規(guī)則。用法如下:@ResponseBody
@RequestMapping(value?=?"/hello",method?=?RequestMethod.GET)????public?String?hello(){????????return?"hello";
}
@RestController
@RestController=@Controller+@ResponseBody
@PathVariable、@RequestParam
@PathVariable 路徑變量,主要是將路徑中的值映射為變量(Rest編程風(fēng)格推薦),
@RequestParam 請求參數(shù),主要是獲取請求中的參數(shù)
下面我們舉例說明:
地址① http://localhost:8080/hello?name=lisi
地址② http://localhost:8080/hello/lisi
我們通過兩種方式來獲取變量請求中的lisi,
@RequestParam 方式@ResponseBody
@RequestMapping(value?=?"/hello",method?=?RequestMethod.GET)????public?String?hello(@RequestParam("name")?String?name){????????return?"hello?"+name;
}
@PathVariable 方式@ResponseBody
@RequestMapping(value?=?"/hello/{name}",method?=?RequestMethod.GET)????public?String?hello(@PathVariable("name")?String?name){????????return?"hello?"+name;
}
注意:請求路徑的變化
今天注解部分就先將到這里,后面我們在學(xué)習(xí)過程中學(xué)到什么,再具體講解其用法,關(guān)于這些注解的在什么時候起作用的呢,需要我們學(xué)習(xí)了Spring的運行流程之后,才能進一步的進行深入了解,下一節(jié),我們學(xué)習(xí)一下往容器中添加Bean的幾種方式。
作者:愛編程的帥小伙
鏈接:https://www.jianshu.com/p/12b607e29255
總結(jié)
以上是生活随笔為你收集整理的Java注解配置rest服务_Spring Boot 注解—常用注解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java类用三木运算编译不生效_Java
- 下一篇: 罗技耳机怎么样(罗技gprox耳机玩吃鸡