• Intorduction of Annotation ,about examples in Hello1.java


    java ee 里的常用注解

    .@Controller,@Service,@Repository,@Component,@RestController
    这几个注解用于实例化class对象。分别对应于控制层,业务实现层,数据接口层,普通任意层及rest风格的控制层。并无任何实际意义。这些实例化的的类称为注册Bean

    对于@Controller与@RestController
    1
    @RestController注解相当于@ResponseBody + @Controller合在一起的作用
    使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容(eg:本来应该到success.jsp页面的,则其显示中文success)
    如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行
    如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解
    2.@RequestMapping,@PostMapping,@GetMapping
    @RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。@PostMapping,@GetMapping为@RequestMapping的进一步封装,一般用于方法路径上。表示具体的请求方式。

    对于@RequestMapping的属性值,有以下几点说明。

    value:指定请求的实际地址,可以包含及其复杂的正则表达式;eg:@RequestMapping("/spring-web/{symbolicName:[a-z-]+}-{version:d.d.d}.{extension:.[a-z]}")
    method:指定请求的method类型, GET、POST、PUT、DELETE等;
    consumes:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;eg:@RequestMapping(value = "/pets", method = RequestMethod.POST, consumes="application/json")
    produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;eg:@RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET, produces="application/json")
    params:指定request中必须包含某些参数值是,才让该方法处理。eg:@RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET, params="myParam=myValue")
    headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。eg:@RequestMapping(value = "/pets", method = RequestMethod.GET, headers="Referer=http://www.ifeng.com/")
    3.@Autowired,@Value,@Resource

    @Autowired按照需求类型自动注入注解
    @Resource默认按照名称方式进行bean匹配(java注解)
    @Value读取properties文件中的配置值。eg:@Value("${key}")
    4.@Configuration,@Bean

    从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。相当于配置文件的。也就是具有该注解的类会在spring初始化的时候进行扫描
    @Bean注解标记的对象或者实例称为使用Bean。被该注解标记后,即该实例将由spring进行管理。一般与Configuration一起使用

    5.@RequestBody,@RequestParam,@PathVariable,@PathParam,@RequestHeader, @CookieValue,@SessionAttributes, @ModelAttribute
    请求参数获取常用注解,其中@PathParam是jboss包下面的一个实现。

    6.@SpringBootApplication

    @SpringBootApplication 被 @Configuration、@EnableAutoConfiguration、@ComponentScan 注解所修饰,换言之 Springboot 提供了统一的注解来替代以上三个注解,简化程序的配置。下面解释一下各注解的功能。

    @EnableAutoConfiguration:启用 Spring 应用程序上下文的自动配置,试图猜测和配置您可能需要的bean。自动配置类通常采用基于你的 classpath 和已经定义的 beans 对象进行应用。
    @ComponentScan 注解会自动扫描指定包下的全部标有 @Component注解 的类,并注册成bean,包括 @Component 下的子注解@Service、@Repository、@Controller。
    @Configuration 是一个类级注释,指示对象是一个bean定义的源
    7.@RefreshScope
    springcloud注解,刷新配置。

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    1
    8.@Scheduled(cron = " * * * * ?")*
    spring单模块定时任务。对于多模块定时任务,请使用quartz。

    9.@MapperScan
    mapper注解扫描类,由spring-mybatis提供支持。

    10.@RestControllerAdvice,@ControllerAdvice,@ExceptionHandler
    spring前置处理器及异常处理handler

    2.Hello1里面的注解

    下面是hello1的源代码

    /**
    * Copyright (c) 2014 Oracle and/or its affiliates. All rights reserved.
    *
    * You may not modify, use, reproduce, or distribute this software except in
    * compliance with the terms of the License at:
    * https://github.com/javaee/tutorial-examples/LICENSE.txt
    */
    package javaeetutorial.hello1;


    import javax.enterprise.context.RequestScoped;
    import javax.inject.Named;

    @Named
    @RequestScoped
    public class Hello {

    private String name;

    public Hello() {
    }

    public String getName() {
    return name;
    }

    public void setName(String user_name) {
    this.name = user_name;
    }
    }

    里面的@name 是命名空间的声明

    @RequestScoped

    spring中scope是一个非常关键的概念,简单说就是对象在spring容器(IOC容器)中的生命周期,也可以理解为对象在spring容器中的创建方式。

    3)request

    再次说明request,session和global session类型只实用于web程序,通常是和XmlWebApplicationContext共同使用。

    <bean id ="requestPrecessor" class="...RequestPrecessor"   scope="request" />

    Spring容器,即XmlWebApplicationContext 会为每个HTTP请求创建一个全新的RequestPrecessor对象,当请求结束后,该对象的生命周期即告结束,如同java web中request的生命周期。当同时有10个HTTP请求进来的时候,容器会分别针对这10个请求创建10个全新的RequestPrecessor实例,且他们相互之间互不干扰,简单来讲,request可以看做prototype的一种特例,除了场景更加具体之外,语意上差不多。

      request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效,

    总结一下就是 在单一实例下 每一次请求都会产生一个新bean



  • 相关阅读:
    jqurey技术总结
    ie浏览器兼容问题小结
    FIS的合并压缩技术
    对js中数组的一些总结
    浅谈如何面向对象进行封装
    13th week blog
    12th week blog
    11th week blog
    10th week blog
    9th Week blog
  • 原文地址:https://www.cnblogs.com/LeshengW/p/10561270.html
Copyright © 2020-2023  润新知