springboot

1.springboot的优点

    快速搭建开发框架;简化配置(避免spring各种xml文件配置,springboot通过javaConfig的方式对spring进行配置);简化maven依赖(提供一系列的starter 来简化pom文件的配置);内嵌tomcat容器;

javaConfig替代xml配置

编写pojo类型:@component 注解表示被spring ioc容器进行托管;

@Component
public class User {
    @Value("欣宝")
    private String userName;


    public String getUserName() {
        return userName;
    }


    public void setUserName(String userName) {
        this.userName = userName;
    }


    @Override
    public String toString() {
        return "User{" +
                "userName='" + userName + '\'' +
                '}';
    }
}

编写javaConfig类:  添加@configuration注解,使其成为javaConfig类,功能跟xml文件一样,@Bean的功能表示这个方法注册的就是bean,方法名为xml文件中的id,方法返回值为该类的对象;

@Configuration
public class MyConfig {
    @Bean
    public User getUser(){
        return new User();
    }
}

2.springBoot的自动装配

springboot的启动类:

  

 

 

 启动类上有@SpringBootApplication,在@SpringBootApplication中有一个@EnableAutoConfiguration(开启自动配置)的注解,在@EnableAutoConfiguration中有用@import注解导入组件AutoConfigurationImportSelectors.class,该组件中有selectImports方法,该方法会读取spring-boot-autoConfigure jar包下的meta-info/spring.factories文件,查询key为EnableAutoConfiguration的集合,

 

 

 并不是将这些配置类全部加载,这些配置类中都有@ConditionalOnXXX注解,通过这个注解判断,满足注解条件的类才会被加载;

 

 

 

将需要导入的组件以全类名的方式返回,这些组件就被添加到组件中;

 

 

 

 

 

 简要概括一下自动装备:

启动类中有一个@SpringBootApplication注解,包含了@EnableAutoConfiguration代表开启自动

装配,@EnableAutoConfiguration注解会去spring-boot-autoconfigure工程下寻找 META-

INF/spring.factories 文件,这个文件中列举了所有自动装备类的清单,有一百多个,然后自动读取里

面的自动装配配置类清单。

但是这些类不会全部加载,很显然这样非常不合理。但是因为有@ConditionalOn条件注解,满足

一定条件配置才会生效 如: @ConditionalOnClass(某类.class) 工程中必须包含一些相关的类时,

配置才会生效。所以说当我们的起步依赖中引入了一些对应的类之后,自动装备的条件满足了,自

动装备才会被触发。

  

3.springBoot的自定义注解

  

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

    Class<?>[] exclude() default {};

    String[] excludeName() default {};
}

自定义注解类编写的一些规则:

1. Annotation型定义为@interface, 所有的Annotation会自动继承java.lang.Annotation这一接口,并且不能再去继承别的类或是接口.

2. 参数成员只能用public或默认(default)这两个访问权修饰

3. 参数成员只能用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和String、Enum、Class、annotations等数据类型,以及这一些类型的数组.

4. 要获取类方法和字段的注解信息,必须通过Java的反射技术来获取 Annotation对象,因为你除此之外没有别的获取注解对象的方法

5. 注解也可以没有定义成员, 不过这样注解就没啥用了

@Retention 注解

功能:指明修饰的注解的生存周期,即会保留到哪个阶段。

RetentionPolicy的取值包含以下三种:

SOURCE:源码级别保留,编译后即丢弃。

CLASS:编译级别保留,编译后的class文件中存在,在jvm运行时丢弃,这是默认值。

RUNTIME: 运行级别保留,编译后的class文件中存在,在jvm运行时保留,可以被反射调用。

@Target 注解

功能:指明了修饰的这个注解的使用范围,即被描述的注解可以用在哪里。

ElementType的取值包含以下几种:

TYPE:类,接口或者枚举

FIELD:域,包含枚举常量

METHOD:方法

PARAMETER:参数

CONSTRUCTOR:构造方法

LOCAL_VARIABLE:局部变量

ANNOTATION_TYPE:注解类型

PACKAGE:包

 

javaConfig替代xml配置

posted on 2021-11-28 19:51  lidongsheng  阅读(119)  评论(0编辑  收藏  举报

导航