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";  
   }

前端代码:

参数inputStr: 参数intputInt:
指定参数名称为“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代码:

java代码:
 @RequestMapping(value = "saveUser", method = {RequestMethod.POST }}) 
    @ResponseBody  
    public void saveUser(@RequestBody List users) { 
         userService.batchSave(users); 
    }

点击打开链接

(6) @Respository 

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

@Repository
public class RiskLibraryDaoImpl extends ErmGenericDaoImpl 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 riskLibraryList = (List) 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 hobbiesList(){  
    List hobbise = new LinkedList();  
    hobbise.add("basketball");  
    hobbise.add("football");  
    hobbise.add("tennis");  
    return hobbise;  
} 
jsp展示:


初始化的数据 : ${hb }
篮球 足球 网球

















你可能感兴趣的:(学习笔记)