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"));
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="ZZT" class="com.zzt.vo.Student">
<property name="name" value="zzt"/>
<property name="age" value="22"/>
<property name="id" value="1"/>
</bean>
</beans>
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回调");
}
}