zoukankan      html  css  js  c++  java
  • 关于Spring注解

    整理自网上:

    AnnotationPackage 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里。

    1 @Servicepublic class CompanyServiceImpl implements CompanyService {@Autowired
    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方法。

     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。

     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”)。

     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里。

     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 }
  • 相关阅读:
    【XShell】xshell 中“快速命令集”的使用
    【Ubuntu】Vritual Box 复制方式克隆
    【Linux】快速清空当前文件
    iOS---友盟推送遇到的坑
    iOS---stringByAddingPercentEscapesUsingEncoding:' is deprecated: first deprecated in iOS 9.0
    iOS---searchBar 搜索框 光标初始位置后移
    iOS---设置输入框的光标位置
    iOS tableviewcell 分割线 偏移和颜色
    iOS---去除url中的反斜扛
    iOS---UISearchBar限制输入字数
  • 原文地址:https://www.cnblogs.com/shanhm1991/p/4424922.html
Copyright © 2011-2022 走看看