飛5的Spring Boot2(5)- SpringApplication和Configuration

SpringApplication

Spring Boot中最重要的註解之一。通常建議放在文件的根目錄下,由於它會隱式的掃描它下面的全部目錄。java

目錄結構如代碼所示:spring

 1com
2 +- example
3     +- myapplication
4         +- Application.java
5         |
6         +- customer
7         |
  +- Customer.java
8         |   +- CustomerController.java
9         |
  +- CustomerService.java
10         |   +- CustomerRepository.java
11         |

12         +- order
13             +- Order.java
14             +- OrderController.java
15             +- OrderService.java
16             +- OrderRepository.java

@Configuration

從Spring3.0,@Configuration用於定義配置類,可替換xml配置文件,被註解的類內部包含有一個或多個被@Bean註解的方法,這些方法將會被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext類進行掃描,並用於構建bean定義,初始化Spring容器。ruby

注意:@Configuration註解的配置類有以下要求:微信

  • @Configuration不能夠是final類型;app

  • @Configuration不能夠是匿名類;測試

  • 嵌套的configuration必須是靜態類。this

@Configuration配置spring並啓動spring容器url

@Configuration標註在類上,至關於把該類做爲spring的xml配置文件中的 ,做用爲:配置spring容器(應用上下文) spa

1import org.springframework.context.annotation.Configuration;
2@Configuration
3public class TestConfiguration {
4    public TestConfiguration() {
5        System.out.println("TestConfiguration容器啓動初始化。。。");
6    }
7}

至關於.net

 1<?xml version="1.0" encoding="UTF-8"?>
2<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3    xmlns:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc"  
4    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
5    xmlns:util="http://www.springframework.org/schema/util" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="
6        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
7        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
8        http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd
9        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd
10        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
11        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd
12        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd"
default-lazy-init="false">

13</beans>

@Bean

@Bean標註在方法上(返回某個實例的方法),等價於spring的xml配置文件中的 ,做用爲:註冊bean對象。

新建測試bean

 1public class TestBean {
2    private String username;
3    private String url;
4    private String password;
5    public void sayHello() {
6        System.out.println("TestBean sayHello...");
7    }
8    public String toString() {
9        return "username:" + this.username + ",url:" + this.url + ",password:" + this.password;
10    }
11    public void start() {
12        System.out.println("TestBean 初始化。。。");
13    }
14    public void cleanUp() {
15        System.out.println("TestBean 銷燬。。。");
16    }
17}

配置類中注入

 1import org.springframework.context.annotation.Bean;
2import org.springframework.context.annotation.Configuration;
3import org.springframework.context.annotation.Scope;
4@Configuration
5public class TestConfiguration {
6    public TestConfiguration() {
7        System.out.println("TestConfiguration容器啓動初始化。。。");
8    }
9    // @Bean註解註冊bean,同時能夠指定初始化和銷燬方法
10    // @Bean(name="testBean",initMethod="start",destroyMethod="cleanUp")
11    @Bean
12    @Scope("prototype")
13    public TestBean testBean() {
14        return new TestBean();
15    }
16}

加載而且測試:

 1mport org.springframework.context.ApplicationContext;
2import org.springframework.context.annotation.AnnotationConfigApplicationContext;
3public class TestMain {
4    public static void main(String[] args) {
5        // @Configuration註解的spring容器加載方式,用AnnotationConfigApplicationContext替換ClassPathXmlApplicationContext
6        ApplicationContext context = new AnnotationConfigApplicationContext(TestConfiguration.class);
7        // 若是加載spring-context.xml文件:
8        // ApplicationContext context = new
9        // ClassPathXmlApplicationContext("spring-context.xml");
10         //獲取bean
11        TestBean tb = (TestBean) context.getBean("testBean");
12        tb.sayHello();
13    }
14}

獲得測試若是:

注: 
(1)、@Bean註解在返回實例的方法上,若是未經過@Bean指定bean的名稱,則默認與標註的方法名相同; 
(2)、@Bean註解默認做用域爲單例singleton做用域,可經過@Scope(「prototype」)設置爲原型做用域; 
(3)、既然@Bean的做用是註冊bean對象,那麼徹底能夠使用@Component、@Controller、@Service、@Ripository等註解註冊bean,固然須要配置@ComponentScan註解進行自動掃描。

本文分享自微信公衆號 - soft張三丰(aguzhangsanfeng)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索