Spring3.x注解
注册bean到spring上下文中
主要分为三类:@Controller(表示层bean)、@Service(业务层bean)、@Repository(数据持久层bean)
下面说明一下这三个注解的用法:
@Controller 表示为控制器(展示层bean)
用法:
@Controller
public class XXX
或者
@Controller("xXX")
说明:
@Controller 负责注册一个bean到spring上下文中,bean的ID默认为类名称开头字母小写,在这里为“xXX”
注:@Service、@Repository和@Controller用法一样。
注入bean
这里介绍两种注入注解@Autowired、@Resource
@Autowired 注入
用法:
@Autowired
private XXX xXX;
或者
@Autowired(required=false)
private XXX xXX = new XXX();
说明:
@Autowired 根据bean类型从spring 上下文中进行查找,注册类型必须唯一,否则会报异常。
与@Resource的区别在于,@Resource 允许通过bean名称或bean类型两种方式进行查找。
@Autowired(required=false) 表示,如果spring 上下文中没有找到该类型的bean 时, 才会使用 new XXX();
@Resource注入
用法:
@Resource
private XXX xXX;//根据bean名称,如果没有就根据bean类型
或者
@Resource(name="xXX")//根据bean名称
@Resource(type=XXX.class)//根据bean类型
说明:
在没有为 @Resource/@Autowired
如果将其标注在 BeanFactory 类型、ApplicationContext 类型、
ResourceLoader 类型、ApplicationEventPublisher 类型、MessageSource 类型上,
那么 Spring 会自动注入这些实现类的实例,不需要额外的操作。
@Controller层的映射和传参
映射方式@RequestMapping
@RequestMapping
用法:
@Controller
@RequestMapping("/addUser.do")
public class UserInfoController{
@RequestMapping(params="method=addUser")
public String addUser(UserInfo userInfo){}
}
或者
@Controller
@RequestMapping("/user")
public class UserInfoController{
@RequestMapping(value"addUser.do",method=POST)
//@RequestMapping("addUser")
//@RequestMapping(value = "/osu/product/detail.do", params = { "modify=false" }, method =POST)
public String addUser(UserInfo userInfo){}
}
说明:
@RequestMapping 可以声明在类或者方法上
http://localhost:8080/addUser.do?method=addUser&userId=10&userName=tom
userId和userName会被绑定到userInfo的userId和userName属性中。
获取请求参数@RequestParam @ModelAttribute
@RequestParam
用法:
@RequestMapping("addUser.do")
public String addUser(@RequestParam("id",required=false)int userId,String userName)
说明:
url:localhost:8080/addUser.do?id=10&userName=tom
将id的值绑定到userId中,
@RequestParam(required=false):表示参数不是必须的,默认为true
@ModelAttribute
作用域:request
用法:
@RequestMapping("/base/userManageCooper/init.do")
public String handleInit(@ModelAttribute("queryBean") ManagedUser sUser,Model model,){
或者:
@ModelAttribute("coopMap")// 将coopMap 返回到页 面
public Map<Long,CooperatorInfo> coopMapItems(){}
说明:
@ModelAttribute 声明在属性上,表示该属性的value 来源于model 里"queryBean" ,
并被保存到model里
@ModelAttribute 声明在方法上,表示该方法的返回值被保存到model 里
请求处理方法返回值的可选类型:
void
此时逻辑视图名由请求处理方法对应的 URL 确定,如以下的方法:
@RequestMapping("/addUser.do")
public void addUser() {}
对应的逻辑视图名为 “ addUser ”
String
此时逻辑视图名为返回的字符,如以下的方法:
@RequestMapping(method = RequestMethod.GET)
public String setupForm(@RequestParam("userId") int ownerId, ModelMap model) {
User user = userService.selectUserById(userId);
model.addAttribute(user);
return "addUser";
}
对应的逻辑视图名为 “ addUser ”
org.springframework.ui.ModelMap
和返回类型为 void 一样,逻辑视图名取决于对应请求的 URL ,如下面的例子:
@RequestMapping("/vets.do")
public ModelMap vetsHandler() {
return new ModelMap(this.clinic.getVets());
}
对应的逻辑视图名为 “ vets ” ,返回的 ModelMap 将被作为请求对应的模型对象,可以在 JSP 视图页面中访问到。
ModelAndView
当然还可以是传统的 ModelAndView 。
定义作用范围:
@Scope
用法:
@Scope("session")
@Repository()
public class UserSessionBean implements Serializable {}
说明:
在使用XML 定义Bean 时,可以通过bean 的scope 属性来定义一个Bean 的作用范围,
同样可以通过@Scope 注解来完成
@Scope中可以指定如下值:
singleton:定义bean的范围为每个spring容器一个实例(默认值)
prototype:定义bean可以被多次实例化(使用一次就创建一次)
request:定义bean的范围是http请求(springMVC中有效)
session:定义bean的范围是http会话(springMVC中有效)
global-session:定义bean的范围是全局http会话(portlet中有效)
@SessionAttributes
用法:
@SessionAttributes("currUser") // 将ModelMap 中属性名为currUser 的属性
@SessionAttributes({"attr1","attr2"})
@SessionAttributes(types = User.class)
@SessionAttributes(types = {User.class,Dept.class})
@SessionAttributes(types = {User.class,Dept.class},value={"attr1","attr2"})
说明:
Spring 允许我们有选择地指定 ModelMap 中的哪些属性需要转存到 session 中,
以便下一个请求属对应的 ModelMap 的属性列表中还能访问到这些属性。
这一功能是通过类定义处标注 @SessionAttributes 注解来实现的。
@SessionAttributes 只能声明在类上,而不能声明在方法上。
检查一个bean在初始化时其声明的 set方法是否被执行:
@Required
用法:
@required
public setName(String name){}
说明:
@ required 负责检查一个bean在初始化时其声明的 set方法是否被执行, 当某个被标注了 @Required 的 Setter 方法没有被调用,则 Spring 在解析的时候会抛出异常,以提醒开发者对相应属性进行设置。 @Required 注解只能标注在 Setter 方法之上。因为依赖注入的本质是检查 Setter 方法是否被调用了,而不是真的去检查属性是否赋值了以及赋了什么样的值。如果将该注解标注在非 setXxxx() 类型的方法则被忽略。
hibernate3.x注解
看这个写得很全
http://wenku.baidu.com/link?url=cepnNtFdEgfd0stBHmwhBm5BuSe8t2nE7_64owh21TOG21vupe8RzVUyQSQzk0aYgQJ_NL3aDVg2OCnHh8szdmEvQeL5pnpDusHpg4ltCmi