Spring常用注解

基本组件:

@Component:标识了一个受Spring管理的组件,泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

@Respository:标识持久层,数据访问组件,即DAO组件。

@Service:标识业务层组件。

@Controller:标识表现层,控制层组件。

 

@RequestMapping

@RequestMapping是用来处理请求地址映射的注解,可用于类或方法上。用在类上,标识类中所有的响应方法都是以该地址作为父路径来访问,用在方法上表示方法的访问路径,两者结合起来的访问路径为完整的访问某个方法的路径。

@RequestMapping注解的属性:

value:指请求的实际地址,指定的地址可以是URI Template模式;

method:指定访问的方法;

consumes:指定处理请求的内容类型,比如application/json;text/html;

produces:指定返回的内容类型;

params:指定request中必须包含某些参数时,才让该方法处理请求;

headers:指定request中必须包含的header值,才能让该方法处理请求。

1 @Controller
2 @RequestMapping(value = "/risklist/RiskLibraryController")
3 public class RiskLibraryController {
4 
5     @Resource
6     private ErmCommonService ermCommonService;
7
1   @RequestMapping(value = "/riskLibraryIndex" method = RequestMethod.POST)
2     public String riskLibraryIndex(@RequestParam("riskOrgId") String riskOrgId, Model model) {
4         IRiskOrgBean riskOrg = ermCommonService.findById(RiskOrgBean.class, riskOrgId);
6   }

 

@Resource@Autowired

@Resource和@Autowired都是做bean的注入时使用,都可以写在字段上,或者是setter方法上。

@Autowired注解是按照类型(byType)装配依赖对象(由Spring提供),默认情况下,他要求依赖对象必须存在,如果允许为null,则设置他的required=false

1 @Autowired(required=false)

如果在此基础上想通过byName来装配,可以结合@Qualifier注解来一起使用。

1 @Autowired() @Qualifier("baseDao")     
2 private BaseDao baseDao;

@Resource默认是按byName自动注入。

@Resource有两个重要的属性,name和type。

@Resource如果写属性name,则按照byName来装配,如果属性为type,则按照byType来装配,不写按照默认的方式来装配(byName)

 1 @Service
 2 public class RiskCategoryServiceImpl implements RiskCategoryService {
 3 
 4     @Resource
 5     private RiskCategoryDao riskCategoryDao;
 6     @Resource
 7     private RiskCategoryHistoryDao riskCategoryHistoryDao;
 8     @Resource
 9     private ErmCommonService ermCommonService;
10     @Resource
11     private RiskCodeNumService riskCodeNumService;
12     @Resource
13     private RiskVersionDao riskVersionDao;
14     @Resource
15     private RiskLibraryService riskLibraryService;
16     @Resource
17     private RiskEventService riskEventService;
18     @Resource
19     private RiskCriteriaService riskCriteriaService;
20     @Resource
21     private ExtendFieldValueService extendFieldValueService;
22 }

 

@RequestParam

@RequestParam类似于request.getParameter("name")有三个参数:

defaultValue:表示设置默认值。

required:通过boolean设置是否是必须传入的参数。

value:表示接受传入参数的类型。

 1   @RequestMapping("testRequestParam")    
 2   public String filesUpload(@RequestParam String inputStr, HttpServletRequest request) {    
 3     System.out.println(inputStr);  
 4       
 5     int inputInt = Integer.valueOf(request.getParameter("inputInt"));  
 6     System.out.println(inputInt);  
 7       
 8     // ......省略  
 9     return "index";  
10    }
1   // required=false表示不传的话,会给参数赋值为null,required=true就是必须要有    
2   @RequestMapping("testRequestParam")      
3   public String filesUpload(@RequestParam(value="aa", required=true) String inputStr, HttpServletRequest request)

 

@ResponseBody

该注解将controller的方法返回对象,通过适当的HttpMessageConverter转换为指定格式后写入到Response对象的body数据区。通常用来返回json数据或xml数据,需要注意的呢,在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。

返回的数据不是html标签页面,而是其他某种数据格式时(json、xml)等使用。

1   @RequestMapping("/login")
2   @ResponseBody
3   public User login(User user){
4     return user;
5   }

user字段:userName pwd
那么在前台接受到的数据为:'{"userName":"xxx","pwd":"xxx"}'
效果等同于如下代码:

1   @RequestMapping("/login")
2   public void login(User user, HttpServletResponse response){
3     response.getWriter.write(JSONObject.fromObject(user).toString());
4   }

 

@RequestBody

该注解用于读取Request请求的body部分数据,使用系统默认配置HttpMessageCoverter进行解析,然后把相应的数据绑定到返回的对象上。然后再把HttpMessageCoverter返回的对象数据绑定到controller的方法参数上。

@RequestBody接受的是一个Json对象,其实,@RequestBody接受的是一个JSON对象的字符串,而不是json对象,然而在ajax请求往往传的都是json对象,用JSON.Stringify(data)的方式就能将对象转为字符串,同时使用ajax请求的时候也要指定dataType:“json”,contentType:“application/json”这样就可以轻易的将一个对象或者List传到Java端,使用@RequestBody即可绑定对象或者List。

 1 <script type="text/javascript">  
 2     $(document).ready(function(){  
 3         var saveDataAry=[];  
 4         var data1={"userName":"test","address":"gz"};  
 5         var data2={"userName":"ququ","address":"gr"};  
 6         saveDataAry.push(data1);  
 7         saveDataAry.push(data2);         
 8         $.ajax({ 
 9             type:"POST", 
10             url:"user/saveUser", 
11             dataType:"json",      
12             contentType:"application/json",               
13             data:JSON.stringify(saveData), 
14             success:function(data){ 
15                                        
16             } 
17          }); 
18     });  
19 </script>
1  @RequestMapping(value = "saveUser", method = {RequestMethod.POST }}) 
2     @ResponseBody  
3     public void saveUser(@RequestBody List<User> users) { 
4          userService.batchSave(users); 
5     }

 

