關於Spring註解

整理自網上:
web

Annotation Package Detail/Import statement
@Service import org.springframework.stereotype.Service;
@Repository import org.springframework.stereotype.Repository;
@Component import org.springframework.stereotype.Component;
@Autowired import org.springframework.beans.factory.annotation.Autowired;
@Transactional import org.springframework.transaction.annotation.Transactional;
@Scope import org.springframework.context.annotation.Scope;
Spring MVC Annotations
@Controller import org.springframework.stereotype.Controller;
@RequestMapping import org.springframework.web.bind.annotation.RequestMapping;
@PathVariable import org.springframework.web.bind.annotation.PathVariable;
@RequestParam import org.springframework.web.bind.annotation.RequestParam;
@ModelAttribute import org.springframework.web.bind.annotation.ModelAttribute;
@SessionAttributes import org.springframework.web.bind.annotation.SessionAttributes;
Spring Security Annotations
@PreAuthorize import org.springframework.security.access.prepost.PreAuthorize;

@Service、@Repository、@Controller、@Component

@Service、@Repository、@Controller、@Component 這四個都是用來註解spring的bean,站在程序的角度它們都是等效。但從名字上,咱們很容易看出@Service是註解業務層的bean – Service,@Repository是註解持久層的bean – Dao,@Controller是註解MVC的Controller,@Component 用來註解普通的bean,當這個bean很差歸類的時候,就用@Component。spring

@Autowired

自動注入值,以下自動注入companyDAO。前提你要保證companyDAO存在spring的context裏。session

1 @Servicepublic  class CompanyServiceImpl  implements CompanyService {@Autowired
2 
3  private CompanyDAO companyDAO;
4 
5 …
6 
7 }

@Transactional

添加@Transactional到某個Service類上,說明該Service的全部方法都支持事務管理,若在某個方法上添加@Transactional,只聲明該方法支持事務。當支持事務的方法開始執行前都會先打開一個事務,碰到異常時就會回滾。Spring的默認配置是碰到RunTimeException時纔會進行事務回滾。app

@Scope

對應<bean scope=」prototype」/>裏的scope,它的值有singleton、prototype、request,session,global session和自定義模式。post

@RequestMapping

在類或方法上面使用此註解,設置URL訪問地址。它有兩個屬性,value指定訪問路徑,method指定指定請求方式,請求方式在RequestMethod這個類中,所有以常量形式定義,它默認使用GET請求。它也能夠只指定訪問路徑,以下所示spa

以下{context.path}/comany/addCompany 映射到addCompany方法。prototype

 1 @Controller
 2 @RequestMapping("/company")
 3  public  class CompanyController {
 4   @Autowired
 5    private CompanyService companyService;
 6   @RequestMapping("/addCompany")
 7       public ModelAndView addCompany(Company c){
 8    ….
 9   }
10 }

@PathVariable

獲取URL訪問路徑變量。在下面的例子裏,訪問路徑是/company/techferry,companyName獲取到的值就是techferry。code

 1 @Controller
 2 @RequestMapping("/company")
 3  public  class CompanyController {
 4   @Autowired
 5    private CompanyService companyService;
 6   @RequestMapping("{companyName}")
 7    public String getCompany(Map<String, Object> map, @PathVariable String companyName) {
 8     Company company = companyService.findByName(companyName);
 9     map.put("company", company);
10      return "company";
11   }
12   ...
13 }

@RequestParam

把URL上的參數綁定到Controller方法上的參數,pageNum的值就是來源於request.getParameter(「pageNum」)。orm

 1 @Controller@RequestMapping(「/company」) public  class CompanyController {@Autowired
 2  private CompanyService companyService;
 3 
 4 @RequestMapping(「/companyList」)
 5 
 6  public String listCompanies(Map<String, Object> map, @RequestParam  int pageNum) {
 7 
 8 map.put(「pageNum」, pageNum);
 9 
10 map.put(「companyList」, companyService.listCompanies(pageNum));
11 
12  return 「companyList」;
13 
14 }
15 
16 …
17 
18 }

@ModelAttribute

當參數不少的時候,直接定義在方法上,方法的代碼會很長,很是醜陋。一般的作法是定義一個formbean,而後在formbean前使用@ModelAttribute註解。Spring MVC會自動把URL的參數根據匹配的字段名一個一個的設置到formbean裏。blog

 1 @Controller
 2 @RequestMapping("/company")
 3  public  class CompanyController {
 4   @Autowired
 5    private CompanyService companyService;
 6   @RequestMapping("/add")
 7    public String saveNewCompany(@ModelAttribute Company company) {
 8     companyService.add(company);
 9      return "redirect:" + company.getName();
10   }
11 ...
12 }

@SessionAttributes

聲明一個變量,存放在session裏,多個請求之間能夠共享操做這個變量。

 

@PreAuthorize

權限驗證

以下例子,只有用戶的role包含「ROLE_ADMIN」才能夠刪除Contact。

 

1 @Transactional
2 @PreAuthorize("hasRole('ROLE_ADMIN')")
3  public  void removeContact(Integer id) {
4   contactDAO.removeContact(id);
5 }
相關文章
相關標籤/搜索