Spring常用注解汇总.docx

上传人:b****9 文档编号:25817282 上传时间:2023-06-15 格式:DOCX 页数:12 大小:65.07KB
下载 相关 举报
Spring常用注解汇总.docx_第1页
第1页 / 共12页
Spring常用注解汇总.docx_第2页
第2页 / 共12页
Spring常用注解汇总.docx_第3页
第3页 / 共12页
Spring常用注解汇总.docx_第4页
第4页 / 共12页
Spring常用注解汇总.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

Spring常用注解汇总.docx

《Spring常用注解汇总.docx》由会员分享,可在线阅读,更多相关《Spring常用注解汇总.docx(12页珍藏版)》请在冰豆网上搜索。

Spring常用注解汇总.docx

Spring常用注解汇总

Spring常用注解汇总

本文汇总了Spring的常用注解,以方便大家查询和使用,具体如下:

使用注解之前要开启自动扫描功能

其中base-package为需要扫描的包(含子包)。

?

1

component-scanbase-package="cn.test"/>

@Configuration把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。

@Scope注解作用域

@Lazy(true)表示延迟初始化

@Service用于标注业务层组件、 

@Controller用于标注控制层组件(如struts中的action)

@Repository用于标注数据访问组件,即DAO组件。

@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

@Scope用于指定scope作用域的(用在类上)

@PostConstruct用于指定初始化方法(用在方法上)

@PreDestory用于指定销毁方法(用在方法上)

1.@RequestMapping用来定义访问的URL,你可以为整个类定义一个

@RequestMapping,或者为每个方法指定一个。

 

把@RequestMapping放在类级别上,这可令它与方法级别上的

@RequestMapping注解协同工作,取得缩小选择范围的效果。

 

例如:

 

@RequestMapping("/test") 

publicclassTestController{} 

则,该类下的所有访问路径都在/test之下。

 

 

2.将@RequestMapping用于整个类不是必须的,如果没有配置,所有的方法

的访问路径配置将是完全独立的,没有任何关联。

 

 

3.完整的参数项为:

@RequestMapping(value="",method=

{"",""},headers={},params={"",""}),各参数说明如下:

value:

String[]设置访问地址 

method:

RequestMethod[]设置访问方式,字符数组,查看RequestMethod

类,包括GET,HEAD,POST,PUT,DELETE,OPTIONS,TRACE,常用

RequestMethod.GET,RequestMethod.POST 

headers:

String[]headers一般结合method=RequestMethod.POST使用 

params:

String[]访问参数设置,字符数组例如:

userId=id 

 

4.value的配置还可以采用模版变量的形式,例如:

@RequestMapping

(value="/owners/{ownerId}",method=RequestMethod.GET),这点将在介

绍@PathVariable中详细说明。

 

 

5.@RequestMappingparams的补充说明,你可以通过设置参数条件来限制

访问地址,例如params="myParam=myValue"表达式,访问地址中参数只有

包含了该规定的值"myParam=myValue"才能匹配得上,类似"myParam"之类

的表达式也是支持的,表示当前请求的地址必须有该参数(参数的值可以是

任意),"!

myParam"之类的表达式表明当前请求的地址不能包含具体指定的

参数"myParam"。

 

 

6.有一点需要注意的,如果为类定义了访问地址为*.do,*.html之类的,则

在方法级的@RequestMapping,不能再定义value值,否则会报错,例如 

Java代码  

@RequestMapping("/bbs.do")  

publicclassBbsController{  

   @RequestMapping(params="method=getList")  

   publicStringgetList(){  

    return"list";  

   }  

@RequestMapping(value="/spList")  

publicStringgetSpecialList(){  

    return"splist";  

   }  

}  

 

如上例:

/bbs.do?

method=getList可以访问到方法getList();而访

问/bbs.do/spList则会报错. 

 

@PathVariable 

1.@PathVariable用于方法中的参数,表示方法参数绑定到地址URL的模板

变量。

 

例如:

 

Java代码  

@RequestMapping(value="/owners/{ownerId}", 

method=RequestMethod.GET)  

publicStringfindOwner(@PathVariableStringownerId,Model 

model){  

 Ownerowner=ownerService.findOwner(ownerId);    

 model.addAttribute("owner",owner);    

 return"displayOwner";  

}  

 

