springBoot的基础注解

  • IOC 控制反转 由容器控制资源的创建,获取,销毁操作,不需要自己创建对象
  • DI 依赖注入 检查组件的依赖关系,通过setter方法,构造器等方式自动注入

自动注入

  • @Bean 在配置类中注入一个对象
  • @Configuration 标记一个类为配置类
  • @Controller @Service @Component @Repository
  • @ComponentScan 包扫描
  • @Import 将指定的类导入容器中
    • 第三方包导入到容器中
      • @bean
      • @import
  • @Scope 调整组件的作用域 默认是单实例
    • prototype 非单实例
      • 容器启动时并不会创建非单例实例,只有获取的时候才会创建
    • singleton 单实例
    • request 同一个请求单实例
    • session 同一个session单实例
  • @Lazy 单实例情况下懒加载 只有第一次用到时对象才会被创建
  • 自己新建类实现FactoryBean接口向容器中添加对象 一般用来构造复杂对象
public class MyFactory implements FactoryBean<Account> {  
    @Override  
    public Account getObject() throws Exception {  
        return new Account();  
    }  
  
    @Override  
    public Class<?> getObjectType() {  
        return Account.class;  
    }  
  
    @Override  
    public boolean isSingleton() {  
        return true;  
    }  
}
  • @Conditional 条件判断 有一大堆变种
  • @Autowired 自动注入
    • 成员变量 先根据成员变量的类型寻找,如果找到多个,根据变量名称寻找
    • setter注入
  • @Qualifier 用在@Autowired之上 根据指定name去寻找组件
  • @Resource 与Autowired功能相同
    • 只不过是不同的包 Autowired只能在spring框架中使用,@Resource可以在任何java容器中使用,更加通用
    • @Resource现根据名称查找再根据类型查找,@Autowired先根据类型查找再根据名称过滤
  • 构造器注入
    • 可以不标注Autowired 框架会自动把构造器所需的参数自动注入
  • @Value #{}配合spel表达式给属性赋值,${cat.name:默认值}取配置文件的属性给变量赋值
  • @PropertiesSource(classpath:xxx.properties) 加载一个文件作为配置文件 例如 xxxxx.properties
  • @ConfigurationProperties 指定一个前缀,将配置类中带有这个前缀的配置赋值给成员变量
  • @Profile 多环境 配合配置文件的spring.profiles.active=环境名 使用

Bean的生命周期

  • @Bean注解可以指定init和destroy方法
  • @PostConstruct 在调用构造器之后执行
  • @Predestroy 在销毁前调用
  • initializingBean接口 也是在构造器方法执行,@Autowire自动注入之后执行,不过在@Bean指定的init方法前执行
  • DisposableBean接口 在Bean指定的destroy方法前执行
  • BeanPostProcessor接口(一般用不到)
    • Autowire注解就是使用这个接口实现的
    • 一些自定义注解也是使用这个接口+反射实现
    • 自己补充一个图.jpg
@Component  
public class MyBeanPostProcessor implements BeanPostProcessor {  
    @Override  
    public Object postProcessBeforeInitialization(
	    Object bean, String beanName) throws BeansException {  
        // 在初始化init方法执行前调用  
        if (beanName.equals("dog") || bean instanceof Dog){  
            System.out.println("dog initial前被拦截");  
        }  
        return BeanPostProcessor.super.
	        postProcessBeforeInitialization(bean, beanName);  
    }  
  
    @Override  
    public Object postProcessAfterInitialization(Object bean,
	     String beanName) throws BeansException {  
        // 在初始化方法执行之后调用  
        if (beanName.equals("dog") || bean instanceof Dog){  
            System.out.println("dog initial后被拦截");  
        }  
        return BeanPostProcessor.super.
	        postProcessAfterInitialization(bean, beanName);  
    }  
}
posted @ 2026-01-14 14:26  lyfa  阅读(3)  评论(0)    收藏  举报