SpringBoot学习笔记-04 项目结构规范

1.主应用程序类(含有main方法的启动类)需要在根包下,需要有@SpringBootApplication注解,它负责扫描当前包以及其子包目录下的组件(@Component、@Controller、@Service、@Repository、@Controller等所标注的bean)。

2.@SpringBootApplication可使用@EnableAutoConfiguration、@ComponentScan、@Configuration替代

3.主应用程序类自身也是一个配置类,可以用它生成bean实体;自身也是一个IoC容器中的bean实体,SpringBoot已经不推荐使用xml配置

@SpringBootApplication
@MapperScan("com.zzt.mapper") // 当mapper接口和xml文件处于同一包下,使用这种方式
public class DemoApplication {

    @Bean
    public Student getStudent(){
        return new Student();
    }

    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(DemoApplication.class, args);
        System.out.println("新建的bean实体"+ctx.getBean(Student.class));
    }

}

4.可以通过@Import注入一个bean对象(或组件)

@Import(Student.class)
@SpringBootApplication
@MapperScan("com.zzt.mapper") // 当mapper接口和xml文件处于同一包下,使用这种方式
public class DemoApplication {


    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(DemoApplication.class, args);
        System.out.println("新建的bean实体"+ctx.getBean(Student.class));
    }

}

5.@ImportResource导入xml配置文件中的bean(用于新老项目融合)

@ImportResource(locations = {"classpath:spring.xml"})
@SpringBootApplication
@MapperScan("com.zzt.mapper") // 当mapper接口和xml文件处于同一包下,使用这种方式
public class DemoApplication {


    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(DemoApplication.class, args);
        System.out.println("新建的bean实体"+(Student)ctx.getBean("ZZT"));
    }

}



    
        
        
        
    

6.禁止某些自动化配置  对于一些没有用到的配置进行禁止,可以达到优化程序的效果

当我们没有使用到数据库的时候,没有配置数据库信息,却又想测试一下代码,这是就可以除去数据库连接的自动化配置:

方式-注解:

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

方式-配置文件:

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

7.由于SpringBoot有内嵌的Tomcat,因此可以打包成jar包运行(没有内嵌服务器则需要打包成war包发布到服务器上)

8.延迟初始化Bean  对Bean的初始化直到使用时才执行,而不是在创建容器时创建bean,可以加快项目的启动速度

ApplicationContext app = new SpringApplicationBuilder()
                .lazyInitialization(true)
                .sources(DemoApplication.class)
                .run(args);
        /* 方式二
        SpringApplication springApplication = new SpringApplication(DemoApplication.class);
        springApplication.setLazyInitialization(true);
        springApplication.run(args);*/

方式-配置文件:

#延迟初始化bean
spring.main.lazy-initialization=true

[注]:1.当我们设置了延迟初始化后,所有的bean都会被延迟加载,但有时候我们又需要有些bean不被延迟加载,可以使用@Lazy注解:

@Lazy(value = false)

被@Lazy(value = false)标注之后,就不会被懒加载了。

2.在Web应用中,启用延迟初始化将会导致许多与Web相关的bean直到收到HTTP请求后才会被初始化;并且需要保证JVM有足够的内存容纳所有的bean,有必要的话,需要调整JVM的堆大小。

9.CommandLineRunner,ApplicationRunner在SpringBoot启动后进行回调。

@SpringBootApplication
@MapperScan("com.zzt.mapper") // 当mapper接口和xml文件处于同一包下,使用这种方式
public class DemoApplication implements CommandLineRunner, ApplicationRunner {


    public static void main(String[] args) {
        ApplicationContext app = new SpringApplicationBuilder()
                .lazyInitialization(true)
                .sources(DemoApplication.class)
                .run(args);
    }

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("ApplicationArguments回调");
    }

    @Override
    public void run(String... args) throws Exception {
        System.out.println("CommandLineRunner回调");
    }
}

 

 

 

 

 

 

 

你可能感兴趣的:(SpringBoot学习笔记-04 项目结构规范)