Spring-SpringBoot常用注解

Spring常用注解

@Autowired
  • 根据类型进行自动装配。若需要根绝名称装配需配合@Qualified一起使用。

@Qualifier
  • @Qualifier:配合@Autowired一起通过名称进行装配。

eg:

@Component("studentInfo")
public class StudentInfo implements UserInfo {
    public String userName() {
        return "student";
    }
}

@Component("teacherInfo")
public class TeacherInfo implements UserInfo {
    public String userName {
        return "teacher";
    }
}

@Component
public class UserService {
    @Autowired
    @Qualifier("studentInfo")
    private UserInfo userInfo;

    //如果容器中有多个相同类型的bean,框架中将抛出NoUniqueBeanDefinitionException, 以提示有多个满足条件的bean进行自动装配,此情况下,需要这两个注解搭配使用。
}
@Bean
  • @Bean:主要用于@Configuratiion注解类中,也可以用于@Component注解的类里,bean的id为其方法名,若要自定义可用此注解的name属性。

@Configuration
public class BeanConfig {

    @Bean(name="user")//默认id为方法名,可通过name属性自定义
    public Person userInfo() {
        return new UserInfo("toutou", 18);
    }
}

这个配置等同于在xml里的配置

<bean id="userInfo" class="com.test.UserInfo">
    <property name="age" value="18"/>
    <property name="name" value="张三"/>
</bean>
@Required
  • @Required:此注解应用于bean属性的setter方法,它表明受影响的bean属性在配置时,必须放在xml配置文件中,否则容器就会抛出一个 BeanInitializationException 异常。

@Required
void setUserName(String name) {
    this.name = name;
}
<!--setter方法上使用@Required注解,xml中必须配置相关属性,否则报错-->
<bean class="com.test.UserInfo">
    <property name="name" value="zhangsan " />
</bean>
@Value
  • @Value:将外部的值动态注入到Bean中。它可以注入普通字符串,注入Java系统变量、注入表达式结果、注入其他Bean属性、将配置文件*.properties 或 *. yml里配置的属性注入、注入文件资源、注入url资源。

@DependsOn
  • @DependsOn:可以定义在类或方法上,根据依赖关系先后注入bean。Spring容器载入bean顺序是不确定的。Spring框架也没有约定特定载入顺序逻辑范围。

@Configuration
public class BeanConfig {

    @Bean("firstBean")
    @DependsOn(value = {
        "secondBean"
    })//再secondBean组件加载后,再加载此组件
    public FirstBean firstBean() {
        return new FirstBean();
    }

    @Bean("secondBean")
    public SecondBean secondBean() {
        return new SecondBean();
    }
}
@Lazy
  • @Lazy:用于标识bean是否需要延迟加载。Spring IoC容器一般都会在启动时实例化所有单实例bean,如果想要Spring在启动时延迟加载A,即在调用B时再去初始化,则可使用此注解。

@Configuration
public class AppConfig {

    @Lazy(value = true)//使他延迟加载
    @Bean
    public FirstBean firstBean() {
        return new FirstBean();
    }

    @Bean
    public SecondBean secondBean() {
        return new SecondBean();
    }
}
@Lookup
  • @Lookup:作用再方法上的注解,被标注的方法被重写,然后根据返回值的类型,容器调用BeanFactory的getBean()方法来返回一个bean。

@Primary
  • @Primary:解决@Autowired时容器中有多个相同类型bean的问题,此注解为默认优先选择,不可以同时设置多个

@Component("studentInfo")
public class StudentInfo implements UserInfo {
    public String userName() {
        return "student";
    }
}

@Component("teacherInfo")
@Primary//默认优先选择
public class TeacherInfo implements UserInfo {
    public String userName {
        return "teacher";
    }
}

@Component
public class UserService {
    @Autowired
    @Qualifier("studentInfo")
    private UserInfo userInfo;

   
}

@Scope
  • @Scope:此注解时SpringIoC容器的一个作用域,其值:singleton–单例,默认、prototype–多例、Web作用域(requst、session、globalsession),自定义作用域

@Profile
  • @Profile:为适应多环境开发,实现不同的开发环境使用不同的数据源。spring3.2之前 @Profile注解用在类上,spring3.2 之后 @Profile注解用在方法上

@Import
  • @Import:用于注入指定的类,导入组件id默认是组件的全类名。

@Configuration
public class ConfigA {

    @Bean
    public A a() {
        return new A();
    }
}

@Configuration
@Import(ConfigA.class)
public class ConfigB {

    @Bean
    public B b() {
        return new B();
    }
}
@ImportResource
  • @ImportResource:用于导入配置文件,让配置文件里面的内容生效。

@Configuration
@ImportResource({"classpath*:applicationContext.xml"})
public class XmlConfiguration {
}
@PropertySource
  • @PropertySource:加载指定的配置文件

@Configuration
@PropertySource("classpath:config.properties")//加载指定的配置文件
public class ProperySourceDemo implements InitializingBean {

    @Autowired
    Environment env;

    @Override
    public void afterPropertiesSet() throws Exception {
        setDatabaseConfig();
    }

    private void setDatabaseConfig() {
        DataSourceConfig config = new DataSourceConfig();
        config.setDriver(env.getProperty("jdbc.driver"));
        config.setUrl(env.getProperty("jdbc.url"));
        config.setUsername(env.getProperty("jdbc.username"));
        config.setPassword(env.getProperty("jdbc.password"));
        System.out.println(config.toString());
    }
}
@PropertySources
  • @PropertySources:可以指定多个@PropertySource来导入配置文件

@PropertySources({
  @PropertySource("classpath:config.properties"),
  @PropertySource("classpath:db.properties")
 })
 public class AppConfig {

 }

