百度
360搜索
搜狗搜索

springmvc的常用注解有哪些,说出springmvc常用的5个注解详细介绍

本文目录一览: 说出springmvc常用的5个注解

1、Controller注解一个类表示控制器,SpringMVC会自动扫描注解了这个注解的类。2、RequestMapping请求路径映射,可以标注类,也可以是方法,可以指定请求类型,默认不置顶为全部接受。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。3、RequestParam放在参数前,表示只能接收参数a=b格式的数据,即Content-Type为application类型的内容。4、RequestBody放在参数前,表示参数从requestbody中获取,而不是从地址栏获取,所以这肯定是接收一个POST请求的非a=b格式的数据,即Content-Type不为application类型的内容。5、ResponseBody放在方法上或者返回类型前,表示此方法返回的数据放在responsebody里面,而不是跳转页面。一般用于ajax请求,返回json数据。

springmvc的注解都有哪些

一、@Controller 控制层 ,通常我们所说的action层
Controller控制器是通过服务接口定义的提供访问应用程序的一种行为,它解释用户的输入,将其转换成一个模型然后将试图呈献给用户。Spring MVC 使用 @Controller 定义控制器,它还允许自动检测定义在类路径下的组件并自动注册。
二、@RequestMapping
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
RequestMapping注解有六个属性
value, method;consumes,produces;params,headers
三、@Resource和@Autowired
@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。
四、@ModelAttribute和 @SessionAttributes
代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中,可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。@SessionAttributes即将值放到session作用域中,写在class上面。
五、@PathVariable
用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。
六、@requestParam
@requestParam主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter("name"),它有三个常用参数:defaultValue = "0", required = false, value = "isApp";defaultValue 表示设置默认值,required 铜过boolean设置是否是必须要传入的参数,value 值表示接受的传入的参数类型。
七、@ResponseBody
作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;
八、@Component
相当于通用的注解,当不知道一些类归到哪个层时使用,但是不建议。
九、@Repository
用于注解dao层,在daoImpl类上面注解。

springmvc常用的注解有哪些

1、@Controller
在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestParam 等一些注解用以定义URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。此外Controller 不会直接依赖于HttpServletRequest 和HttpServletResponse 等HttpServlet 对象,它们可以通过Controller 的方法参数灵活的获取到。
@Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping 注解。@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器。单单使用@Controller 标记在一个类上还不能真正意义上的说它就是SpringMVC 的一个控制器类,因为这个时候Spring 还不认识它。那么要如何做Spring 才能认识它呢?这个时候就需要我们把这个控制器类交给Spring 来管理。有两种方式:
(1)在SpringMVC 的配置文件中定义MyController 的bean 对象。
(2)在SpringMVC 的配置文件中告诉Spring 该到哪里去找标记为@Controller 的Controller 控制器。

< context:component-scan base-package = "com.host.app.web" />//路径写到controller的上一层(扫描包详解见下面浅析)
2、@RequestMapping
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
RequestMapping注解有六个属性,下面我们把她分成三类进行说明(下面有相应示例)。
1、 value, method;
value: 指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);
method: 指定请求的method类型, GET、POST、PUT、DELETE等;
2、consumes,produces
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
3、params,headers
params: 指定request中必须包含某些参数值是,才让该方法处理。
headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。
3、@Resource和@Autowired

springmvc注解有哪些

常用的注解:
@Controller 作用:定义一个控制器;
@RequestMapping 作用:是一个用来处理请求地址映射的注解,可用于类或方法上;
@Resource和@Autowired 作用:bean的注入;
@PathVariable 作用:将请求URL中的模板变量映射到功能处理方法的参数上;
@CookieValue 作用:用来获取Cookie中的值;
@RequestParam 作用:将请求参数区数据映射到功能处理方法的参数上;
@SessionAttributes 作用:将值放到session作用域中,写在class上面;
@ResponseBody 作用:Java对象转化为json对象,用于ajax处,返回的不是一个页面而是一个某种格式的数据
如有帮助请采纳(不懂请提问),可以看我主页,欢迎来交流学习;

