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

Intorduction of Annotation ,about examples in Hello1.java的更多相关文章

  1. java EE中的hello1.java及Annotation(注解)

    一.Annotation(注解) 注解(Annotation)很重要,未来的开发模式都需要注解,注解是java.lang.annotation包,Annotation是从java5引入的,它提供一些不 ...

  2. ANNOTATION and analyse hello1.java

    一.What is annotation? annotation的中文意思就是注解,注释的意思.注解也属于一种类型.它是在 Java SE 5.0 版本中开始引入的概念.它的形式跟接口很类似,不过前面 ...

  3. 解释 Hello1.java

    hello1.java 代码 package javaeetutorial.hello1; import javax.enterprise.context.RequestScoped; import ...

  4. hello1.java内容简单介绍

    双击该Hello.java文件以查看它. 在Hello类,称为管理bean类,提供了getter和setter方法name中的Facelets页面表达式中使用属性.默认情况下,表达式语言引用类名,第一 ...

  5. Spring框架 全注解annotation不使用配置文件(SpringConfiguration.java类代替) 补充 xml配置文件没有提示解决

    全注解不使用配置文件 首先还是倒包 在原有的jar包: 需Spring压缩包中的四个核心JAR包 beans .context.core 和expression 下载地址: https://pan.b ...

  6. Java ee Turorial Hello1 Hello1.java解析

    package javaeetutorial.hello1; import javax.enterprise.context.RequestScoped;import javax.inject.Nam ...

  7. Annotation(注解)介绍

    Annotation(注解)是什么: Annotation(注解) 官方的定义:    An annotation is a form of metadata, that can be added t ...

  8. Java Annotation 机制源码分析与使用

    1 Annotation 1.1 Annotation 概念及作用      1.  概念 An annotation is a form of metadata, that can be added ...

  9. Java Annotation Processors

    Table Of Contents 1. Introduction 2. When to Use Annotation Processors 3. Annotation Processing Unde ...

随机推荐

  1. linux找不到动态链接库 .so文件的解决方法

    linux找不到动态链接库 .so文件的解决方法 如果使用自己手动生成的动态链接库.so文件,但是这个.so文件,没有加入库文件搜索路劲中,程序运行时可能会出现找不到动态链接库的情形. 可以通过ldd ...

  2. 解决nginx转发websocket报400错误

    解决nginx转发websocket报400错误 说明 由于个人服务器上面有多个项目,配置了二级域名,需要对二级域名进行转发,在转发工作这快采取了大名鼎鼎的nginx.在这之前所有的项目运行转发都没问 ...

  3. 关于HTML元素点击的时候,背景颜色秒进,缓缓退出的方法

    废话不多说,上代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  4. 关于Javascript闭包(Closure)

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域 ...

  5. [蓝桥杯]ALGO-95.算法训练_2的次幂表示

    题目描述: 问题描述 任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001. 将这种2进制表示写成2的次幂的和的形式,令次幂高的排在前面,可得到如下表达式:=^+^+^ 现在约 ...

  6. C++进阶--代码复用 继承vs组合

    //############################################################################ /* * 代码复用: 继承 vs 组合 * ...

  7. pandas的离散化,面元划分

    pd.cut pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=, include_lowest=False) ...

  8. problem:为什么会有options请求

    为了安全考虑,浏览器对资源访问有同源限制的问题,也就是web应用程序只能访问和它同一协议同一域名同一端口的web应用程序上的资源. 通过跨域资源共享机制可以让资源在浏览器中访问与该资源本身不同域的资源 ...

  9. Unable to load native-hadoop library for your platform... using builtin-java classes where applicable(四十四)

    问题描述: Unable to load native-hadoop library for your platform... using builtin-java classes where app ...

  10. P1226快速幂取余

    链接:https://www.luogu.org/problemnew/show/P1226 题解:(重要结论:(a*b*c*d*...*n)%k=[(a%k)*(b%k)*...(n%k)]%k) ...