Springboot 相關注解大全


1.Spring注解 

 1.@Autowired 

 標注在方法,Spring容器創建當前對象,就會調用方法,完成賦值;方法使用的參數,自定義類型的值從ioc容器中獲取自動裝配;

  Spring利用依賴注入(DI),完成對IOC容器中中各個組件的依賴關系賦值;
  1)、@Autowired:自動注入:
    A、默認優先按照類型去容器中找對應的組件:applicationContext.getBean(Person.class);找到就賦值
    B、如果找到多個相同類型的組件,再將屬性的名稱作為組件的id去容器中查找 如:applicationContext.getBean("person")
    C、@Qualifier("person"):使用@Qualifier指定組件的進行裝配,不是屬性名
    D、自動裝配默認一定要將屬性賦值好,沒有就會報錯;可以使用@Autowired(required=false);
    E、@Primary:讓Spring進行自動裝配的時候,默認使用首選的bean;也可以繼續使用@Qualifier指定需要裝配的bean的名字
    PersonService{
        @Autowired
        PersonDao personDao;
    }
2)、Spring還支持使用@Resource(JSR250)和@Inject(JSR330)[java規范的注解]
  @Resource:可以和@Autowired一樣實現自動裝配功能;默認是按照組件名稱進行裝配的;沒有能支持@Primary功能;沒有支持@Autowired(reqiured=false);
  @Inject:需要導入javax.inject的包,和Autowired的功能一樣。沒有required=false的功能;
  @Autowired:Spring定義的; @Resource、@Inject都是java規范
  AutowiredAnnotationBeanPostProcessor:解析完成自動裝配功能;
  3)、 @Autowired:可以使用在構造器,參數,方法,屬性上;都是從容器中獲取參數組件的值
    A、[標注在方法位置]:@Bean+方法參數;參數從容器中獲取;默認不寫@Autowired效果是一樣的;都能自動裝配
    B、[標在構造器上]:如果組件只有一個有參構造器,這個有參構造器的@Autowired可以省略,參數位置的組件還是可以自動從容器中獲取
    C、放在參數位置:
  4)、自定義組件想要使用Spring容器底層的一些組件(ApplicationContext,BeanFactory,xxx);
    自定義組件實現xxxAware;在創建對象的時候,會調用接口規定的方法注入相關組件;Aware;
    把Spring底層一些組件注入到自定義的Bean中;
    xxxAware:功能使用xxxProcessor;
    ApplicationContextAware==》ApplicationContextAwareProcessor;

2.@Component
  默認加在ioc容器中的組件,容器啟動會調用無參構造器創建對象,再進行初始化賦值等操作【構造器要用的組件,都是從容器中獲取】
3.@PostConstruct
  對象初始化並賦值完成后調用
4.@PreDestroy
  對象從容器中移除之前調用
5.@BeanPostProcessor
  bean初始化前后執行的工作
6.@Value 給屬性進行賦值
  @Value("A") @Value("${從配置文件中取值}") @Vlaue("#{SpEL表達式}")
7.@ComponentScan
  @ComponentScan value:指定要掃描的包
  excludeFilters = Filter[] :指定掃描的時候按照什么規則排除那些組件
  includeFilters = Filter[] :指定掃描的時候只需要包含哪些組件【需要設置useDefaultFilters=false】
  FilterType.ANNOTATION:按照注解
  FilterType.ASSIGNABLE_TYPE:按照給定的類型;
  FilterType.ASPECTJ:使用ASPECTJ表達式
  FilterType.REGEX:使用正則指定
  FilterType.CUSTOM:使用自定義規則
8.@Bean("id值")
  給容器中注冊一個Bean;類型為返回值的類型,id默認是用方法名作為id @Bean("person")
  Bean注解的方法創建對象時的參數會從容器中獲取。
9.@Import導入組件,id默認是組件的全類名
  @Import({Color.class,Red.class,MyImportSelector.class,MyImportBeanDefinitionRegistrar.class})
10.@Conditional({Human.class})
  類中組件統一設置。滿足當前條件,這個類中配置的所有bean注冊才能生效;

給容器中注冊組件;
  1)、包掃描+組注注解:@Component @Controller @Service @Repository 
  2)、@Bean用於:導入的第三方包里面的組件
  3)、@Import[快速給容器中導入一個組件]
    1)、@Import(要導入到容器中的組件);容器中就會自動注冊這個組件,id默認是全類名
    2)、ImportSelector:返回需要導入的組件的全類名數組;
    3)、ImportBeanDefinitionRegistrar:手動注冊bean到容器中
    4)、使用Spring提供的 FactoryBean(工廠Bean);
      1)、默認獲取到的是工廠bean調用getObject創建的對象
      2)、要獲取工廠Bean本身,我們需要給id前面加一個&&colorFactoryBean
11.@Scope("prototype") 
  @Lazy
  @Bean("person")
  public Person(){
    return new Person();
  }
  @Scope 對象作用域
    prototype:IOC容器啟動並不會調用方法並放入容器中,而是每次需要時進行創建
    singleton:單例、IOC容器啟動后調用創建對象的方法,以后每次需要對象從容器中獲取
        ConfigurableBeanFactory#SCOPE_PROTOTYPE 多例 
        ConfigurableBeanFactory#SCOPE_SINGLETON 單例
        org.springframework.web.context.WebApplicationContext#SCOPE_REQUEST request 每次同一個request調用一次
        org.springframework.web.context.WebApplicationContext#SCOPE_SESSION sesssion 每次同一個session調用一次

