整理自网上:
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。
@Autowired
自动注入值,如下自动注入companyDAO。前提你要保证companyDAO存在spring的context里。
2
3 private CompanyDAO companyDAO;
4
5 …
6
7 }
@Transactional
添加@Transactional到某个Service类上,说明该Service的所有方法都支持事务管理,若在某个方法上添加@Transactional,只声明该方法支持事务。当支持事务的方法开始执行前都会先打开一个事务,碰到异常时就会回滚。Spring的默认配置是碰到RunTimeException时才会进行事务回滚。
@Scope
对应<bean scope=”prototype”/>里的scope,它的值有singleton、prototype、request,session,global session和自定义模式。
@RequestMapping
在类或方法上面使用此注解,设置URL访问地址。它有两个属性,value指定访问路径,method指定指定请求方式,请求方式在RequestMethod这个类中,全部以常量形式定义,它默认使用GET请求。它也可以只指定访问路径,如下所示
如下{context.path}/comany/addCompany 映射到addCompany方法。
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。
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”)。
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里。
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。
2 @PreAuthorize("hasRole(‘ROLE_ADMIN‘)")
3 public void removeContact(Integer id) {
4 contactDAO.removeContact(id);
5 }