(D)spring boot使用註解類代替xml配置例項化bean
阿新 • • 發佈:2018-11-10
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一個,然而,並沒有節約程式碼量啊衰。。。。。