springmvc 有哪些注解

spring mvc常用的注解:
个介绍。
@Controller
@Controller 负责注册一个bean 到spring 上下文中,bean 的ID 默认为
类名称开头字母小写,你也可以自己指定,如下
方法一:
@Controller
public class TestController {}
方法二:
@Controller("tmpController")
public class TestController {}
@RequestMapping
1.@RequestMapping用来定义访问的URL,你可以为整个类定义一个
@RequestMapping,或者为每个方法指定一个。
把@RequestMapping放在类级别上,这可令它与方法级别上的
@RequestMapping注解协同工作,取得缩小选择范围的效果。
例如:
@RequestMapping("/test")
public class TestController {}
则,该类下的所有访问路径都在/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.@RequestMapping params的补充说明,你可以通过设置参数条件来限制
访问地址,例如params="myParam=myValue"表达式,访问地址中参数只有
包含了该规定的值"myParam=myValue"才能匹配得上,类似"myParam"之类
的表达式也是支持的,表示当前请求的地址必须有该参数(参数的值可以是
任意),"!myParam"之类的表达式表明当前请求的地址不能包含具体指定的
参数"myParam"。
6.有一点需要注意的,如果为类定义了访问地址为*.do,*.html之类的,则
在方法级的@RequestMapping,不能再定义value值,否则会报错,例如
Java代码
@RequestMapping("/bbs.do")
public class BbsController {
@RequestMapping(params = "method=getList")
public String getList() {
return "list";
}
@RequestMapping(value= "/spList")
public String getSpecialList() {
return "splist";
}
}
如上例:/bbs.do?method=getList 可以访问到方法getList() ;而访
问/bbs.do/spList则会报错.
@PathVariable
1.@PathVariable用于方法中的参数,表示方法参数绑定到地址URL的模板
变量。
例如:
Java代码
@RequestMapping(value="/owners/{ownerId}",
method=RequestMethod.GET)
public String findOwner(@PathVariable String ownerId, Model
model) {
Owner owner = 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的
属性
public List

populateItems() {

List

lists = new ArrayList

();

lists.add("item1");

lists.add("item2");

return lists;

}

@RequestMapping(params = "method=listAllBoard")

public String listAllBoard(@ModelAttribute("currUser")User user,

ModelMap model) {

bbtForumService.getAllBoard();

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

System.out.println("model.items:" + ((List

阅读更多 >>>  controller常用注解,springmvc常用的注解有哪些

)

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

return "listBoard";

}

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

任何请求处理方法执行前调用,Spring MVC 会将该方法返回值以“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类型,参数没有传递时为参数默认指定的值

@SessionAttributes session管理

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 获取请求的头部信息

spring mvc 常用注解详解

前言
现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了。不过要想灵活运用Spring MVC来应对大多数的Web开发,就必须要掌握它的配置及原理。
Spring mvc 介绍
Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发

image.png
spring mvc 常用注解详解
@Controller
在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 等一些注解用以定义请求URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。其标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用@RequestMapping 注解。@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器。此外我们还需要将controller注册到spring里
@RequestMapping
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径,作用于方法上,表明该处理器的请求地址=父路径+方法上url+method,其拥有6个属性
1、 value, method;定义处理器访问的具体体质
value: 指定请求的实际地址,指定的地址可以是URI Template 模式;
method: 指定请求的method类型, GET、POST、PUT、DELETE等;
2、consumes,produces 定义处理器内容类型
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
3、params,headers 定义处理器处理类型
params: 指定request中必须包含某些参数值,才让该方法处理!
headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。
@PathVariable
用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。如:
@requestParam
@requestParam主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter("name"),它有三个常用参数:defaultValue = "0", required = false, value = "isApp";defaultValue 表示设置默认值,required 铜过boolean设置是否是必须要传入的参数,value 值表示接受的传入的参数类型。
@ResponseBody
作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json等)使用;
@RequestBody
该注解常用来处理Content-Type: 不是application/x-www-form-urlencoded编码的内容,例如application/json, application/xml等;它是通过使用HandlerAdapter 配置的HttpMessageConverters来解析post data body,然后绑定到相应的bean上的。
spring mvc 拦截器配置
preHandle:预处理回调方法,返回值:true表示继续流程,false表示流程中断(如登录检查失败),不会继续续调用其他的拦截器或处理器,此时我们需要通过response来产生响应;
postHandle:后处理回调方法,实现处理器的后处理(但在渲染视图之前),此时我们可以通过modelAndView(模型和视图对象)对模型数据进行处理或对视图进行处理,modelAndView也可能为null。
afterCompletion:整个请求处理完毕回调方法,即在视图渲染完毕时回调,如性能监控中我们可以在此记录结束时间并输出消耗时间,还可以进行一些资源清理,类似于try-catch-finally中的finally,但仅调用处理器执行链中preHandle返回true的拦截器的afterCompletion。
spring mvc 静态资源放问配置

image.png
spring mvc 文件上传
前端
后端
spring mvc 工作流程详解

image.png
1、 用户发送请求至前端控制器DispatcherServlet。
2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、 DispatcherServlet调用HandlerAdapter处理器适配器。
5、 HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6、 Controller执行完成返回ModelAndView。
7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9、 ViewReslover解析后返回具体View。
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、 DispatcherServlet响应用户。
如果你也对Java架构比如分布式、微服务、源码分析、性能优化、高并发高可用等技术感兴趣可以在手机上面私信我,回复「架构」二字即可免费领取一套价值3880的架构资料哦。

spring常用注解

一、组件注解
1、 @Component(“xxx”)
指定某个类是容器的bean, @Component(value="xx") 相当于 ,其中 value 可以不写。
用于标注类为spring容器bean的注解有四个, 主要用于区别不同的组件类,提高代码的可读性:
a、 @Component, 用于标注一个普通的bean
b、 @Controller 用于标注一个控制器类(控制层 controller)
c、 @Service 用于标注业务逻辑类(业务逻辑层 service)
d、 @Repository 用于标注DAO数据访问类 (数据访问层 dao)
对于上面四种注解的解析可能是相同的,尽量使用不同的注解提高代码可读性。
注解用于修饰类,当不写value属性值时,默认值为类名首字母小写。
2、 @Scope(“prototype”)
该注解和 @Component 这一类注解联合使用,用于标记该类的作用域,默认 singleton 。 也可以和 @Bean 一起使用,此时 @Scope 修饰一个方法。关于@Bean稍后有说明
3、 @Lazy(true)
指定bean是否延时初始化,相当于 ,默认false。@Lazy可以和@Component这一类注解联合使用修饰类,也可以和@Bean一起使用修饰方法
注 :此处初始化不是指不执行 init-method ,而是不创建bean实例和依赖注入。只有当该bean(被@Lazy修饰的类或方法)被其他bean引用(可以是自动注入的方式)或者执行getBean方法获取,才会真正的创建该bean实例,其实这也是BeanFactory的执行方式。
4、 @DepondsOn({“aa”,“bb”})
该注解也是配合 @Component 这类注解使用,用于强制初始化其他bean
上面的代码指定,初始化bean “userAction"之前需要先初始化“aa”和“bb”两个bean,但是使用了@Lazy(true)所以spring容器初始化时不会初始化"userAction” bean。
5、 @PostConstructor和@PreDestroy
@PostConstructor 和 @PreDestroy 这两个注解是j2ee规范下的注解。这两个注解用于修饰方法,spring用这两个注解管理容器中spring生命周期行为。
a、 @PostConstructor 从名字可以看出构造器之后调用,相当于 。就是在依赖注入之后执行
b、 @PreDestroy 容器销毁之前bean调用的方法,相当于
6、 @Resource(name=“xx”)
@Resource 可以修饰成员变量也可以修饰set方法。当修饰成员变量时可以不写set方法,此时spring会直接使用j2ee规范的Field注入。
@Resource有两个比较重要的属性,name和type
a、 如果指定了name和type,则从Spring容器中找到唯一匹配的bean进行装配,找不到则抛出异常;
b、 如果指定了name,则从spring容器查找名称(id)匹配的bean进行装配,找不到则抛出异常;
c、 如果指定了type,则从spring容器中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常;
d、 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配
如果没有写name属性值时
a、 修饰成员变量,此时name为成员变量名称
b、 修饰set方法,此时name 为set方法的去掉set后首字母小写得到的字符串
7、 @Autowired(required=false)
@Autowired可以修饰构造器,成员变量,set方法,普通方法。@Autowired默认使用byType方式自动装配。required标记该类型的bean是否是必须的,默认为必须存在(true)。
可以配合 @Qualifier(value="xx") ,实现按beanName注入:
a、 required=true(默认),为true时,从spring容器查找和指定类型匹配的bean,匹配不到或匹配多个则抛出异常
b、 使用 @Qualifier("xx") ,则会从spring容器匹配类型和 id 一致的bean,匹配不到则抛出异常
@Autowired会根据修饰的成员选取不同的类型:
a、 修饰成员变量。该类型为成员变量类型
b、 修饰方法,构造器。注入类型为参数的数据类型,当然可以有多个参数
8、demo
业务逻辑层:
数据访问层:
测试类:
输出结果:
可以看到虽然UserDao 使用@Lazy,但是还是在spring容器初始化的时候还是创建了UserDao实例。原因很简单,因为在UserService中需要注入UserDao,所以在此时创建的UserDao实例也属于延时初始化。
在上面我们还使用了两个接口InitializingBean 和DisposableBean,这两个接口用于管理 singleton 作用域的bean的生命周期,类似init-method和destroy-method。不同之处就是调用的循序不一致:
a、 初始化调用顺序 :@PostConstructor > InitializingBean > init-method 用于指定bean依赖注入后的行为
b、 销毁调用顺序 @PreDestroy > DisposableBean > destroy-method 用于定制bean销毁之前的行为
该注解是AspectJ中的注解,并不是spring提供的,所以还需要导入aspectjweaver.jar,aspectjrt.jar,除此之外还需要依赖aopalliance.jar
依赖包:
UserDao.java
配置文件 applicationContext.xml:
测试类:
1、 @Aspect
修饰Java类,指定该类为切面类。当spring容器检测到某个bean被@Aspect修饰时,spring容器不会对该bean做增强处理(bean后处理器增强,代理增强)
2、 @Before
修饰方法,before增强处理。用于对目标方法(切入点表达式表示方法)执行前做增强处理。可以用于权限检查,登陆检查。
常用属性:
value: 指定切入点表达式 或者引用一个切入点
对com.example.aop 包下所有的类的所有方法做 before增强处理:
结果:
如果同一条切入点表达式被使用多次,可以使用更友好的方式。定义一个切入点:
增强方法可以接受一个JoinPoint 类型的参数,用于获取被执行目标方法的一下属性。
结果:
3、 @AfterReturning
修饰方法,afterreturning增强处理。目标方法正常结束后做增强处理。
常用属性:
a、 pointcut/value:指定切入点表达式
b、 returning:指定一个参数名,用于接受目标方法正常结束时返回的值。参数名称需要在增强方法中定义同名的参数。
注意:
a、 如果使用了returning 。那么增强方法中的数据类型必须是返回结果的类型或者父类型,否则不会调用该增强处理。
b、 使用了returning 还可以用来 修改返回结果 。
以上面的例子来说,目标方法返回结果类型应该满足下面的条件
修改返回值:
结果:
可以看到 AfterReturning 修改了返回结果。
4、 @AfterThrowing
修饰方法,afterthrowing增强处理。当目标程序方法抛出 异常或者异常无法捕获时,做增强处理。
常用属性:
a、 pointcut/value :指定切入点表达式
b、 throwing:指定一个形参,在增强方法中定义同名形参,用于访问目标方法抛出的异常
参数类型必须是 Throwable 的子类,同样也会有上面@AfterReturning 参数类型匹配的问题。
5、 @After
修饰方法 ,after增强处理。无论方法是否正常结束,都会调用该增强处理(@After= @AfterReturning+@AfterThrowing)。但是该增强方式无法获取目标方法的返回结果,也获取目标方法抛出的异常。所以一般用于进行释放资源,功能类似于 finally。
常用属性:
a、 value :指定切入点表达式
结果:
从上面的结果来看 After 增加处理 ,因为不能接受返回结果作为参数,所以不能修改返回结果。
6、 @Around
修饰方法, around增强处理。该处理可以目标方法执行之前和执行之后织入增强处理(@Before+@AfterReturning)。
Around增强处理通常需要在线程安全的环境下使用,如果@Before和@AfterReturning可以处理就没必要使用@Around。
常用属性:
a、 value :指定切入点表达式
当定义一个Aound增前处理时,增强方法第一形参需要时ProceedingJoinPoint类型。ProceedingJoinPoint有一个Object proceed()方法,用于执行目标方法。当然也可以为目标方法传递数组参数,来修改目前方法的传入参数。
around小结:
a、 Around增强处理通常需要 在线程安全 的环境下使用
b、 调用 proceed()可以获取返回结果,所以可以修改目标方法的返回值
c、 proceed(Object[] var1) 可以修改入参,修改目标方法的入参
d、 可以进行目标方法执行之前和执行之后织入增强处理
around 和 afterReturning 都可以修改返回结果。不过两者的原理不同:
a、 around:可以任意修改,或者返回不相关的值。这个返回值完全可以自主控制
b、 afterReturning,通过方法参数 ,使用对象引用的方式来修改对象。修改对象引用地址那么修改时无效的
除此之外从输出结果来看,增强处理是有序的:
around 和 afterReturning小结:
a、 只有 around 和 afterReturning 可以获取并修改返回结果。需要注意两种方式修改的区别。
b、 around 需要线程安全
c、 虽然增强处理都需要 切入点表达式,并不是都支持 pointcut 属性,所以最好都是用value 属性指定。当注解只需要value属性时,value可以省略
7、 @Pointcut
修饰方法,定义一个切入点表达式用于被其他增强调用。使用该方式定义切入点方便管理,易复用。
切入点方法定义和测试方法定义类似,具有以下特点:
a、 无返回值 (void)
b、 无参数
c、 方法体为空
d、 方法名就是切入点名称
e、 方法名不能为 execution
切入点表达式
切入点表达式可以通过 && 、 || 、 ! 连接
1)、execution 表达式:
2)、within 表达式:
a、匹配指定类下的所有方法。
b、匹配执行包及其子包下所有类的所有方法。
所以within可以看做execution的简写,不需要指定返回类型、方法名、参数( 最小作用单位是类 )
3)、 @annotation:匹配使用指定注解修饰的目标方法;
匹配使用@CustomMethodAnnotation注解的目标方法。
4)、 @within: 用于匹配使用指定注解修饰的类下的所有方法
within 作用范围是类,@within的作用范围与其一致。不同的是@within 指定的不是类而是注解
匹配使用@ResponseBody 注解的类 下的所有方法。
AOP小结:
1)、 Around增强处理通常需要 在线程安全 的环境下使用
2)、 使用 around 和 afterReturning 可以获取并修改返回结果
3)、 增强处理指定 切入点表达式时,最好使用value 属性
4)、 切入点 名称(方法名)不能为 execution
5)、 AfterReturning 指定了 returning 属性接受目标方法返回结果,注意 参数类型需要和返回结果类型一致(满足 resutType instanceof argsType )
增强方式的顺序:
1、 @Bean(name=“xxx”)
修饰方法,该方法的返回值为spring容器中管理的bean。当然该注解和上面的@Component效果一样,主要用于做区分。
@Bean 通常使用在 @Configuration 修饰的配置类中,该注解功能相当于 元素
常用的属性:
a、 name:bean id 。name可以省略,省略时bean名称为方法名。也可以指定多个名称(逗号隔开)。
b、 autowire: 是否自动注入,默认Autowire.NO
c、 initMethod:bean的初始化方法。在依赖注入之后执行
d、 destroyMethod: spring容器关闭时bean调用的方法 当然 @Bean 还可以配合 @Scope 指定bean的作用域
2、 @ConfigurationProperties
用于从属性文件中获取值 application.properties 或者 application.yml 。当然了 如果在配置文件中引入其他配置文件,也可以获取到属性值。
包含的属性:
a、 value | prefix 两者互为别名。指定前缀,默认为""
b、 ignoreUnknownFields:默认为true。是否忽略未知字段,当实体中的字段在配置文件中不存在时,是忽略还是抛出异常
c、 ignoreInvalidFields: 默认false。 是否忽略不合法的字段,此处的不合法是指类型不合适,配置文件中存在改配置但是无法转化为指定的字段类型。
Mybatis属性配置
application.properties:
ConfigurationProperties 可以配置前缀,然后会根据实体的变量名拼接前缀,去配置文件中查询配置。
3、 @Configuration
修饰一个Java类,被修饰的类相当于一个xml配置文件。功能类似于 。在springboot中大量使用了该注解,该注解提供了一种使用Java类方式配置bean。
可以发现 @Configuration使用了@Component 注解修饰。
实例 :
配置Mybatis会话工厂
4、 @Import
功能和 类似,修饰Java类,用于向当前类导入其他配置类。 可以导入多个配置文件,通常用于导入不在包扫描范围内的配置文件。可以被扫描的配置类可以直接访问,没有必要使用@Import 导入。
比如 SpringBoot的启动类指定的包扫描路径为 com.example
数据库的配置文件在 com包下。
在MyBatisConfig 中引入 DataSourceConfig, 就会解析DataSourceConfig。将解析出的Bean交给容器管理
5、 @ImportResource
修饰Java类,用于向类引入xml配置文件。
用于导入包含bean定义的配置文件,功能和 类似。默认情况下可以处理后缀为 .groovy 和.xml 的配置文件
6、 @Value("${expression}")
修饰成员变量或者 方法、构造器的参数,用于属性值注入(在配置文件中配置的值)。
注意: @Value不能对 static 属性注入。
如果的确需要注入到静态变量,可以通过以下方式间接进行注入:
1)、设置一个私有静态 实例
2)、通过构造函数或者 @PostConstruct 注解为 静态实例 赋值,指向本身(this)
3)、对成员属性注入内容
4)、提供静态方法,使用静态实例获取成员属性
7、@PropertySource(value=“classpath:jdbc.properties”)
该注解用来加载属性文件。
常用属性:
a、 ignoreResourceNotFound: 当资源文件找不到的时候是否会忽略该配置,而不是抛出错误。一般用于可选项
b、 encoding : 资源文件使用什么编码方式
c、 value : 指定属性文件位置。可以配置多个属性文件,不可以使用通配符。
在 PropertySource 中可以指定多个路径,并且会将属性文件中的值加载到 Environment 中。
@ConfigurationProperties 和 @PropertySource
它们的使用有一些差异:
1)、 @PropertySource 使用该注解加载的是 相对独立的属性文件,可以同时加载多个文件 (xxx.properties),而且 不支持自动注入 , 不支持前缀注入
2)、 @ConfigurationProperties 用于加载配置文件(application.properties | application.yml)。该注解功能更强大:
a、 支持前缀注入 ( prefix )
b、 相同属性名的自动注入
c、 $("") 支持EL表达式注入
应用实例:
在以往的开发中通常会将数据库连接信息存放在单独的属性文件中(jdbc.properties)。而在spring boot 中我们会将数据库的信息存放在配置文件中,这会极大便利开发工作。
jdbc.properties:
可以通过 @Value 注解将配置文件的值注入到实体类中
也可以注入Environment ,通过Environment 获取值
1、 @ResponseBody
控制器方法返回值会使用 HttpMessageConverter 进行数据格式化,转化为JSON字符串。
同样的 ResponseBodyAdvice: 针对使用@ResponseBody的注解的类,方法做增强处理。
2、 @RestController
@RestController = @Controller + @ResponseBody , 所以通常直接使用@RestController 注解
3、 @RequestBody
从Reuqest请求体中获取内容,绑定到方法的指定参数上。 SpringMVC 使用HttpMessageConverter 接口将请求体中的数据转化为方法参数类型。
SpringMVC 给用户对参数的处理提供了很大支配权。 我们可以使用 接口RequestBodyAdvice 来实现对参数进行拦截处理。
注意
1)、 RequestBodyAdvice : 针对所有以@RequestBody的参数做处理
2)、 自定义的处理对象类上必须得加上@ControllerAdvice注解!
利用此功能我们可以做以下处理工作:
1)、参数做解密处理。
2)、修改接受的参数数据。
4、 @RequestParam
从Request请求中获取指定的参数。
可以设置的属性:
1)、 required : 默认为true 参数必须存在 。参数不存在时抛出异常(MissingServletRequestParameterException). 提示信息
2)、 defaultValue : 设置参数默认值。 当参数没有提供或者为空值时生效, 包含隐式定义 required=false
3)、 name | value , 互为别名的属性, 绑定请求中的参数名。 request.getParameter(name);
5、 @RequestMapping
用于设置 请求 和 Method 的映射关系。指明何种请求可以和方法匹配
可配置属性值:
1)、 path、value、 name, 互为别名,设置可以处理的url。
2)、 consumes,字符串数组。 指定可以处理的 媒资类型,仅当请求头中的 Content-Type 与其中一种媒体类型匹配时,才会映射请求。所以该配置会缩小可匹配的请求。 当url 匹配但是consumes不匹配时, 状态码415。 不设置的话,表示不限制媒资类型,参数的具体使用何种方式解析,SpringMVC会选择合适的处理器处理。
3)、 produces,字符串数组。 生成的媒资类型,该属性会影响实际的输出类型。和consumes一样,改配置会缩小匹配的范围。 只有当请求头中的 Accept 与 配置的任意一个媒资类型匹配时,才会映射请求。 当url 匹配与consumes不匹配时, 状态码406 。 比如:为了生成UTF-8编码的JSON响应,应使用 MediaType.APPLICATION_JSON_UTF8_VALUE。

阅读更多 >>>  struts与springmvc,struts2和springmvc有什么区别

spring mvc中的controller常用的注解有哪些

pring MVC 常用的注解有:
@Controller
@ResquestMapping 用来定义访问URL,可以为整个类定义,也可以单个的为每个方法定义一个
@PathVariable
@ModelAttribute 获取页面参数
@ResquestParam
@ResponseBody
@SessionAttributes session管理
@CookieValue 获取cookie信息
我们重点了解常用的注解@Controler和@ResquestMapping
@Controller:表明某个类是一个controller
@ResquestMapping:请求路径映射,常常标注在一个类的方法上,也可以标注在整个类上,表明某个具体的方法来接受处理某次请求,标注在类上,表明访问此类路径下的方法(方法要单独标注配置路径,也就是请求路径,同上)

springmvc框架常用注解有哪些

可以将你想传到页面的东西塞到model里,在页面直接取值就可以了,如model.addAtrribute("name",name);那样的话在JSP页面中${name}就能直接得到了

网站数据信息

"springmvc的常用注解有哪些,说出springmvc常用的5个注解"浏览人数已经达到20次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:springmvc的常用注解有哪些,说出springmvc常用的5个注解的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!