@Respository

@Respository用于注解DAO层,在daoImpl上面注解。

 1 @Repository
 2 public class RiskLibraryDaoImpl extends ErmGenericDaoImpl<RiskLibrary> implements RiskLibraryDao {
 3  @Override
 4     @SuppressWarnings("unchecked")
 5     public IRiskLibraryBean findRiskLibraryByOrgAndVersion(String riskOrgId, String subVersionId,String riskLibraryType) {        
 6             if(StringUtils.isBlank(riskLibraryType)){//空的时候默认值
 7                 riskLibraryType =  "Normal";//Project
 8             }
 9             String jpql = "from RiskLibraryBean rlb where rlb.riskOrg.id = ? and rlb.subVersionId = ? and type = ? ";
10             List<IRiskLibraryBean> riskLibraryList = (List<IRiskLibraryBean>) this.findInstance(jpql, riskOrgId,
11                     subVersionId,riskLibraryType);
12             if (riskLibraryList != null && riskLibraryList.size() > 0) {
13                     return riskLibraryList.get(0);
14             }else {
15                 return null;
16             }
17             
18 
19     }
20

 

@ModelAttribute

被ModelAttribute注释的方法会在此controller每个方法执行前执行,因此对于一个controller映射多个URL的用法来说,要谨慎使用。

@ModelAttribute注解可以标注方法和参数,当标注参数时,表示从session或者impitmodel中获取这个属性对象,然后从request参数获取一些属性值来覆盖ModelAttribute标准的对象中的部分属性。

1 @RequestMapping(value="/model2/{username}")  
2 public String test2(@ModelAttribute("model") DataBinderTestModel model) 
 1 /** 
 2  * 设置这个注解之后可以直接在前端页面使用hb这个对象(List)集合 
 3  * @return 
 4  */  
 5 @ModelAttribute("hb")  
 6 public List<String> hobbiesList(){  
 7     List<String> hobbise = new LinkedList<String>();  
 8     hobbise.add("basketball");  
 9     hobbise.add("football");  
10     hobbise.add("tennis");  
11     return hobbise;  
12 } 

前台代码:

 1 <br>  
 2 初始化的数据 :    ${hb }  
 3 <br>  
 4   
 5     <c:forEach items="${hb}" var="hobby" varStatus="vs">  
 6         <c:choose>  
 7             <c:when test="${hobby == 'basketball'}">  
 8             篮球<input type="checkbox" name="hobbies" value="basketball">  
 9             </c:when>  
10             <c:when test="${hobby == 'football'}">  
11                 足球<input type="checkbox" name="hobbies" value="football">  
12             </c:when>  
13             <c:when test="${hobby == 'tennis'}">  
14                 网球<input type="checkbox" name="hobbies" value="tennis">  
15             </c:when>  
16         </c:choose>  
17     </c:forEach> 

 

posted @ 2018-01-30 16:35  Taeyang  阅读(201)  评论(0编辑  收藏  举报