spring 、spring boot 常用注解

@Profile
    1.用户配置文件注解.
    2.使用范围: @Configration 和 @Component 注解的类及其方法,
             其中包括继承了 @Component 的注解: @Service、 @Controller、 @Repository 等… 
    3.属性:value字串必传,
        可接受一个或者多个参数.
    4.作用:该注解相当于配置文件 application.properties 中的 spring.profiles.active ,去匹配对应环境的配置文件 application-{profile}.properties。
    5.eg:    @Profile({"dev","test"})
        @Profile(value="prod")

@ComponentScan
    1.组件扫描注解,经常与 @Configuration 注解配合使用。
    2.使用范围:类.
    3.属性:选
        basePackages --  指定包路径进行扫描;
        basePackageClasses -- 指定接口或者类所在的包进行组件扫描;
        excludeFilters -- 指定不适合组件扫描的类型;                    
            FilterType.ANNOTATION:按照注解过滤
            FilterType.ASSIGNABLE_TYPE:按照给定的类型
            FilterType.ASPECTJ:使用ASPECTJ表达式
            FilterType.REGEX:正则
            FilterType.CUSTOM:自定义规则
        includeFilters -- 指定哪些类型有资格用于组件扫描;
        lazyInit -- 指定是否应注册扫描的beans为lazy初始化;
        nameGenerator -- 用于在Spring容器中的检测到的组件命名;
        resourcePattern -- 控制可用于组件检测的类文件;
        scopedProxy -- 指出代理是否应该对检测元件产生,在使用过程中会在代理风格时尚的范围是必要的;
        scopeResolver -- 用于解决检测到的组件的范围;
        useDefaultFilters -- 指示是否自动检测类的注释 @Component、 @Repository, @Service, or @Controller应启用;
        value -- basePackages()别名。
    4.作用:定义扫描的路径从中找出标识了需要装配的类自动装配到spring的bean容器中。
        即自动装配标识了 @Component注解的类,包括继承了 @Component 的注解
    5.eg: @ComponentScan({"com.in28minutes.springboot.basics.springbootin10steps","com.in28minutes.springboot.somethingelse"})
          @ComponentScan(basePackages="packName1, packName2")
          @ComponentScan(basePackageClasses={CDPlayer.class, DVDPlayer.class})
          @ComponentScan(basePackages={"spitter"},excludeFilters={ @Filter(type=FilterType.ANNOTATION,value=EnableWebMvc.class)})
          @ComponentScan(value = "com.xhx.spring",useDefaultFilters = false,includeFilters = { @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class})}

@Configuration
    1.配置信息注解,经常与 @Bean 注解配合使用。
    2.使用范围:配置类不能是 final 的;
            配置类不能是本地化的,亦即不能将配置类定义在其他类的方法内部;
            配置类必须有一个无参构造函数。
    3.属性:无
    4.作用:声明当前类是一个配置类,相当于一个Spring的XML配置文件。

@Component
    1.组件注解
    2.使用范围:类
    3.属性:value值可选
    4.作用:泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。   

@Controller
    1.控制器注解,通常需要配合注解 @RequestMapping
    2.使用范围:控制器类
    3.属性:value值可选
    4.作用:用于标注控制层组件(如struts中的action) 
        在spring 项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),一般这个注解在类中

@Service
    1.服务层注解
    2.使用范围:服务层类
    3.属性:value值可选
    4.作用:用于标注业务层组件 

@Repository
    1.持久层注解
    2.使用范围:持久层类
    3.属性:value值可选
    4.作用:用于标注数据访问组件,即DAO组件. 

@Autowired
    1.自动注入注解(byType方式)
    2.使用范围:被标注为组件的类中的成员变量、setter()方法和构造函数上。
    3.属性:required值可选,当加上(required=false)时,就算找不到bean也不报错。
    4.作用:自动导入依赖的bean对象;byType方式。
        把配置好的Bean拿来用,完成属性、方法的组装;
        它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作;    

@Qualifier
    1.标示注解。
    2.使用范围:成员变量、方法入参、构造函数入参。
            通常需要配合注解 @Autowired使用,使其按照名称(byName)来装配
    3.属性:value值可选
    4.作用:当有多个同一类型的Bean时,可以用 @Qualifier(“name”)来指定。
        @Qualifier限定描述符除了能根据名字进行注入,但能进行更细粒度的控制如何选择候选者
    5.eg: @Qualifier("userService")

