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配置文件中的
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
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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。