Spring Boot系列2

1 Spring Boot的快速使用

1 创建Spring Boot项目

打开IDEA软件,点击File->New->Project,选择Spring Initializr项,

image-20210830215102381

按照上图选择好配置,点击Next按钮

image-20210830215354778

按照上述选择项目配置,点击Next按钮.

image-20210830215503335

选择Web中Spring Web,下一步选择代码存放地址,完成项目的创建.

2 Spring Boot项目入口类

@SpringBootApplication
public class SpringbootdemoApplication {
    
    

    public static void main(String[] args) {
    
    
        SpringApplication.run(SpringbootdemoApplication.class, args);
    }

}

在项目启动类中,添加打印语句

@SpringBootApplication
public class SpringbootdemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootdemoApplication.class, args);
        System.out.println("项目成功启动");
    }

}

启动项目,查看控制台日志:

image-20210830215952964

创建一个控制器类:

@RestController
public class HelloWorldController {
    
    

    @GetMapping("/query")
    public String query(@RequestParam("username") String username, @RequestParam("password")String password){
    
    

        return "<h1>"+"username"+username+"password"+password+"</h1>" ;
    }

}

重新启动项目,在浏览器输入:

http://localhost:8080/query?username=1234&password=5678

image-20210830220605859

3 注解@SpringBootApplication

启动类上注解@SpringBootApplication是Spring Boot的启动项,点进注解中,发现该注解包括三个了@SpringBootConfiguration,@EnableAutoConfiguration@ComponentScan

源码部分:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
    
     @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
    
    
    ...
  • @SpringBootConfiguration 配置类注解

  • @EnableAutoConfiguration 启动自动配置注解

  • @ComponentScan 组件扫描注解

1 注解@SpringBootConfiguration

源码部分:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
@Indexed
public @interface SpringBootConfiguration {
    
    
	@AliasFor(annotation = Configuration.class)
	boolean proxyBeanMethods() default true;

}

@SpringBootConfiguration注解里面封装了@Configuration注解.

@Configuration注解里面是@Component注解.

代码如下:

@Target({
    
    ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
    
    
    @AliasFor(
        annotation = Component.class
    )
    String value() default "";

    boolean proxyBeanMethods() default true;
}

@Component注解的作用,就是把普通的Java对象实例化到Spring容器中,类似于XML配置文件中的bean对象(如下图)

<bean id="user" class="com.cf.entity.User"/>

综上可知: @Configuration注解表示这个是Spring配置文件,和XML配置文件效果一样.

Spring容器可以扫描我们添加@Component注解的类,Bean的注册逻辑在类org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider#registerDefaultFilters的方法里面

2 注解@EnableAutoConfiguration

部分源码:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
    
    
    ...

注解@EnableAutoConfiguration使用@Import导入了@Configuration标注的配置类.

@Import用来整合所有在@Configuration注解中定义的Bean配置

使用@EnableAutoConfiguration注解可以启用Spring应用程序上下文的自动配置.

Spring Boot默认扫描的包路径是入口类所在的根包及其子包.

3 注解@ComponentScan

注解@ComponentScan和XML配置文件中的<context:component-scan>等价.

@ComponentScan的处理类是org.springframework.context.annotation.ConfigurationClassParser.该注解指导Spring去相应的package下面扫描Spring注解的类,通过反射注册到Bean容器中.

4 XML配置和注解配置

Spring中提供了两种Bean配置方式:

  • XML配置
  • 注解配置

1 XML配置

优点: 可以方便调整Bean的管理模式,按照规范,可以不用费时处理Bean之间的依赖.

缺点: 系统很大,功能越复杂,XML配置文件越多,关系容易错乱.

2 注解配置

优点: 配置方便,不需要知道系统的对象创建,只需要取用即可

缺点: 修改和删除Bean对象时,不能确认其他Bean是否依赖此.(因为我们不负责维护,是由容器负责管理Bean对象)

2 总结

关于Spring Boot的使用简介如上, Spring Boot在开发方面,很好实现了约定大于配置的理念, 可以非常快速的搭建一个项目,并进行快速开发. 这种编程理念,值得我们好好学习.

猜你喜欢

转载自blog.csdn.net/ABestRookie/article/details/120007257