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";
}
前端代码:
指定参数名称为“aa”// required=false表示不传的话,会给参数赋值为null,required=true就是必须要有
@RequestMapping("testRequestParam")
public String filesUpload(@RequestParam(value="aa", required=true) String inputStr, HttpServletRequest request)
@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 }
篮球
足球
网球