控制層組件,定義壹個springMVC的控制器類,往往需要和@RequestMapping配合使用。
2. @RestController
相當於@ResponseBody+@Controller合在壹起的作用。
3. @Service
服務層組件,用於標註業務層組件,表示定義壹個bean,自動根據bean的類名實例化壹個首寫字母為小寫的bean,也可以指定bean的名稱:@Service(“beanName”)。
4. @Repository
持久層組件,用於標註數據訪問組件,即DAO組件。
5. @Component
把普通pojo實例化到spring容器中,相當於配置文件中的 <bean id="" class=""/>。
6. @RequestMapping
用於配置控制層的訪問URL,可以用在控制器類上和控制器方法上,如果用在控制器類上,則訪問類中的方法是要加上類上的路徑,例如:
@Controller
@RequestMapping("/personal/linkInfo")
public class LinkInfoController {
@RequestMapping(value = "/addLinkInfo")
public String addLinkInfo(LinkInfoReq linkInfoReq) {
linkInfoService.addLinkInfo(linkInfoReq);
return "redirect:/personal/linkInfo/toLinkInfo";
}
}
上述代碼的訪問路徑就是XXX/personal/linkInfo/addLinkInfo。
@RequestMapping源代碼如下圖:
a) value:設置訪問的URL,數組,可以將多個請求映射到壹個方法上去。支持通配符配置
代碼示例:
@RequestMapping(value = {"/page","/page*"})
public void getInfo() {
}
上述代碼訪問路徑可以是:XXX/page,XXX/pageadc等滿足value條件的路徑。
b) method:設置訪問的方法,數組,可是設置多個訪問方法映射到同壹個方法上,默認為GET方法
代碼示例:
@RequestMapping(value = "/page", method = RequestMethod.POST)
public void getInfo() {
}
上述代碼 /page路徑就只能用POST方法才能請求。
method的可選值有GET,HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE。
c) params:指定request中必須包含某些參數值是,才讓該方法處理。數組。
@RequestMapping(value = "/page", params = {"type=1"})
public void getInfo() {
}
上述代碼/page路徑只有請求參數中包含type且值等於1時才能訪問該方法。
d) headers:指定request中必須包含某些指定的header值,才能讓該方法處理請求。數組。
示例代碼:
@RequestMapping(value = "/page", headers = {" content-type=text/plain " })
public void getInfo() {
}
上述代碼/page路徑只有headers中content-type=text/plain才能訪問該方法。
e) consumes:指定處理請求的提交內容類型(Content-Type),例如application/json, text/html。
f) produces:指定返回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回。
7. @ResponseBody
通常使用在controller方法上,作用是將方法的返回值通過合適的HttpMessageConverter轉換成特定格式寫入到response的body區域,然後返回給客戶端,如果沒有使用@RequestBody註解,方法返回值將會封裝到ModelAndView並解析返回視圖。
8. @RequestParam
接受的參數來自requestHeader,即請求頭,用來接收GET和POST請求參數並將參數賦值到被@RequestParam註解的變量上,同樣可以使用requet.getParameter(“name”)獲取,默認的參數接受方式,如果controller方法的參數未使用@RequestParam,則默認也是使用@RequestParam接受參數。用來處理Content-Type: 為 application/x-www-form-urlencoded編碼的內容。
@RequestParam有三個配置參數:
a) required:是否必須,默認true,必須。
b) defaultValue:默認值,請求的參數為空時使用默認值。
c) value:請求的參數名。
9. @RequestBody
接受的參數來自requestBody,即請求體,壹般用於處理非 Content-Type: application/x-www-form-urlencoded編碼格式的數據,比如:application/json、application/xml等類型的數據。
10. @Autowired
它可以對類成員變量,方法及構造函數進行標註,完成自動裝配工作,可以消除set,get方法。
11. @Resource
其作用和@Autowired相似。
不同點:
@Resource是Java自己的註解,@Resource有兩個屬性重要屬性,分是name和type;Spring將@Resource註解的name屬性解析為bean的名字,而type屬性則解析為bean的類型。所以如果使用name屬性,則使用byName的自動註入策略,而使用type屬性時則使用byType自動註入策略。如果既不指定name也不指定type屬性,這時將通過反射機制使用byName自動註入策略。
@Autowired是spring的註解,是spring2.5版本引入的,@Autowired只根據type進行註入,不會去匹配name。如果涉及到type無法辨別註入對象時,那需要依賴@Qualifier註解壹起來修飾。
@Resource裝配順序
a) 如果同時指定了name和type,則從Spring上下文中找到唯壹匹配的bean進行裝配,找不到則拋出異常
b) 如果指定了name,則從上下文中查找名稱(id)匹配的bean進行裝配,找不到則拋出異常
c) 如果指定了type,則從上下文中找到類型匹配的唯壹bean進行裝配,找不到或者找到多個,都會拋出異常
d) 如果既沒有指定name,又沒有指定type,則自動按照byName方式進行裝配;如果沒有匹配,則回退為壹個原始類型進行匹配,如果匹配則自動裝配;
推薦使用@Resource,不用謝set方法,並且這個註解屬於java自己的,減少了與spring的耦合度。
12. @Value
該註解有兩種使用方式:
a) @Value(“${}”)
這種使用方式註入的是配置文件裏的參數
這樣配置文件中的com.title就能配置到LinkInfoController的title屬性中
b) @Value(“#{}”)
該方式表示SpEl表達式通常用來獲取bean的屬性,或者調用bean的某個方法。
這樣就可以把User對象的name配置到LinkInfoController的name屬性中。
13. @Transactional
用於配置spring事務管理。屬性信息如下:
事物的傳播行為如下:
14. @SpringBootApplication
該註解其實是壹個組合註解,源碼如下圖:
比較重要的註解有三個:
a) @SpringBootConfiguration
從源代碼可以看到@SpringBootConfiguration繼承自@Configuration,這兩個註解的功能也是壹樣的。
b) @EnableAutoConfiguration
此註釋自動載入應用程序所需的所有Bean。
c) @ComponentScan
該註解會掃描指定路徑下的的類,並將其加入到IoC容器中。在springboot中,@ComponentScan默認掃描@SpringBootApplication所在類的同級目錄以及它的子目錄。
15. @Configuration
從Spring3.0,@Configuration用於定義配置類,可替換xml配置文件,被註解的類內部包含有壹個或多個被@Bean註解的方法,這些方法將會被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext類進行掃描,並用於構建bean定義,初始化Spring容器。
16. @Bean
該註解主要用在@Configuration註解的類裏,也可以用在@Component註解的類裏。添加的bean的id為方法名。相當於配置文件裏的<bean></bean>。
@Configuration
public class RedisConfig extends CachingConfigurerSupport{
@Bean
public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
RedisCacheManager redisCacheManager = RedisCacheManager.create(connectionFactory);
return redisCacheManager;
}
}
如上代碼就相當於在xml文件裏配置:
<beans>
<bean id=" cacheManager " class=" com.mypage.config. RedisCacheManager "/>
</beans>
17. @MapperScan
指定要變成實現類的接口所在的包,然後包下面的所有接口在編譯之後都會生成相應的實現類添加位置:是在Springboot啟動類上面添加:
18. @EnableCaching
該註解是spring framework中的註解驅動的緩存管理功能。自spring版本3.1起加入了該註解。如果妳使用了這個註解,那麽妳就不需要在XML文件中配置cache manager了。
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport{
/**
* 采用RedisCacheManager作為緩存管理器
* @param connectionFactory
* @return
*/
@Bean
public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
RedisCacheManager redisCacheManager = RedisCacheManager.create(connectionFactory);
return redisCacheManager;
}
}
19. @EnableRedisHttpSession
用來設置springboot使用redis存儲session,該註解會創建壹個名字叫springSessionRepositoryFilter的Spring Bean,其實就是壹個Filter,這個Filter負責用Spring Session來替換原先的默認HttpSession實現。
示例代碼如下:
@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 60*30)
public class HttpSessionConfig {
}
其中屬性maxInactiveIntervalInSeconds是設置session的有效時間,單位毫秒,默認1800ms。
但其實這樣還是不夠的,還要在配置文件中設置redis存儲session:
spring.session.store-type=redis
這樣就可以了。