springmvc相关笔记

springMvc访问路径:
http://localhost:8080/项目工程名/RequestMapping的value定义名
如工程名project @RequestMapping(value = "abc/login")则访问路径为:
http://localhost:8080/project/abc/login

@Controller:也就是控制层,会被spring的auto-scan扫到纳入管理action层

@RequestMapping("/AAA") 项目名+/AAA
用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径


@responsebody表示该方法的返回结果直接写入HTTP response body中 一般在异步获取数据时使用,
在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,
而是直接写入HTTP response body中.

@PathVariable:获取动态参数
@RequestParam:获取动态参数

spring的注解@Resource(name="bean")相当于applicationContext.getBean("bean")方法applicationContext.getBean()方法:获取applicationContext.xml配置文件的Bean的id

(注解的作用:自动生成或者寻找bean,简略代码,方便实用。)
(@service:注解以后,不用在xml文件配置相应的bean了。)(@Autowired :注解以后,省略set方法.. @Autowired+@Qualifier("bean") == @Resource(name="bean"),另外Autowired的时候,同一类型的bean只能定义一个,相同类型的会报异常)


spring:不仅可以自动New(生成)对象,而且可以生成配置对象的属性值。(对象本身就由属性和方法组成)。
<bean>里面的<property>的ref属性,是指寻找对应的bean值。
<property> name属性:与set方法名保持一致.
ref属性:寻找对应的bean的id属性
@service:自动实例化被注释的类的bean,默认类名首字母小写的bean,如要改名则@service("自己改的bean名")

 

@Responsebody
该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
使用时机:
返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用.

@RequestBody
注解则是将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象
@RequestBody User user

====================注解大全====================

注解本身没有功能的,就和xml一样。注解和xml都是一种元数据,元数据即解释数据的数据,这就是所谓配置。

本文主要罗列Spring|SpringMVC相关注解的简介。

 

@RequestParam
@Controller 负责注册一个bean 到spring 上下文中
@RequestBody

Spring部分

1.声明bean的注解

@Component 组件,没有明确的角色

@Service 在业务逻辑层使用(service层)

@Repository 在数据访问层使用(dao层)

@Controller 在展现层使用,控制器的声明(C)

2.注入bean的注解

@Autowired:由Spring提供

@Inject:由JSR-330提供

@Resource:由JSR-250提供

都可以注解在set方法和属性上,推荐注解在属性上(一目了然,少写代码)。

3.java配置类相关注解

@Configuration 声明当前类为配置类,相当于xml形式的Spring配置(类上)

@Bean 注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式(方法上)

@Configuration 声明当前类为配置类,其中内部组合了@Component注解,表明这个类是一个bean(类上)

@ComponentScan 用于对Component进行扫描,相当于xml中的(类上)

@WishlyConfiguration 为@Configuration与@ComponentScan的组合注解,可以替代这两个注解

4.切面(AOP)相关注解

Spring支持AspectJ的注解式切面编程。

@Aspect 声明一个切面(类上) 
使用@After、@Before、@Around定义建言(advice),可直接将拦截规则(切点)作为参数。

@After 在方法执行之后执行(方法上) 
@Before 在方法执行之前执行(方法上) 
@Around 在方法执行之前与之后执行(方法上)

@PointCut 声明切点 
在java配置类中使用@EnableAspectJAutoProxy注解开启Spring对AspectJ代理的支持(类上)

5.@Bean的属性支持

@Scope 设置Spring容器如何新建Bean实例(方法上,得有@Bean) 
其设置类型包括:

Singleton (单例,一个Spring容器中只有一个bean实例,默认模式), 
Protetype (每次调用新建一个bean), 
Request (web项目中,给每个http request新建一个bean), 
Session (web项目中,给每个http session新建一个bean), 
GlobalSession(给每一个 global http session新建一个Bean实例)

@StepScope 在Spring Batch中还有涉及

@PostConstruct 由JSR-250提供,在构造函数执行完之后执行,等价于xml配置文件中bean的initMethod

@PreDestory 由JSR-250提供,在Bean销毁之前执行,等价于xml配置文件中bean的destroyMethod

6.@Value注解

@Value 为属性注入值(属性上) 
支持如下方式的注入: 
》注入普通字符

@Value("Michael Jackson")
String name;
  • 1
  • 2

》注入操作系统属性

@Value("#{systemProperties['os.name']}")
String osName;
  • 1
  • 2

》注入表达式结果

@Value("#{ T(java.lang.Math).random() * 100 }")
String randomNumber;
  • 1
  • 2

》注入其它bean属性

@Value("#{domeClass.name}")
String name;
  • 1
  • 2

》注入文件资源

@Value("classpath:com/hgs/hello/test.txt")
String Resource file;
  • 1
  • 2

》注入网站资源

@Value("http://www.cznovel.com")
Resource url;
  • 1
  • 2

