1. 程式人生 > >Spring Boot常用註解(三)

Spring Boot常用註解(三)

一.概述

Spring Boot推薦使用java配置完全代替XML配置,java配置是通過@Configration和@Bean註解實現的

  • @Configration註解聲明當前類是一個配置類,相當於Spring中的一個XML檔案
  • @Bean註解作用在方法上,聲明當前方法的返回值是一個Bean

[email protected]註解

@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface
Bean {
// name的別名 @AliasFor("name") String[] value() default {}; @AliasFor("value") String[] name() default {}; /** * 是否通過名稱name或型別type來注入依賴項,Autowire.NO表示外部驅動的自動裝配 * Autowire.BY_NAME * Autowire.BY_TYPE */ Autowire autowire() default Autowire.NO; /** * 初始方法 * @see
org.springframework.beans.factory.InitializingBean * @see org.springframework.context.ConfigurableApplicationContext#refresh() */
String initMethod() default ""; /** * Spring上下文關閉時呼叫 * @see org.springframework.beans.factory.DisposableBean * @see org.springframework.context.ConfigurableApplicationContext#close() */
String destroyMethod() default AbstractBeanDefinition.INFER_METHOD; }
  1. @Bean註解作用在方法上
  2. @Bean指示一個方法返回一個Spring容器管理的Bean
  3. @Bean方法名與返回類名一致,首字母小寫
  4. @Bean 一般和 @Component或者@Configuration 一起使用
  5. @Bean註解預設作用域為單例singleton作用域,可通過@Scope(“prototype”)設定為原型作用域

2.1 Bean名稱

  • @Bean註解方法返回Bean名稱預設為類名,首字母小寫
  • @Bean註解可以使用value屬性或別名name
  • @Bean註解接受一個String陣列,允許為一個Bean配置多個名稱(包含一個主名稱和一個或多個別名)

1.預設Bean名稱

預設Bean名稱為 - myBean

@Bean
public MyBean myBean() {
    return new MyBean();
}

2.設定Bean名稱

設定的Bean名稱為 - myBean1

@Bean("myBean1")
public MyBean myBean() {
    return new MyBean();
}

3.設定多個Bean名稱

設定的Bean的名稱為 - myBean1和myBean2

@Bean({"myBean1", "myBean2"})
public MyBean myBean() {
    return new MyBean();
}

2.2 @Bean與其他註解一起使用

@Bean註解沒有提供profile,scope,lazy,depends-on或primary的屬性,相反,@Bean註解應該與@Scope@Lazy@DependsOn@link Primary註解一起使用來宣告這些語義

  • @Profile註解為在不同環境下使用不同的配置提供了支援,如開發環境和生產環境的資料庫配置是不同的額
  • @Scope註解將Bean的作用域從單例改變為指定的作用域
  • @Lazy註解只有在預設單例作用域的情況下才有實際效果
  • @DependsOn註解表示在當前Bean建立之前需要先建立特定的其他Bean
@Bean()
@Scope("prototype")
public MyBean myBean() {
    return new MyBean();
}

2.3 Bean的初始化和銷燬

實際開發中,經常會遇到在Bean使用之前或使用之後做些必要的操作,Spring對Bean的生命週期的操作提供了支援

  • Java配置方式:使用Bean的initMethod和destrodMethod
  • 註解方法:利用JSR-250的@ConstConstruct和@PreDestroy
public class MyBean {

    public void init() {
        System.out.println("MyBean開始初始化...");
    }

    public void destroy() {
        System.out.println("MyBean銷燬...");
    }

    public String get() {
        return "MyBean使用...";
    }
}
@Bean(initMethod="init", destroyMethod="destroy")
@Scope("prototype")
public MyBean myBean() {
    return new MyBean();
}

[email protected]註解

Spring提供了@Configration註解,可以用來配置多個Bean

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {

    @AliasFor(annotation = Component.class)
    String value() default "";
}
  1. @Configration註解作用在類、介面(包含註解)上
  2. @Configuration用於定義配置類,可替換xml配置檔案
  3. @Configration註解類中可以宣告一個或多個@Bean方法
  4. @Configration註解作用的類不能是final型別
  5. 巢狀的@Configration類必須是static的

3.1 @Configration + @Bean註解

功能類的Bean:

此處沒有使用@Service等註解宣告Bean

public class MyBean {

    public void init() {
        System.out.println("MyBean開始初始化...");
    }

    public void destroy() {
        System.out.println("MyBean銷燬...");
    }

    public String get() {
        return "MyBean使用...";
    }
}
@Configuration
public class MyConfigration {

    @Bean(initMethod="init", destroyMethod="destroy")
    @Scope("prototype")
    public MyBean myBean() {
        return new MyBean();
    }
}
@SpringBootApplication
@RestController
public class DemoApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(DemoApplication.class, args);

        MyBean myBean1 = (MyBean) context.getBean("myBean");
        System.out.println(myBean1.toString());

        System.out.println();

        MyBean myBean2 = (MyBean) context.getBean("myBean");
        System.out.println(myBean2.toString());
    }
}

測試結果:

2018-02-10 10:58:12.301  INFO 11068 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8090 (http) with context path ''
2018-02-10 10:58:12.321  INFO 11068 --- [           main] com.example.demo.DemoApplication         : Started DemoApplication in 7.233 seconds (JVM running for 8.628)
MyBean開始初始化...
[email protected]5206

MyBean開始初始化...
[email protected]48d5

這裡寫圖片描述

3.2 @Configration + @Bean + Environment

通過使用@Autowired}註釋將org.springframework.core.env.Environment注入 @Configuration類,可以查詢外部值:

public class MyBean {
    private String port;

    public String get() {
        return "埠號: " + getPort();
    }

    public String getPort() {
        return port;
    }

    public void setPort(String port) {
        this.port = port;
    }
}
@Configuration
public class MyConfig {

    @Autowired
    private Environment environment;

    @Bean("myEnvBean")
    public MyBean myBean() {
        MyBean myBean = new MyBean();
        myBean.setPort(environment.getProperty("server.port", "8080"));
        return myBean;
    }
}
@SpringBootApplication
@RestController
public class DemoApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(DemoApplication.class, args);

        MyBean myEnvBean = (MyBean) context.getBean("myEnvBean");
        System.out.println(myEnvBean.get());
    }
}

測試結果:

2018-02-10 11:24:47.492  INFO 2788 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8090 (http) with context path ''
2018-02-10 11:24:47.505  INFO 2788 --- [           main] com.example.demo.DemoApplication         : Started DemoApplication in 7.76 seconds (JVM running for 8.712)
埠號: 8090

這裡寫圖片描述

3.3 @Configration + @Bean + Environment + @PropertySource

@PropertySource註解可以讀取自定義的properties配置檔案,自定義的properties檔案放在src/main/resources檔案路徑下
這裡寫圖片描述

配置檔案:app.properties

jdbc.username="admin"
jdbc.password="admin"

這裡寫圖片描述

public class MyBean {
    private String userName;

    private String passWord;

    public MyBean(String userName, String passWord) {
        this.userName = userName;
        this.passWord = passWord;
    }

    public String get() {
        return "使用者名稱:  " + this.userName + ",  密碼 : " + this.passWord;
    }
}

配置檔案路徑:@PropertySource(“classpath:properties/app.properties”)

@Configuration
@PropertySource("classpath:properties/app.properties")
public class MyPropertySourceConfigration {

    @Autowired
    private Environment environment;

    @Bean("myPSBean")
    public MyBean myBean() {
        MyBean myBean = new MyBean(environment.getProperty("jdbc.username", "請設定使用者名稱"), environment.getProperty("jdbc.password", "請設定密碼"));
        return myBean;
    }
}
@SpringBootApplication
@RestController
public class DemoApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(DemoApplication.class, args);

        MyBean myEnvBean = (MyBean) context.getBean("myPSBean");
        System.out.println(myEnvBean.get());
    }
}

測試結果:

2018-02-10 17:18:38.670  INFO 2204 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8090 (http) with context path ''
2018-02-10 17:18:38.703  INFO 2204 --- [           main] com.example.demo.DemoApplication         : Started DemoApplication in 7.4 seconds (JVM running for 8.339)
使用者名稱:  "admin",  密碼 : "admin"

這裡寫圖片描述

相關推薦

Spring Boot常用註解

一.概述 Spring Boot推薦使用java配置完全代替XML配置,java配置是通過@Configration和@Bean註解實現的 @Configration註解聲明當前類是一個配置類,相當於Spring中的一個XML檔案 @Bean註解作用在方法

Spring Boot常用註解

1.概述 在 Spring Boot常用註解(一) - 宣告Bean的註解 中學習了Spring Boot中宣告Bean的註解 那Spring容器中的Bean是怎麼實現自動裝配(依賴)的呢? 這就是接下來學習的注入註解咯 注入Bean的註解: @Au

Spring Boot實戰筆記-- Spring常用配置Bean的初始化和銷毀、Profile

div nbsp troy string 實例化 public ive work 初始 一、Bean的初始化和銷毀   在我們的實際開發的時候,經常會遇到Bean在使用之前或之後做些必要的操作,Spring對Bean的生命周期操作提供了支持。在使用Java配置和註解配置下提

Spring boot Caffeine快取——使用註解

註解在Spring中的應用很廣泛,幾乎成為了其標誌,這裡說下使用註解來整合快取。 cache方面的註解主要有以下5個 @Cacheable 觸發快取入口(這裡一般放在建立和獲取的方法上) @CacheEvict 觸發快取的eviction(用於刪除的

Spring Boot參考教程內部應用監控Actuator

使用方式 實現類 pat igp pid localhost aid 倉庫 默認 3. 內部應用監控(Actuator) 如上2.4中所述,傳統spring工程中工程的初始化過程,bean的生命周期,應用的內部健康情況均無法監控,為了解決這個問題,spring boot提供

spring boot入門筆記 - banner、熱部署、命令行參數

nal rop dep ioc devtools 一點 一個 splay option   1、一般項目啟動的時候,剛開始都有一個《spring》的標誌,如何修改呢?在resources下面添加一個banner.txt就行了,springboot會自動給你加載banner.

Spring Boot學習筆記—— 新增Mybatis、Druid

一、前言 之前我們對Spring Boot的View和Control配置都有了一定的瞭解,在Model層配置上,我們將使用Mybatis、Druid進行開發,下面就對其進行配置。 二、開始配置 MyBatis 是一款優秀的持久層框架,Druid是一個高效能的資料庫連線池,並且提供

spring boot 整合 jpa -- 之表關係對映

spring boot 整合 jpa (一) – 之基礎配置 https://blog.csdn.net/qq_41463655/article/details/82939481 spring boot 整合 jpa (二) – 之資料操作 https://blog.csdn.net/q

Spring Boot 最佳實踐模板引擎FreeMarker整合

一、FreeMaker介紹 FreeMarker是一款免費的Java模板引擎,是一種基於模板和資料生成文字(HMLT、電子郵件、配置檔案、原始碼等)的工具,它不是面向終端使用者的,而是一款程式設計師使用的元件。 FreeMarker最初設計是用來在MVC模式的Web

Spring boot使用總結校驗[email protected] 使用

spring boot 1.4預設使用 hibernate validator 5.2.4 Final實現校驗功能。hibernate validator 5.2.4 Final是JSR 349 Bean Validation 1.1的具體實現。 一 初步使用

Spring Boot學習筆記檔案上傳與訪問靜態檔案

檔案上傳 寫法和Spring MVC沒啥區別看起來 package org.test.Controll; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.we

Spring Boot學習筆記——使用JPA查詢資料庫返回需要的資料

1.概述 在上一篇中,我們已經學會了如何建立執行一個Spring Boot程式,但是他還遠遠滿足不了一個網站的基本需求,完成這篇的學習後我們就能實現一個簡單的雛形。 2.目標 在本篇中,實現的簡單的資料庫訪問,讀取資料的功能。 3.詳細步驟 (1)在第

CentOS 7 spring boot專案上線

  域名註冊 百度阿里雲 搜尋框搜素 域名  com 或 cn選一個進去   點選加入清單下方會提示選擇 :需要實名認證才能購買         

Spring Boot 學習筆記Spring boot 中的SSM

Spring boot 下的 Spring mvc @Controller:即為Spring mvc的註解,處理http請求; @RestController:Spring4後新增註解,是@Controller與@ResponseBody的組合註解,用於返回字串或json資料; package c

spring boot +WebSocket 點對點式

前兩篇部落格演示了廣播式的websocket 推送。 廣播式有自己的應用場景,但是廣播式不能解決我門一個常見的場景,即訊息由誰傳送、由誰接收的問題。 本例中演示了一個簡單的聊天室程式。例子中只有兩個使用者,互相傳送訊息給彼此,因需要使用者相關內容,所以這裡引

spring boot基礎搭建

重新配置hibernate: 在config包下建立HibernateConfiguration類如下: 程式碼: package com.config; im

Spring Boot學習之Spring Boot的核心

1、Spring Boot的專案一般都會有*Application的入口類,入口類中會有main方法,這是一個標準的Java應用程式的入口方法。 @SpringBootApplication註解是Spring Boot的核心註解,它其實是一個組合註解:下面我們

Spring學習之路bean註解管理AOP操作

spec resource 自定義屬性 開始 java framework XML 方法名 jar包 在類上面、方法上面、屬性上面添加註解;並用bean來管理; 書寫方法:@註解名稱(屬性名稱=值) 第一步:導入jar包   導入spring-aop.jar(spri

Spring Boot實戰筆記-- Spring常用配置事件Application Event

ans can string code text extends autowired dem plc 一、事件(Application Event)   Spring的事件為Bean和Bean之間的消息通信提供了支持。當一個Bean處理完一個任務之後,希望另一個Bean知道

Spring Boot實戰筆記-- Spring高級話題條件註解@Conditional

cat property sts 配置 fig 構造 註解 方法 code 一、條件註解@Conditional   在之前的學習中,通過活動的profile,我們可以獲得不同的Bean。Spring4提供了一個更通用的基於條件的Bean的創建,即使用@Conditiona