SpringWeb注解

@RestController

@RestController:是一个结合了 @ResponseBody 和 @Controller 的注解。

@ResponseBody

@ResponseBody:注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

@Controller

@Controller: 用于标记在一个类上,使用它标记的类就是一个控制器类。分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping 注解。

@RequestMapping

@RequestMapping:一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

​ 有6个属性:

​ 1,value: 指定请求的实际地址。

​ 2,method: 指定请求的method类型, GET、POST、PUT、DELETE等;

​ 3,produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

​ 4,consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

​ 5,params: 指定request中必须包含某些参数值时,才让该方法处理。

​ 6,headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

@RequestParam

@RequestParam:用于将请求参数区数据映射到功能处理方法的参数上

@PathVariable

用于获取URL中的参数:一般{ }中的变量名与方法中的形参名一致–REST风格

RequestMapping(“user/get/mac/{macAddress}) 
public String getByMacAddress(@PathVariable String macAddress){ 
//do something; 
} 
@RequestBody

@RequestBody :一般用来处理非Content-Type: application/x-www-form-urlencoded编码格式的数据,在GET请求中没有请求体所以一般不适用,在post请求中必须指定Content-Type后才能使用它,如ajax请求指定发送格式为application/json。

SpringBoot注解

@SpringBootApplication
  • @SpringBootApplication:SpringBoot启动类上,标识这是一个SpringBoot应用,这是一个复合注解。默认扫描和奔雷再一个层级下的所有包及其子包。
    此注解相当于3个注解的组合:

    @SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan

@SpringBootConfiguration
  • @SpringBootConfiguration: 此注解是@Configuration 注解的变体,只是用来修饰是 Spring Boot 配置而已,或者可利于 Spring Boot 后续的扩展。

@EnableAutoConfiguration
  • @EnableAutoConfiguration:允许自动配置。

    @EnableAutoConfiguration实现的关键在于引入了AutoConfigurationImportSelector,其核心逻辑为selectImports方法,逻辑大致如下:

    ​ 1,从配置文件META-INF/spring.factories加载所有可能用到的自动配置类;

    ​ 2,去重,并将exclude和excludeName属性携带的类排除;

    ​ 3,过滤,将满足条件(@Conditional)的自动配置类返回;

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

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

    String[] excludeName() default {};
}
@ComponentScan
  • @ComponentScan:组件扫描,可自动发现和装配一些Bean。

@Conditional
  • @Conditional:这是 Spring 4.0 添加的新注解,用来标识一个 Spring Bean 或者 Configuration 配置文件,当满足指定的条件才开启配置。

    同系列注解

    注解解释
    @ConditionalOnBean当容器中有指定的Bean才开启配置。
    @ConditionalOnMissingBean当容器中没有指定的 Bean 才开启配置。
    @ConditionalOnClass当容器中有指定的 Class 才开启配置。
    @ConditionalOnMissingClass当容器中没有指定的 Class 才开启配置。
    @ConditionalOnWebWebApplication当前项目类型是 WEB 项目才开启配置。
    @ConditionalOnNotWebApplication当前项目类型不是 WEB 项目才开启配置。
    @ConditionalOnProperty当指定的属性有指定的值才开启配置
    @ConditionalOnExpression当 SpEL 表达式为 true 时才开启配置。
    @ConditionalOnJava当运行的 Java JVM 在指定的版本范围时才开启配置。
    @ConditionalOnResource当类路径下有指定的资源才开启配置
    @ConditionalOnJndi当指定的 JNDI 存在时才开启配置。JDNI(Java 命名与目录接口 Java Naming and Directory Interface)
    @ConditionalOnCloudPlatform当指定的 class 在容器中只有一个 Bean,或者同时有多个但为首选时才开启配置。
@ConfigurationProperties
  • @ConfigurationProperties:用来加载额外配置(yml或properties文件),可用再 @Configuration 注解类,或者 @Bean 注解方法上面。

@EnableConfigurationProperties
  • @EnableConfigurationProperties:一般要配合 @ConfigurationProperties 注解使用,用来开启对 @ConfigurationProperties 注解配置 Bean 的支持。

@AutoConfigureAfter
  • @AutoConfigureAfter:用在自动配置类上面,表示该自动配置类需要在另外指定的自动配置类配置完之后。

如 Mybatis 的自动配置类,需要在数据源自动配置类之后。

@AutoConfigureAfter(DataSourceAutoConfiguration.class)
public class MybatisAutoConfiguration {
}
@AutoConfigureBefore
  • @AutoConfigureBefore:表示该自动配置类需要在另外指定的自动配置类配置之前

@AutoConfigureOrder
  • @AutoConfigureOrder:Spring Boot 1.3.0中有一个新的注解@AutoConfigureOrder,用于确定配置加载的优先级顺序。

 @AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE) // 自动配置里面的最高优先级
  @Configuration
  @ConditionalOnWebApplication // 仅限于web应用
  @Import(BeanPostProcessorsRegistrar.class) // 导入内置容器的设置
  public class EmbeddedServletContainerAutoConfiguration {
      @Configuration
      @ConditionalOnClass({ Servlet.class, Tomcat.class })
      @ConditionalOnMissingBean(value = EmbeddedServletContainerFactory.class, search = SearchStrategy.CURRENT)
      public static class EmbeddedTomcat {
         // ...
      }

      @Configuration
      @ConditionalOnClass({ Servlet.class, Server.class, Loader.class, WebAppContext.class })
      @ConditionalOnMissingBean(value = EmbeddedServletContainerFactory.class, search = SearchStrategy.CURRENT)
      public static class EmbeddedJetty {
         // ...
      }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值