spring 常用注解说明

spring 注解

 spring 统一异常管理
 @ControllerAdvice
 @RestControllerAdvice
  • ioc 核心类定义 容器
    spring 在创建 bean 的时候默认是 singleton 单例的
    要想修改 就在 bean 上添加 @scope 注解 或者scope=“prototype”

  • scope 在 web 环境中还可以设置为 request 和 session
    request:表示每次发送新的请求都会创建一个对象
    session:表示在一次会话中使用的是同一个对象
    prototype: 使用该属性定义Bean时,IOC容器可以创建多个Bean实例,每次返回的都是一个新的实例

  • defaultListableBeanFactory
    private final Map<String, BeanDefinition> beanDefinitionMap ioc 容器

  • BeanDefinition 装载容器的信息 容器作用域 class 信息

  • BeanFactory bean 工厂接口 提供 get 方法 获取容器 称为低级容器 也是最顶层接口
    ApplicationContext 继承了很多接口功能也就多 应用容器上下文 高级容器

  • AbstractApplicationContext 抽象类 高级容器的抽象实现类
    接口定义了一个 refresh 方法刷新整个容器重新加载 bean


ApplicationContextAware 接口

spring 在容器初始化之后会调用 这个接口的实现类 重写里边的 set 方法就可以吧 当前的容器 返回 里边有所有的容器


  • 实现InitializingBean接口
    在将一个 bean 交给 spring 管理的时候 有时候我们的 bean 有某个属性 不支持spirng 注入 afterPropertiesSet 重写方法实现

  • InitializingBean接口,实现了InitializingBean接口的bean,在实例化bean时Spring会帮我们调用接口中的方法。


动态 注册Bean ImportBeanDefinitionRegistrar

  • 定义一个ImportBeanDefinitionRegistrar的实现类,然后在有@Configuration注解的配置类上使用@Import导入

@PropertySource({“classpath:test.properties”})

  • 当前类加载指定配置文件

@Value("${className}")

  • 配置文件引用,若取两个配置文件中有相同属性名的值,则取值为最后一个配置文件中的值
    在application.properties中的文件,直接使用@Value读取即可,applicarion的读取优先级最高

@ConfigurationProperties(prefix = “person”)

@EnableConfigurationProperties

  • @EnableConfigurationProperties注解的作用是:使使用 @ConfigurationProperties 注解的类生效。
  • 如果一个配置类只配置@ConfigurationProperties注解,而没有使用@Component,那么在IOC容器中是获取不到properties 配置文件转化的bean。说白了 @EnableConfigurationProperties 相当于把使用 @ConfigurationProperties 的类进行了一次注入。
    测试发现 @ConfigurationProperties 与 @EnableConfigurationProperties 关系特别大。

@Scope 作用域

  • singletion: 默认作用域,在每个Spring容器中只有一个定义的bean实例
  • prototype: 一个bean定义有多个实例
  • request: 一个定义的bean的实例的生命周期为一次http request。仅在web下生效
  • session: 一个定义的bean的实例的生命周期为一次http session。仅在web下生效
  • globalSession: 一个定义的bean的实例的生命周期为一次global http request。仅在Portlet下生效
  • application: 一个定义的bean的实例的生命周期为ServletContext,仅在web下生效
  • websocket: 一个定义的bean的实例的生命周期为WebSocket

@Lazy 延迟加载Bean 使用时创建


@PostConstruct

  • Java中该注解的说明:@PostConstruct该注解被用来修饰一个非静态的void()方法。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。

@PreConstruct

  • 被@PreConstruct修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。被@PreConstruct修饰的方法会在destroy()方法之后运行,在Servlet被彻底卸载之前。

InitializingBean 和 DisposableBean 接口

  • 为了与容器对bean生命周期的管理进行交互,可以实现Spring InitializingBean和DisposableBean接口。容器要求 afterPropertiesSet()前者和destroy()后者使bean在初始化和销毁​​bean时执行某些操作。

@Bean

@Bean不是按照写代码的顺序加载的,解决的办法也是有的使用 @Orde注解的或者@Bean的方法上标识@DependsOn注解,来指定当前Bean实例化时需要触发哪些Bean的提前实例化


ApplicationContextInitializer

  • spring boot如何在所有bean初始化之前加载一个自定义类?
    方案
    首先创建一个class,继承ApplicationContextInitializer接口,并实现方法initialize

spring定义 start 需要使用的注解

 * @ConditionalOnBean         //	当给定的在bean存在时,则实例化当前Bean
 * @ConditionalOnMissingBean  //	当给定的在bean不存在时,则实例化当前Bean
 * @ConditionalOnClass        //	当给定的类名在类路径上存在,则实例化当前Bean
 * @ConditionalOnMissingClass //	当给定的类名在类路径上不存在,则实例化当前Bean
  //在application.properties配置"mf.assert",对应的值为true
 * @ConditionalOnProperty(prefix="mf",name = "assert", havingValue = "true")

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值