@RequestBody
    1.请求体注解
    2.使用范围:用在方法中的实体对象前。
    3.属性:required值可选。
    4.作用:可以接收json格式的数据,并将其转换成对应的数据类型赋值给对象。
        一般情况下来说常用其来处理application/json类型

@ResponseBody
    1.响应体注解,一般配合 @RequestMapping使用
    2.使用范围:用在方法前。
    3.属性:无。
    4.作用:表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用,用于构建RESTful的api。
        在使用 @RequestMapping后,返回值通常解析为跳转路径,加上 @responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。
        比如异步获取json数据,加上 @responsebody后,会直接返回json数据。    

@RequestMapping
    1.请求映射路径注解(spring mvc 注解)
    2.使用范围:控制器类及其方法;
            用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
    3.属性:params:指定request中必须包含某些参数值时,才让该方法处理。
        headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。
        value:指定请求的实际地址,指定的地址可以是URI Template 模式
        method:指定请求的method类型, GET、POST、PUT、DELETE等
        consumes:指定处理请求的提交内容类型(Content-Type),如application/json,text/html;
        produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回
    4.作用:提供路由信息,负责URL到Controller中的具体函数的映射
        @RequestMapping(“/path”)表示该控制器处理所有“/path”的URL请求。
    5.eg: @RequestMapping(value="/activity",produces="application/json;charset=UTF-8")、
           @RequestMapping(value="/getActivityList",method=RequestMethod.GET)
           @RequestMapping(value="/getAddressList",method=RequestMethod.POST,consumes="application/x-www-form-urlencoded;charset=UTF-8")

@RequestParam 
    1.请求参数注解(spring mvc 注解)
    2.使用范围:用在方法中的参数前面。
    3.属性:value值可选,
        required值可选。
    4.作用:用于将指定的请求参数赋值给方法中的形参
    5.eg: @RequestParam(value="name",required=false)

@PathVariable
    1.路径变量注解(spring mvc 注解)
    2.使用范围:方法中的参数前。
    3.属性:value值必须,
        required值可选。
        name值可选.
    4.作用:用来获得请求url中的动态参数的,参数与大括号里的名字一样要相同。
    5.eg: @RequestMapping("/zyh/{type}")  -->  (@PathVariable(value="type") int type)

@ModelAttribute(不是特别理解)
    1.模型属性注解
    2.使用范围:方法前、方法中的参数前。
    3.属性:binding --
        value --
        name -- 
    4.作用:注解类型将参数绑定到Model对象

@Import 
    1.导入注解.
    2.使用范围:类
    3.属性:value类必传,
        可接受一个或者多个参数.
    4.作用:引入带有 @Configuration的java类。
    5.eg: @Import({BookStoreServiceConfig.class,BookStoreDaoConfig.class})  

@ImportResource
    1.导入资源文件.xml注解.
    2.使用范围:类
    3.属性:可选
        value --
        locations --
        reader --
    4.作用:引入spring配置文件.xml
    5.eg: @ImportResource(“classpath:/bookstore/config/spring-beans.xml”)  

@PropertySource
    1.导入资源文件.properties注解
    2.使用范围:类
    3.属性:value可选
    4.作用:获取指定文件名的properties配置文件,未指定时默认加载application.properties
    5.eg: @PropertySource(value={"classpath:/user.properties"})
          @PropertySource("classpath:user.properties")

@Value
    1.取值注解
    2.使用范围:属性
    3.属性:必选
    4.作用:配合 @ImportResource进行取值
    4.eg: @Value("${jdbc.username}")
          @Value("#{exampleClass.username}")

@Bean 
    1.Spring Bean 方法注解
    2.使用范围:主要用在 @Configuration注解的类中的方法里,
            也可以用在 @Component注解的类里。
    3.属性:可选
        name -- 指定一个或者多个 Bean 的名字。这等价于 XML 配置中 的 name 属性。
        initMethod -- 容器在初始化完 Bean 之后,会调用该属性指定的方法。这等价于 XML 配置中 的 init-method 属性。
        destroyMethod -- 该属性与 initMethod 功能相似,在容器销毁 Bean 之前,会调用该属性指定的方法。这等价于 XML 配置中 的 destroy-method 属性。
        autowire -- 指定 Bean 属性的自动装配策略,取值是 Autowire 类型的三个静态属性。
            Autowire.BY_NAME,Autowire.BY_TYPE,Autowire.NO。
            与 XML 配置中的 autowire 属性的取值相比,这里少了 constructor,
            这是因为 constructor 在这里已经没有意义了。
            @Bean 没有直接提供指定作用域的属性,可以通过 @Scope 来实现该功能。
    4.作用:用于返回某个实例的方法上,等价于Spring的xml配置文件中的<bean>。




