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一個,然而,並沒有節約代碼量啊衰。。。。。
ABCD四篇合集項目地址:https://github.com/tuliptulpen/studyspringboot