• (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一个,然而,并没有节约代码量啊衰。。。。。

     ABCD四篇合集项目地址:https://github.com/tuliptulpen/studyspringboot

    
    
    
  • 相关阅读:
    jira启动错误解决:Failed to read artifact descriptor for com.atlassian.plugins.rest:atlassian-rest-doclet:jar:2.9.2:
    jira8.0 api变化--含解决方法
    jira spring scanner注意事項
    pom文件添加aliyun镜像
    jira插件打包时报osgi的错误
    jira 根据项目(project)获取优先级(proirity)
    scriptrunner fragments设置web resource的路径
    Ubuntu16.04 LTS上安装Go1.10
    ubuntu 常见错误--Could not get lock /var/lib/dpkg/lock 问题修改
    VS2015编译OpenSSL
  • 原文地址:https://www.cnblogs.com/tulpen/p/9817031.html
Copyright © 2020-2023  润新知