乐趣区

关于spring:springboot注解描述

SpringBoot 中的根本注解

@SpringBootApplication 注解

任何一个我的项目都有一个入口, 在 SpringBoot 启动类须要有 @SpringBootApplication 注解进行蔑视, 并且在类中定义一个 main 办法,main 办法在运行时会读取配置文件, 并加载指定资源, 而后进行初始化操作.
所以:SpringBoot 我的项目在启动是时, 首选基于启动入口类上的注解形容, 进行主动配置并扫描指定包以及子包中的类进行加载.

@SpringBootTest 注解

顾名思义 SpringBoot 工程中的单元测试须要应用 @SpringBootTest 注解进行形容, 用于通知 spring 框架, 次此测试类交由 spring 治理

@Autowired 注解

简略来说,@Autowired 注解就是通知 spring 框架运行时为此属性注入一个值

 例如: 
 @SpringBootTest
public class DefauleCacheTests {

@Autiwired

 private DefaultCache defaultCache; 

@Test

 void test DefaultCache(){System.out.println("defaultCache:"+ defaultCache);    
 }
输入后果为:
 defaultCache:com.cy.pj.common.cache.DefaultCache@6e33c391

@Component 注解

@Component 注解时 Spring 中用于形容 Bean 类的一个注解, 用于通知 Spring 这个类的实例由 Spring 创立, 当此对象有 Spring 治理和创立是, 会默认将对象存储到池中 (Bean 池) 中.

@Scope 注解

@Scpoe 注解 是 Spring 中用于定义 Bean 对象作用域的一个注解 罕用的值有 @Scope(singleton) @scpoe(prototype)

 @Scope(singleton):@Scope 的默认值, 单例作用域. 既整个内存只有一份 Bean 实例, 此实例创立与类提早加载个性配置无关(@Lazy), 此实例创立后生命周期会由 spring 框架治理. 
 @Scope(prototype): 多例作用域, 每次获取都会创立新的实例, 此实例会在须要的时创立, 与 Lazy 个性无关, 这个实例创立当前, 并不会交给 spring 治理,spring 能够对其初始化, 但不负责销毁. 

@Lazy 注解

@Lazy 注解用于形容类, 其目标是通知 Spring 框架, 此类反对提早加载通常配合单例作用域 (@singleton) 应用
简略来说, 就是它形容的类的实例, 如果临时用不到, 就不要先创立实例(@Lazy(true) 默认值, 实用于大对象, 稀少用)

@PostConstruct 注解

@PostConstruct 注解形容的办法会在对象构建当前执行, 用于执行一些初始化操作

@PreDestroy 注解

@PreDestroy 注解形容的办法会在单例对象销毁之前执行,spring 容器在销毁之前, 会先将容器 (Bean) 中的对象移除, 在移除对象时, 如果对象中定义了生命周期销毁办法, 此时还会调用对象的生命周期销毁办法(在这样的办法中能够做一些资源开释操作)

总结

  1. @SpringBootApplication @SpringBootTest @Component
    @Lazy @scope 次要用于类上
    @PostConstruct @PreDestroy 次要用于办法上

