Spring常用注解

Spring常用的注解说明:

基本组件:

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

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

@Service: 标识业务层组件

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

(1)@RequestMapping 

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

@RequestMapping注解的属性:

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

method:指定访问的方法

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

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

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

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

示例:

@Controller
@RequestMapping(value = "/risklist/RiskLibraryController")
public class RiskLibraryController {

	@Resource
	private ErmCommonService ermCommonService;
}

@RequestMapping(value = "/riskLibraryIndex" method = RequestMethod.POST)
	public String riskLibraryIndex(@RequestParam("riskOrgId") String riskOrgId,
			Model model) {
		IRiskOrgBean riskOrg = ermCommonService.findById(RiskOrgBean.class,
				riskOrgId);
}
(2)@Resource和@Autowired

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

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

@Autowired(required=false)

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

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

@Resource默认按照byName自动注入

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

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

@Service
public class RiskCategoryServiceImpl implements RiskCategoryService {

    @Resource
    private RiskCategoryDao riskCategoryDao;
    @Resource
    private RiskCategoryHistoryDao riskCategoryHistoryDao;
    @Resource
    private ErmCommonService ermCommonService;
    @Resource
    private RiskCodeNumService riskCodeNumService;
    @Resource
    private RiskVersionDao riskVersionDao;
    @Resource
    private RiskLibraryService riskLibraryService;
    @Resource
    private RiskEventService riskEventService;
    @Resource
    private RiskCriteriaService riskCriteriaService;
    @Resource
    private ExtendFieldValueService extendFieldValueService;
}
点击打开链接

(3) @RequestParam

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

defaultValue:表示设置默认值

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

Value:值表示接受的传入的参数类型

JAVA代码:

@RequestMapping("testRequestParam")    
   public String filesUpload(@RequestParam String inputStr, HttpServletRequest request) {    
    System.out.println(inputStr);  
      
    int inputInt = Integer.valueOf(request.getParameter("inputInt"));  
    System.out.println(inputInt);  
      
    // ......省略  
    return "index";  
   }

前端代码:

<form action="/gadget/testRequestParam" method="post">    
     参数inputStr:<input type="text" name="inputStr">    
     参数intputInt:<input type="text" name="inputInt">    
</form> 
指定参数名称为“aa”
// required=false表示不传的话,会给参数赋值为null,required=true就是必须要有  
@RequestMapping("testRequestParam")    
    public String filesUpload(@RequestParam(value="aa", required=true) String inputStr, HttpServletRequest request)

(4)@ResponseBody

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

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

JAVA代码:

@RequestMapping("/login")
  @ResponseBody
  public User login(User user){
    return user;
  }
user字段:userName pwd

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

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

(5)RequestBody

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

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

javaScript代码:

<script type="text/javascript">  
    $(document).ready(function(){  
        var saveDataAry=[];  
        var data1={"userName":"test","address":"gz"};  
        var data2={"userName":"ququ","address":"gr"};  
        saveDataAry.push(data1);  
        saveDataAry.push(data2);         
        $.ajax({ 
            type:"POST", 
            url:"user/saveUser", 
            dataType:"json",      
            contentType:"application/json",               
            data:JSON.stringify(saveData), 
            success:function(data){ 
                                       
            } 
         }); 
    });  
</script>
java代码:
 @RequestMapping(value = "saveUser", method = {RequestMethod.POST }}) 
    @ResponseBody  
    public void saveUser(@RequestBody List<User> users) { 
         userService.batchSave(users); 
    }

点击打开链接

(6) @Respository 

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

@Repository
public class RiskLibraryDaoImpl extends ErmGenericDaoImpl<RiskLibrary> implements RiskLibraryDao {
 @Override
    @SuppressWarnings("unchecked")
    public IRiskLibraryBean findRiskLibraryByOrgAndVersion(String riskOrgId, String subVersionId,String riskLibraryType) {    	
            if(StringUtils.isBlank(riskLibraryType)){//空的时候默认值
            	riskLibraryType =  "Normal";//Project
            }
			String jpql = "from RiskLibraryBean rlb where rlb.riskOrg.id = ? and rlb.subVersionId = ? and type = ? ";
	        List<IRiskLibraryBean> riskLibraryList = (List<IRiskLibraryBean>) this.findInstance(jpql, riskOrgId,
	                subVersionId,riskLibraryType);
	        if (riskLibraryList != null && riskLibraryList.size() > 0) {
					return riskLibraryList.get(0);
	        }else {
	        	return null;
			}
	        

    }
}
(7) @ModelAttribute

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

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

java代码:

@RequestMapping(value="/model2/{username}")  
public String test2(@ModelAttribute("model") DataBinderTestModel model) 
/** 
 * 设置这个注解之后可以直接在前端页面使用hb这个对象(List)集合 
 * @return 
 */  
@ModelAttribute("hb")  
public List<String> hobbiesList(){  
    List<String> hobbise = new LinkedList<String>();  
    hobbise.add("basketball");  
    hobbise.add("football");  
    hobbise.add("tennis");  
    return hobbise;  
} 
jsp展示:

<br>  
初始化的数据 :    ${hb }  
<br>  
  
    <c:forEach items="${hb}" var="hobby" varStatus="vs">  
        <c:choose>  
            <c:when test="${hobby == 'basketball'}">  
            篮球<input type="checkbox" name="hobbies" value="basketball">  
            </c:when>  
            <c:when test="${hobby == 'football'}">  
                足球<input type="checkbox" name="hobbies" value="football">  
            </c:when>  
            <c:when test="${hobby == 'tennis'}">  
                网球<input type="checkbox" name="hobbies" value="tennis">  
            </c:when>  
        </c:choose>  
    </c:forEach> 

















  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值