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