    1. @Lazy 和 @PreDestroy 能够与实用于单例作用域应用 @Scope(singleton), 但不适用于多例作用域 @Scope(prototype).

Spring 中的注解详说:

Spring 经验了如下几个阶段:

第一阶段:xml 配置

在 Spring 1.x 时代,应用 Spring 开发满眼都是 xml 配置的 Bean,随着我的项目的扩充,咱们须要把 xml 配置文件放到不同的配置文件里,那时须要频繁的在开发的类和配置文件之间进行切换

第二阶段:注解配置

在 Spring 2.x 时代,随着 JDK1.5 带来的注解反对,Spring 提供了申明 Bean 的注解(例如 @Component、@Service),大大减少了配置量。次要应用的形式是利用的根本配置(如数据库配置)用 xml,业务配置用注解

第三阶段:java 配置

Spring 3.0 引入了基于 Java 的配置能力,这是一种类型平安的可重构配置形式,能够代替 XML。咱们目前刚好处于这个时代,Spring4.x 和 Spring Boot 都举荐应用 Java 配置。
所有这些 xml 配置都代表了开发时的损耗。因为在思考 Spring 个性配置和解决业务问题之间须要进行思维切换,所以写配置挤占了写利用程序逻辑的工夫。Spring Boot 让这所有成为了过来。Spring Boot 简化了基于 Spring 的利用开发,只须要“run”就能创立一个独立的、生产级别的 Spring 利用。Spring Boot 为 Spring 平台及第三方库提供开箱即用的设置(提供默认设置),这样咱们就能够简略的开始。少数 Spring Boot 利用只须要很少的 Spring 配置。咱们能够应用 SpringBoot 创立 java 利用,并应用 java –jar 启动它,或者采纳传统的 war 部署形式。这也是 SpringBoot 让越来越多的开发人员应用的次要起因之一。上面咱们就来具体解说 SpringBoot 几个很重要的注解:@Configuration,@Bean,@SpringBootApplication,@ComponentScan

@ Configuration 和 @Bean 注解

Spring 的 Java 配置形式是通过 @Configuration 和 @Bean 这两个注解实现的,这两个注解是从 Spring3.0 之后就开始有了:
1、@Configuration 作用于类上,相当于一个 xml 配置文件;
2、@Bean 作用于办法上,相当于 xml 配置中的 <bean>;
案例

@Configuration

public class DemoConfigure {

@Bean
public User userBean(){User user=new User();
    user.setAge(100);
    user.setName("jack");
    user.setPwd("123");
    return user;
}

}

测试如下:
package com.example.springboot01;

import com.example.springboot01.pojo.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class Springboot01ApplicationTests {

  @Autowired
  private User user;
  @Test
  public void contextLoads() {
      System.out.println(user);
  }

}

打印:
User{name=’jack’, pwd=’123′, age=100}
@SpringBootApplication
@SpringBootApplication 注解源码如下:

package org.springframework.boot.autoconfigure;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
      @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {} 

@SpringBootApplication 是一个复合注解,包含 @ComponentScan,和 @SpringBootConfiguration,@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 中应用的标签,用来扫描包)。

@SpringBootApplication 指定扫描某些包

@SpringBootApplication 注解默认扫描的是以后类所在的包和子包。本人能够通过属性来设置扫描其余的包,设置了之后默认值就不在有用。
@SpringBootApplication(scanBasePackageClasses = {TestConfig.class,TestController.class})
通过设置 scanBasePackageClasses 属性来制订,只扫描哪些配置类(@Configuration 注解的类)。
或者如下设置:
@SpringBootApplication(scanBasePackageClasses = {Springboot01Application.class,TestConfig.class})
指定扫描这些类所在的包和子包。
设置不主动拆卸
springboot 的主动配置能够帮咱们节俭很多工夫, 然而有时候如果咱们不想在引入依赖包的状况主动配置, 则能够通过相干设置勾销
在 @SpringBootApplication(exclude = {JpaRepositoriesAutoConfiguration.class, RedisAutoConfiguration.class})注解外部将不须要主动配置的依赖通过 exclude 参数指定即可, 能够指定多个类
所有主动配置的类全都在:org.springframework.boot.autoconfigure 包下。只能排出主动配置的类。

@ComponentScan

@ComponentScan 注解在 Spring 的注解中也起到到相当重要的作用,它能够自定义 Spring 扫描的包,也就是它默认会扫描标注了 @Controller、@Service、@Component 以及 @Repository 注解的类,并实例化这些组件到 SpringIOC 容器中,它有个配置属性:basePackages,也就是指定扫描的包,如果不晓得,它会默认扫描配置了该注解的类的包所在的门路(包含子包)。咱们看 @SpringBootConfiguration 注解的源码中有段代码:
@AliasFor(

 annotation = ComponentScan.class,

 attribute = “basePackages”

)

String[] scanBasePackages() default {};
scanBasePackages 属性,指定到了 @ComponentScan 注解的 basePackages 属性,所有在 SpringBoot 中,咱们同样能够通过 scanBasePackages 属性指定包扫描的门路(如不指定,会默认扫描主程序类所在的包门路以及子包下的类):
@SpringBootApplication(scanBasePackages = “com.seagetech.springbootdemo”)

退出移动版