Spring3.0注解

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



你可能感兴趣的:(Spring3.0注解)