2.@PathVariable用于地址栏使用{xxx}模版变量时使用。

 

如果@RequestMapping没有定义类似"/{ownerId}",这种变量,则使用在

方法中@PathVariable会报错。

 

 

 

@ModelAttribute 

1.应用于方法参数,参数可以在页面直接获取,相当于

request.setAttribute(,) 

2.应用于方法,将任何一个拥有返回值的方法标注上@ModelAttribute,使

其返回值将会进入到模型对象的属性列表中. 

3.应用于方法参数时@ModelAttribute("xx"),须关联到Object的数据类型

,基本数据类型如:

int,String不起作用 

例如:

 

Java代码  

@ModelAttribute("items")//<——①向模型对象中添加一个名为items的

属性  

publicListpopulateItems(){  

       Listlists=newArrayList();  

       lists.add("item1");  

       lists.add("item2");  

       returnlists;  

}  

@RequestMapping(params="method=listAllBoard")  

publicStringlistAllBoard(@ModelAttribute("currUser")Useruser, 

ModelMapmodel){  

       bbtForumService.getAllBoard();  

       //<——②在此访问模型中的items属性  

       System.out.println("model.items:

"+((List

model.get("items")).size());  

       return"listBoard";  

}  

 

在①处,通过使用@ModelAttribute注解,populateItem()方法将在

任何请求处理方法执行前调用,SpringMVC会将该方法返回值以“items

”为名放入到隐含的模型对象属性列表中。

 

所以在②处,我们就可以通过ModelMap入参访问到items属性,当执

行listAllBoard()请求处理方法时,②处将在控制台打印

出“model.items:

2”的信息。

当然我们也可以在请求的视图中访问到模型

对象中的items属性。

 

 

 

@ResponseBody 

这个注解可以直接放在方法上,表示返回类型将会直接作为HTTP响应字节

流输出(不被放置在Model,也不被拦截为视图页面名称)。

可以用于ajax。

 

 

@RequestParam 

@RequestParam是一个可选参数,例如:

@RequestParam("id")注解,所以

它将和URL所带参数id进行绑定 

如果入参是基本数据类型(如int、long、float等),URL请求参数中

一定要有对应的参数,否则将抛出 

org.springframework.web.util.NestedServletException异常,提示无

法将null转换为基本数据类型. 

 

@RequestParam包含3个配置@RequestParam(required=,value="", 

defaultValue="") 

required:

参数是否必须,boolean类型,可选项,默认为true 

value:

传递的参数名称,String类型,可选项,如果有值,对应到设置方

法的参数 

defaultValue:

String类型,参数没有传递时为参数默认指定的值 

 

@SessionAttributessession管理 

Spring允许我们有选择地指定ModelMap中的哪些属性需要转存到 

session中,以便下一个请求属对应的ModelMap的属性列表中还能访问

到这些属性。

这一功能是通过类定义处标注@SessionAttributes注解来

实现的。

@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"}) 

 

@CookieValue获取cookie信息 

@RequestHeader获取请求的头部信息

使用注解来构造IoC容器

用注解来向Spring容器注册Bean。

需要在applicationContext.xml中注册

component-scanbase-package=”pagkage1[,pagkage2,…,pagkageN]”/>。

如:

在base-package指明一个包

1

component-scanbase-package="cn.gacl.java"/>

表明cn.gacl.java包及其子包中,如果某个类的头上带有特定的注解【@Component/@Repository/@Service/@Controller】,就会将这个对象作为Bean注册进Spring容器。

也可以在

component-scanbase-package=””/>中指定多个包,如:

1

component-scanbase-package="cn.gacl.dao.impl,cn.gacl.service.impl,cn.gacl.action"/>

多个包逗号隔开。

1、@Component

@Component

是所有受Spring 管理组件的通用形式,@Component注解可以放在类的头上,@Component不推荐使用。

2、@Controller

@Controller对应表现层的Bean,也就是Action,例如:

1@Controller

2@Scope("prototype")

3publicclassUserActionextendsBaseAction{

4……

5}

使用@Controller注解标识UserAction之后,就表示要把UserAction交给Spring容器管理,在Spring容器中会存在一个名字为"userAction"的action,这个名字是根据UserAction类名来取的。

注意:

如果@Controller不指定其value【@Controller】,则默认的bean名字为这个类的类名首字母小写,如果指定value【@Controller(value="UserAction")】或者【@Controller("UserAction")】,则使用value作为bean的名字。

