springBoot好处:
1.依赖管理,
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
我们使用的技术栈,导入依赖的时候,只要写添加了这个依赖,其余的就不用写版本号,这个内部把我们用的所有的技术栈的版本都添加好了。
如果我们不想用springboot里面设置好的版本,我们可以这样修改。
<properties>
<mysql.version>5.1.43</mysql.version>
</properties>
2.自动配置
1.配置好了tomact,springmvc全套组件,比如前端控制器,字符集编码之类的,都有
主程序所在的包,以及下面的子包都会被扫描出来,这是一个默认的层级位置,如果我们想改变,就这样做。
@SpringBootApplication(scanBasePackages = "com.zhang")
public class mainApplication {
public static void main(String[] args) {
SpringApplication.run(mainApplication.class,args);
}
}
我们可以自己手动将这个扫描位置放打。
我们也可以使用springmvc那个扫描注解@CompanctScan
一个@SpringBootApplication注解等同于这三个注解@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan。
@Configuration和@Bean作用
@Configuration
public class TestConfig {
@Bean
public User TestUser(){
return new User("颤三",19);
}
}
这个@Configuration标注一个类,就表示这个类就是一个spring的配置类,就相当于以前springmvc.xml这个大的配置类,@Bean这个注解标识在方法上,就表明这是一个spring里面的一个bean,注册好的。这个Bean的名字默认就是方法名字,我们也可以手动修改。
@SpringBootApplication(scanBasePackages = "com.zhang")
public class mainApplication {
public static void main(String[] args) {
ConfigurableApplicationContext run = SpringApplication.run(mainApplication.class, args);
String[] names = run.getBeanDefinitionNames();
for (String name: names){
System.out.println(name);
}
User testUser = run.getBean("UserA", User.class);
System.out.println(testUser);
}
}
这个里面有个getBeanDefinitionNames();方法,根据名字理解应该就是拿到所有被加载到spring的一个个的名字,应该说是bean的名字。
也就是springboot自动装配的一些东西,可以看的出来非常非常多,什么都有。
别忘记了,spring中的bean默认还是单例的。
@Configuration(proxyBeanMethods = true)
public class TestConfig {
@Bean(name = "UserA")
public User TestUser(){
return new User("颤三",19);
}
}
如果组件之间有依赖关系,如果是true,springboot都会检查容器里面是不是有,如果是false就会跳过检查,运行也相对较快。
简单来说,就是user01这个bean里面使用了tom这个bean,如果我们proxy设置位true,springboot就会去检查他们是否依赖,如果你设置为false,springboot就不会检查。直接跳过。
@Inport:我们可以用这个注解,向带有@Configuration或者是@Component的修饰的类上面,在给这个类引入新的组件,比如我们在给这个类引入一个user对象
@Import({User.class})
@Configuration(proxyBeanMethods = true)
public class TestConfig {
@Bean(name = "UserA")
public User TestUser(){
return new User("颤三",19);
}
}
String[] beanNamesForType = run.getBeanNamesForType(User.class);
for (String s1: beanNamesForType) {
System.out.println(s1);
}
@ConditionalOnBean()这个注解的意思就是满足一定条件了在给你注入,创建bean,否则就不创建,都不创建。
如果是标记在类上,这个类里面满足条件,下面类里面的方法,bean才会生效。
@ImportResource(“classpath:SpingMVC.xml”),这个注解就是针对,比如说公司用的还是xml配置注册bean的方式,现在想用注解了,一个一个的标注bean会很乏力,现在直接用这个ImportResource,参数就放你那个配置文件的路径,这样就可以加入到spring容器中了。