》注入配置文件

@Value("${book.name}")
String bookName;
  • 1
  • 2

注入配置使用方法: 
① 编写配置文件(test.properties)

book.name=《三体》
  • 1

② @PropertySource 加载配置文件(类上)

@PropertySource("classpath:com/hgs/hello/test/test.propertie")
  • 1

③ 还需配置一个PropertySourcesPlaceholderConfigurer的bean。

7.环境切换

@Profile 通过设定Environment的ActiveProfiles来设定当前context需要使用的配置环境。(类或方法上)

@Conditional Spring4中可以使用此注解定义条件话的bean,通过实现Condition接口,并重写matches方法,从而决定该bean是否被实例化。(方法上)

8.异步相关

@EnableAsync 配置类中,通过此注解开启对异步任务的支持,叙事性AsyncConfigurer接口(类上)

@Async 在实际执行的bean方法使用该注解来申明其是一个异步任务(方法上或类上所有的方法都将异步,需要@EnableAsync开启异步任务)

9.定时任务相关

@EnableScheduling 在配置类上使用,开启计划任务的支持(类上)

@Scheduled 来申明这是一个任务,包括cron,fixDelay,fixRate等类型(方法上,需先开启计划任务的支持)

10.@Enable*注解说明

这些注解主要用来开启对xxx的支持。 
@EnableAspectJAutoProxy 开启对AspectJ自动代理的支持

@EnableAsync 开启异步方法的支持

@EnableScheduling 开启计划任务的支持

@EnableWebMvc 开启Web MVC的配置支持

@EnableConfigurationProperties 开启对@ConfigurationProperties注解配置Bean的支持

@EnableJpaRepositories 开启对SpringData JPA Repository的支持

@EnableTransactionManagement 开启注解式事务的支持

@EnableTransactionManagement 开启注解式事务的支持

@EnableCaching 开启注解式的缓存支持

11.测试相关注解

@RunWith 运行器,Spring中通常用于对JUnit的支持

@RunWith(SpringJUnit4ClassRunner.class)
  • 1

@ContextConfiguration 用来加载配置ApplicationContext,其中classes属性用来加载配置类

@ContextConfiguration(classes={TestConfig.class})
  • 1

SpringMVC部分

@EnableWebMvc 在配置类中开启Web MVC的配置支持,如一些ViewResolver或者MessageConverter等,若无此句,重写WebMvcConfigurerAdapter方法(用于对SpringMVC的配置)。

@Controller 声明该类为SpringMVC中的Controller

@RequestMapping 用于映射Web请求,包括访问路径和参数(类或方法上)

@ResponseBody 支持将返回值放在response内,而不是一个页面,通常用户返回json数据(返回值旁或方法上)

@RequestBody 允许request的参数在request体中,而不是在直接连接在地址后面。(放在参数前)

@PathVariable 用于接收路径参数,比如@RequestMapping(“/hello/{name}”)申明的路径,将注解放在参数中前,即可获取该值,通常作为Restful的接口实现方法。

@RestController 该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着,该Controller的所有方法都默认加上了@ResponseBody。

@ControllerAdvice 通过该注解,我们可以将对于控制器的全局配置放置在同一个位置,注解了@Controller的类的方法可使用@ExceptionHandler、@InitBinder、@ModelAttribute注解到方法上, 
这对所有注解了 @RequestMapping的控制器内的方法有效。

@ExceptionHandler 用于全局处理控制器里的异常

@InitBinder 用来设置WebDataBinder,WebDataBinder用来自动绑定前台请求参数到Model中。

@ModelAttribute 本来的作用是绑定键值对到Model里,在@ControllerAdvice中是让全局的@RequestMapping都能获得在此处设置的键值对。

 

 

springmvc返回json的3种方式:
1、第一种方式是spring2时代的产物,也就是每个json视图controller配置一个Jsoniew。
<bean id="defaultJsonView" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/>
同样要用jackson的jar包。

 

2、第二种使用JSON工具将对象序列化成json,常用工具Jackson,fastjson,gson。
利用HttpServletResponse,然后获取response.getOutputStream()或response.getWriter()直接输出。

3、第三种利用spring mvc3的注解@ResponseBody
然后使用spring mvc的默认配置就可以返回json了,启动注解 <mvc:annotation-driven/>,不过需要jackson的jar包。
加入 jackson jar 包后, RequestMappingHandlerAdapter会自动装配上MappingJackson2HttpMessageConverter,随后就可以对数据进行Json格式的包装。

ModelAndView其必须要附带视图页面,如果没有,则会报错误。
ModelAndView:简单理解它是将后台返回的数据传递给View层,同时包含一个要访问的View层的URL地址。
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("view");
modelAndView.addObject(model);
有一个view值和一个model值

posted @ 2016-05-11 15:32  生活需要努力和自律  阅读(119)  评论(0编辑  收藏  举报