1. 程式人生 > >(D)spring boot使用註解類代替xml配置例項化bean

(D)spring boot使用註解類代替xml配置例項化bean

bean經常需要被例項化,最常見的就是new一個唄,Bean bean = new Bean(),方便好用還快捷。

然而在我們剛開始學習寫i專案的時候卻發現,new不好用哦,並且也不報錯,根本不知道怎麼找原因

比如

package com.example;

import org.springframework.boot.Banner;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import com.example.bean.Book; import com.example.demo.test.TestConfiguration; @SpringBootApplication public class Application{ public static void main(String[] args) { SpringApplicationBuilder builder
= new SpringApplicationBuilder(Application.class); //修改Banner的模式為OFF,啟動時控制檯將不列印顯示字元wow builder.bannerMode(Banner.Mode.OFF).run(args); Book bookconfig = new Book(); System.out.println( "emmmm..... The BookName is " +bookconfig.getName()
+";and Book Author is " +bookconfig.getAuthor() +";and Book price is " +bookconfig.getPrice()); //SpringApplication.run(Application.class, args);//預設啟動方式 } }

控制檯列印的卻是

 

 打印出來是null,可見例項化了一個bookconfig,卻並沒有從屬性檔案中讀到屬性值。

按照spring boot簡化配置的思路以及spring的尿性,啟動註解大法吧!

首先在Book類上@Scope("singleton"),表明這是一個單例類,容器中只有一個該類的例項,然後準備一個配置類

package com.example.demo.test;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
//配置類,用來取代spring.xml那一堆<beans></beans>標頭檔案
@Configuration
@ComponentScan(value="com.example")
public class TestConfiguration {
    public TestConfiguration() {
        System.out.println("Configuration容器啟動初始化。。。");
    }
}

這個配置類的作用註釋中也都寫了,就是我們常見的spring.xml裡面的那一堆標頭檔案 <beans></beans>節點間的內容。

嗯,意思就是寫了這個清爽的配置類就不用在spring.xml裡面配置各種bean了。@Configuration  @ComponentScan(value="com.example")這兩個註解的作用就要自己看了。推薦

https://blog.csdn.net/u012702547/article/details/53633872

然而真的不需要spring.xml了嗎?naive!少不了的不要想了。

怎麼使用這個配置類呢?

package com.example;

import org.springframework.boot.Banner;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import com.example.bean.Book;
import com.example.demo.test.TestConfiguration;




@SpringBootApplication
public class Application{

    public static void main(String[] args) {
        
          SpringApplicationBuilder builder = new SpringApplicationBuilder(Application.class);
            //修改Banner的模式為OFF,啟動時控制檯將不列印顯示字元wow
            builder.bannerMode(Banner.Mode.OFF).run(args);
            @SuppressWarnings("resource")
            ApplicationContext context = new AnnotationConfigApplicationContext(TestConfiguration.class);

            Book bookconfig = context.getBean(Book.class);
            Book bookconfig2 =  context.getBean(Book.class);
      
            System.out.println( "測試@Scope註解的類的設計模式"+bookconfig.equals(bookconfig2));
            System.out.println( "emmmm..... The BookName is "
                                                                +bookconfig.getName()
                                                                +";and Book Author is "
                                                                +bookconfig.getAuthor()
                                                                +";and Book price is "
                                                                +bookconfig.getPrice());
            
        //SpringApplication.run(Application.class, args);//預設啟動方式
    }


}

哈哈哈哈,是的,如你所見,new一下這個配置類就好了。

然後直接把需要的類拿來用。

嗯,這樣看起來是不需要每次手動去new一個,然而,並沒有節約程式碼量啊衰。。。。。