@Lazy :懶加載 
    若為單實例,則在容器啟動后即創建對象
    若為懶加載方式,則容器啟動后不創建對象,需要時獲取Bean創建對象並初始化

12.@Profile
    Profile:Spring為我們提供的可以根據當前環境,動態的激活和切換一系列組件的功能
    開發環境、測試環境、生產環境;
    數據源:(/A)(/B)(/C);
  @Profile:指定組件在哪個環境的情況下才能被注冊到容器中,不指定,任何環境下都能注冊這個組件
    1)、加了環境標識的bean,只有這個環境被激活的時候才能注冊到容器中。默認是default環境
    2)、寫在配置類上,只有是指定的環境的時候,整個配置類里面的所有配置才能開始生效
    3)、沒有標注環境標識的bean在,任何環境下都是加載的;

    啟用Profile起作用的方法有兩種方式:
        1.啟動時添加參數 -Dspring.profile.actice="指定的參數"
        2.在代碼中指定

//1、創建一個applicationContext
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
//2、設置需要激活的環境
applicationContext.getEnvironment().setActiveProfiles("指定的參數"); //3、注冊主配置類 applicationContext.register(MyConfigOfProfile.class); //4、啟動刷新容器 applicationContext.refresh(); class MyConfigOfProfile implements EmbeddedValueResolverAware{ @Override }

 

13.@PropertySource
  使用@PropertySource讀取外部配置文件中的k/v保存到運行的環境變量中;加載完外部的配置文件以后使用${}取出配置文件的值
  @PropertySource(value={"classpath:/db.properties"})

12.bean賦值,注入其他組件,@Autowired,生命周期注解功能,@Async,xxx BeanPostProcessor;
13.AOP 【動態代理】 @EnableAspectJAutoProxy
  指在程序運行期間動態的將某段代碼切入到指定方法指定位置進行運行的編程方式;

    1、導入aop模塊;Spring AOP:(spring-aspects)
    2、定義一個業務邏輯類(MathCalculator);在業務邏輯運行的時候將日志進行打印(方法之前、方法運行結束、方法出現異常,xxx)
    3、定義一個日志切面類(LogAspects):切面類里面的方法需要動態感知MathCalculator.div運行到哪里然后執行;
通知方法:
前置通知(@Before):logStart:在目標方法(div)運行之前運行
后置通知(@After):logEnd:在目標方法(div)運行結束之后運行(無論方法正常結束還是異常結束)
返回通知(@AfterReturning):logReturn:在目標方法(div)正常返回之后運行
異常通知(@AfterThrowing):logException:在目標方法(div)出現異常以后運行
環繞通知(@Around):動態代理,手動推進目標方法運行(joinPoint.procced())
4、給切面類的目標方法標注何時何地運行(通知注解);
5、將切面類和業務邏輯類(目標方法所在類)都加入到容器中;
6、必須告訴Spring哪個類是切面類(給切面類上加一個注解:@Aspect)
[7]、給配置類中加 @EnableAspectJAutoProxy 【開啟基於注解的aop模式】
在Spring中很多的 @EnableXXX;

 

2.SpringMVC注解

@RequestMapping:@RequestMapping(“/path”)表示該控制器處理所有“/path”的UR L請求。該注解有六個參數: 
  params:指定request中必須包含某些參數值是,才讓該方法處理。 
  headers:指定request中必須包含某些指定的header值,才能讓該方法處理請求。 
  value:指定請求的實際地址,指定的地址可以是URI Template 模式 
  method:指定請求的method類型, GET、POST、PUT、DELETE等 
  consumes:指定處理請求的提交內容類型(Content-Type),如application/json,text/html; 
  produces:指定返回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回

3.Springboot注解

Springboot注解

@SpringBootApplication
@ComponentScan掃描Bean
@Configration XML配置
@EnableAutoConfiguration 自動配置
@Component可以配合CommandLineRunner使用,在程序啟動時執行一些基本任務
@RestController
@Controller
@ResponseBody
@PathVairable獲取參數
@JsonBackReference 解決嵌套外鏈問題

Spring Boot 自動配置原理
Spring Boot在進行SpringApplication對象實例化時會加載META-INF/spring.factories文件。將該配置文件載入到spring容器中
getSpringFactoriesInstances
SpringFactoriesLoader.loadFactoryNames
  如在Spring.factories文件中有org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration 一個類,找到類后可以看到Redis的自動化配置方式
Spring是通過條件話注解進行自動化配置的
  @ConditionalOnBean 當容器里有指定Bean的條件下
  @ConditionalOnClass @ConditionalOnException基於SpELl表達式作為判斷條件 
  @ConditionalOnJava 基於JVM版本作為判斷條件 
  @ConditionalOnJndi 在JNDI存在的條件下查找指定的位置
  @ConditionalOnMissingBean 在容器里沒有指定Bean的情況下 
  @ConditionalOnMissingClass當類路徑下沒有指定的類的條件下
  @ConditionalOnNotWebApplication 當前項目不是web項目的條件下
  @ConditionalOnProperty 指定的屬性是否有指定的值 
  @ConditaionalOnResource 類路徑是否有指定的值
  @ConditaionalOnSingleCandidate:當指定Bean在容器中只有一個,或者雖然有多個但是指定首選的Bean。
  @ConditaionalOnWebApplication:當前項目是web項目的條件下


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM