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;
}
- @Bean註解作用在方法上
- @Bean指示一個方法返回一個Spring容器管理的Bean
- @Bean方法名與返回類名一致,首字母小寫
- @Bean 一般和 @Component或者@Configuration 一起使用
- @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 "";
}
- @Configration註解作用在類、介面(包含註解)上
- @Configuration用於定義配置類,可替換xml配置檔案
- @Configration註解類中可以宣告一個或多個@Bean方法
- @Configration註解作用的類不能是final型別
- 巢狀的@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