@Configuration VS @Component
    共同点:都可以用于创建Bean;
    不同点:实现原理不同, @Configuration基于CGlib代理实现, 
                   @Component基于反射实现;
    使用场景: @Configuration用于全局配置,比如数据库相关配置,MVC相关配置等;
           业务Bean的配置使用注解配置(@Component,@Service,@Repository,@Controller)。




@ControllerAdvice
    使用范围:进行异常处理的控制器类。
    作用:包含 @Component。可以被扫描到。统一处理异常。

@ExceptionHandler
    使用范围: @ControllerAdvice类中的方法上
    作用:用在方法上面表示遇到这个异常就执行以下方法。
    eg: @ExceptionHandler(Exception.class)





@Aspect
    切面注解

@Pointcut
    切入点注解
    使用范围:切面类中的方法前
    eg: @Pointcut(url)
        //定义切入点,拦截servie包其子包下的所有类的所有方法
         @Pointcut("execution(* com.hs.qmct.app.web.service..*.*(..))") 
        //拦截指定的方法,这里指只拦截KnowledgeRecordController.getKnowledgeDetail这个方法
         @Pointcut("execution(* com.hs.qmct.app.web.service.knowledge.impl.KnowledgeRecordServiceImpl.getKnowledgeDetail(..))")

@Before
    切入前拦截注解
    使用范围:切面类中的执行方法前的拦截方法前
    eg: @Before("excuteService()")    
 
@AfterReturning
    后置返回通知注解
    这里需要注意的是:
        如果参数中的第一个参数为JoinPoint,则第二个参数为返回值的信息
        如果参数中的第一个参数不为JoinPoint,则第一个参数为returning中对应的参数
        returning 限定了只有目标方法返回值与通知方法相应参数类型时才能执行后置返回通知,否则不执行,
        对于returning对应的通知方法参数为Object类型将匹配任何目标返回值
    eg: @AfterReturning(value = Ponit_S_K_K_getKnowledgeDetail, returning = "keys")




@WebFilter 
    过滤器注解
    eg: @WebFilter(filterName = "webParamRequestFilter", urlPatterns = "/*", asyncSupported = true)







@Inject
    注意: @Inject并不是Spring的注解,它是JSR330 (Dependency Injection for Java)中的规范,它的包是javax.inject.Inject,需要导入。
    使用范围:可以作用在变量、setter方法、构造函数上。
    作用:等价于默认的 @Autowired,只是没有required属性;
          是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合 @Named;

@Named
    注意: @Named并不是Spring的注解,它的包是javax.inject.Named
    和spring中的 @Component相同。
    配合 @Inject使用时,自动注入的策略就从 byType 转变成 byName 了。

@Resource
    注意:其实 @Resource并不是Spring的注解,它是JSR250规范的实现,它的包是javax.annotation.Resource,需要导入。
    使用范围:写在字段和setter方法上。
    属性:name -- name属性解析为bean的名字;
          type -- type属性则解析为bean的类型;
    作用:默认byName。与 @Autowired干类似的事;
          如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常;
          如果使用name属性,则使用byName的自动注入策略,从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常;
          如果使用type属性,则使用byType自动注入策略,从上下文中找到类型匹配的唯一bean进行装配,找不到或是找到多个,都会抛出异常;
          如果既没有指定name又没有指定type,则通过反射机制自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。
    eg: @Resource(name="name",type="type")
@SpringBootApplication
    1.入口类Application的启动注解
    2.其中包含 @Configuration#java配置 @ComponentScan#组件扫描 @EnableAutoConfiguration#开启自动装配
        @SpringBootConfiguration继承自 @Configuration,二者功能也一致,
            标注当前类是配置类,并会将当前类内声明的一个或多个以 @Bean注解标记的方法的实例纳入到srping容器中,并且实例名就是方法名。
        @EnableAutoConfiguration的作用启动自动的配置, @EnableAutoConfiguration注解的意思就是Springboot根据你添加的jar包来配置你项目的默认配置,
            比如根据spring-boot-starter-web ,来判断你的项目是否需要添加了webmvc和tomcat,就会自动的帮你配置web项目中所需要的默认配置。
        @ComponentScan,扫描当前包及其子包下被 @Component, @Controller, @Service, @Repository注解标记的类并纳入到spring容器中进行管理。
            是以前的<context:component-scan>(以前使用在xml中使用的标签,用来扫描包配置的平行支持)。