这里的UserAction还使用了@Scope注解,@Scope("prototype")表示将Action的范围声明为原型,可以利用容器的scope="prototype"来保证每一个请求有一个单独的Action来处理,避免struts中Action的线程安全问题。

spring 默认scope 是单例模式(scope="singleton"),这样只会创建一个Action对象,每次访问都是同一Action对象,数据不安全,struts2 是要求每次次访问都对应不同的Action,scope="prototype" 可以保证当有请求的时候都创建一个Action对象

3、@Service

@Service对应的是业务层Bean,例如:

1@Service("userService")

2publicclassUserServiceImplimplementsUserService{

3………

4}

@Service("userService")注解是告诉Spring,当Spring要创建UserServiceImpl的的实例时,bean的名字必须叫做"userService",这样当Action需要使用UserServiceImpl的的实例时,就可以由Spring创建好的"userService",然后注入给Action:

在Action只需要声明一个名字叫“userService”的变量来接收由Spring注入的"userService"即可,具体代码如下:

1//注入userService

2@Resource(name="userService")

3privateUserServiceuserService;

注意:

在Action声明的“userService”变量的类型必须是“UserServiceImpl”或者是其父类“UserService”,否则由于类型不一致而无法注入,由于Action中的声明的“userService”变量使用了@Resource注解去标注,并且指明了其name="userService",这就等于告诉Spring,说我Action要实例化一个“userService”,你Spring快点帮我实例化好,然后给我,当Spring看到userService变量上的@Resource的注解时,根据其指明的name属性可以知道,Action中需要用到一个UserServiceImpl的实例,此时Spring就会把自己创建好的名字叫做"userService"的UserServiceImpl的实例注入给Action中的“userService”变量,帮助Action完成userService的实例化,这样在Action中就不用通过“UserServiceuserService=newUserServiceImpl();”这种最原始的方式去实例化userService了。

如果没有Spring,那么当Action需要使用UserServiceImpl时,必须通过“UserServiceuserService=newUserServiceImpl();”主动去创建实例对象,但使用了Spring之后,Action要使用UserServiceImpl时,就不用主动去创建UserServiceImpl的实例了,创建UserServiceImpl实例已经交给Spring来做了,Spring把创建好的UserServiceImpl实例给Action,Action拿到就可以直接用了。

Action由原来的主动创建UserServiceImpl实例后就可以马上使用,变成了被动等待由Spring创建好UserServiceImpl实例之后再注入给Action,Action才能够使用。

这说明Action对“UserServiceImpl”类的“控制权”已经被“反转”了,原来主动权在自己手上,自己要使用“UserServiceImpl”类的实例,自己主动去new一个出来马上就可以使用了,但现在自己不能主动去new“UserServiceImpl”类的实例,new“UserServiceImpl”类的实例的权力已经被Spring拿走了,只有Spring才能够new“UserServiceImpl”类的实例,而Action只能等Spring创建好“UserServiceImpl”类的实例后,再“恳求”Spring把创建好的“UserServiceImpl”类的实例给他,这样他才能够使用“UserServiceImpl”,这就是Spring核心思想“控制反转”,也叫“依赖注入”,“依赖注入”也很好理解,Action需要使用UserServiceImpl干活,那么就是对UserServiceImpl产生了依赖,Spring把Acion需要依赖的UserServiceImpl注入(也就是“给”)给Action,这就是所谓的“依赖注入”。

对Action而言,Action依赖什么东西,就请求Spring注入给他,对Spring而言,Action需要什么,Spring就主动注入给他。

4、@Repository

@Repository对应数据访问层Bean,例如:

1@Repository(value="userDao")

2publicclassUserDaoImplextendsBaseDaoImpl{

3………

4}

@Repository(value="userDao")注解是告诉Spring,让Spring创建一个名字叫“userDao”的UserDaoImpl实例。

当Service需要使用Spring创建的名字叫“userDao”的UserDaoImpl实例时,就可以使用@Resource(name="userDao")注解告诉Spring,Spring把创建好的userDao注入给Service即可。

1//注入userDao,从数据库中根据用户Id取出指定用户时需要用到

2@Resource(name="userDao")

3privateBaseDaouserDao;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 动物植物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1