@EnableAutoConfiguration
    1.自动装配注解
    2.原理:借助AutoConfigurationImportSelector,帮助SpringBoot应用将所有符合条件的 @Configuration配置都加载到当前SpringBoot创建并使用的IoC容器。
        借助于Spring框架原有的一个工具类:SpringFactoriesLoader.loadFactoryNames() 的支持, @EnableAutoConfiguration可以智能的自动配置功效才得以大功告成!

@ConfigurationProperties
    1.配置属性注解
    2.使用范围: @Component的类或 @Bean的方法上;
             需要打开 @EnableAutoConfiguration
    3.属性:
        locations -- 
        ignoreUnknownFields -- 是否忽略在有属性不能匹配到声明的域的时候抛出异常 
        prefix -- 属性前缀
    4.作用:把配置文件application.properites中的配置项自动封装成实体类,配置属性由setter方法进行注入;
        作用与 @Value直接注入到属性等同
    5.eg: @ConfigurationProperties(prefix="connection")
          @ConfigurationProperties(locations = "classpath:mail.properties", ignoreUnknownFields = false, prefix = "mail")

@EnableConfigurationProperties
    1.自动注入配置属性注解
    2.使用范围:需要注入有 @ConfigurationProperties注解的类的类
    3.属性:value可选
    4.作用:明确指定需要用哪个实体类来装载配置信息,
        使使用 @ConfigurationProperties 注解的类生效,
        即使用了该注解后,使用 @ConfigurationProperties注解的类无需注册为组件
    5.eg: @EnableConfigurationProperties(ConnectionSettings.class)
          @EnableConfigurationProperties(MailProperties.class)

@RestController
    相当于 @ResponseBody + @Controller合在一起,表示这是个控制器bean,并且是将函数的返回值直 接填入HTTP响应体中,是REST风格的控制器

@JsonBackReference
@JsonManagedReference
@JsonIgnore
    作用:均是为了解决对象中存在双向引用导致的无限递归(infinite recursion)问题,即解决嵌套外链问题。
          均可用在属性或对应的get、set方法中。  
    说明:  @JsonBackReference和 @JsonManagedReference:这两个标注通常配对使用,通常用在父子关系中。
        @JsonBackReference标注的属性在序列化(serialization,即将对象转换为json数据)时,会被忽略(即结果中的json数据不包含该属性的内容)。
        @JsonManagedReference标注的属性则会被序列化。
        在序列化时, @JsonBackReference的作用相当于 @JsonIgnore,此时可以没有 @JsonManagedReference。
        但在反序列化(deserialization,即json数据转换为对象)时,如果没有 @JsonManagedReference,则不会自动注入 @JsonBackReference标注的属性(被忽略的父或子);
            如果有 @JsonManagedReference,则会自动注入自动注入 @JsonBackReference标注的属性。  
        @JsonIgnore:直接忽略某个属性,以断开无限递归,序列化或反序列化均忽略。
            当然如果标注在get、set方法中,则可以分开控制,序列化对应的是get方法,反序列化对应的是set方法。
            在父子关系中,当反序列化时, @JsonIgnore不会自动注入被忽略的属性值(父或子),这是它跟 @JsonBackReference和 @JsonManagedReference最大的区别。  

@RepositoryRestResource
    配合spring-boot-starter-data-rest使用。
    Spring Data REST本身是一个Spring MVC的应用,从引入的Jar可以看到其依赖于Spring和Spring MVC,还可以猜测出Spring Data REST提供的REST服务默认返回的JSON格式,并且默认是用的jackSon解析,
    Spring Data Jpa的默认配置为数据持久层,
    Spring Data Jpa的默认实现为Hibernate.
    eg: @RepositoryRestResource(collectionResourceRel = "people", path = "people")

@Projection
    投影注解
    JPA提供了一种声明方式来解决查询结果,返回的对象无法直接转换成Customer对象。
        即声明一个接口类,然后直接使用这个接口类接受返回的数据即可,可用来自定义返回字段。
    eg: @Projection(name="user",types=UserBean.class)

@RestResource(exported=false)
    自定义方法注解
    在仓库接口中写方法并加此注解;
    eg: @RestResource(exported=false),屏蔽
         @RestResource(path="nameAndAge",rel="nameAndAge")
 

猜你喜欢

转载自www.cnblogs.com/wlxslsb/p/10718402.html