当前位置: 首页 > article >正文

spring之bean和配置相关注解

原文地址

@Qualifier

当有多个同一类型的bean时,使用@Autowired导入会报错,提示当前对象并不是唯一,Spring不知道导入哪个依赖,这个时候,我们可以使用@Qualifier进行更细粒度的控制,选择其中一个候选者,一般于@Autowired搭配使用,示例如下:

@Autowired
@Qualifier("testService")
private TestService testService;

@Scope

用于声明一个spring bean的作用域,作用的范围一共有以下几种:

singleton:唯一 bean 实例,Spring 中的 bean 默认都是单例的。
prototype:每次请求都会创建一个新的 bean 实例,对象多例。
request:每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP request 内有效。
session:每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP session 内有效。

/**
 * 单例对象
 */
@RestController
@Scope("singleton")
public class TestController {

}

@Configuration

表示声明一个 Java 形式的配置类,Spring Boot 提倡基于 Java 的配置,相当于你之前在 xml 中配置 bean,比如声明一个配置类AppConfig,然后初始化一个Uploader对象。

@Configuration
public class AppConfig {

    @Bean
    public Uploader initOSSUploader() {
        return new OSSUploader();
    }

}
@EnableAutoConfiguration

@EnableAutoConfiguration可以帮助SpringBoot应用将所有符合条件的@Configuration配置类,全部都加载到当前SpringBoot里,并创建对应配置类的Bean,并把该Bean实体交给IoC容器进行管理。

某些场景下,如果我们想要避开某些配置类的扫描(包括避开一些第三方jar包下面的配置,可以这样处理。


@Configuration
@EnableAutoConfiguration(exclude = { org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class
})
public class AppConfig {

    //具有业务方法
}

@ComponentScan

标注哪些路径下的类需要被Spring扫描,用于自动发现和装配一些Bean对象,默认配置是扫描当前文件夹下和子目录下的所有类,如果我们想指定扫描某些包路径,可以这样处理。

	@ComponentScan(basePackages = {"com.xxx.a", "com.xxx.b", "com.xxx.c"})

@SpringBootApplication

等价于使用@Configuration、@EnableAutoConfiguration、@ComponentScan这三个注解,通常用于全局启动类上,示例如下:

@EnableTransactionManagement

表示开启事务支持,等同于 xml 配置方式的<tx:annotation-driven />

@SpringBootApplication
@EnableTransactionManagement`
public class PropertyApplication {

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

@value

可以在任意 Spring 管理的 Bean 中通过这个注解获取任何来源配置的属性值,比如你在application.properties文件里,定义了一个参数变量!

config.name=zhangsan
#在任意的bean容器里面,可以通过@Value注解注入参数,获取参数变量值。
@RestController
public class HelloController {

    @Value("${config.name}")
    private String config;

    @GetMapping("config")
    public String config(){
        return JSON.toJSONString(config);
    }
}

@ConfigurationProperties

#上面@Value在每个类中获取属性配置值的做法,其实是不推荐的。

#一般在企业项目开发中,不会使用那么杂乱无章的写法而且维护也麻烦,通常会一次性读取一个 Java #配置类,然后在需要使用的地方直接引用这个类就可以多次访问了,方便维护,示例如下:

#首先,在application.properties文件里定义好参数变量。
config.name=demo_1
config.value=demo_value_1
#然后,创建一个 Java 配置类,将参数变量注入即可!
@Component
@ConfigurationProperties(prefix = "config")
public class Config {

    public String name;

    public String value;

    //...get、set
}
最后,在需要使用的地方,通过ioc注入Config对象即可!
@PropertySource
#这个注解是用来读取我们自定义的配置文件的,比如导入test.properties和bussiness.properties两个配置文件,用法如下:

@SpringBootApplication
@PropertySource(value = {"test.properties","bussiness.properties"})
public class PropertyApplication {

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

@ImportResource

#用来加载 xml 配置文件,比如导入自定义的aaa.xml文件,用法如下:
@ImportResource(locations = "classpath:aaa.xml")
@SpringBootApplication
public class PropertyApplication {

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

http://www.kler.cn/a/289329.html

相关文章:

  • Window下PHP安装最新sg11(php5.3-php8.3)
  • 【含开题报告+文档+PPT+源码】基于Spring Boot智能综合交通出行管理平台的设计与实现
  • MyBatisPlus 用法详解
  • Spring Cloud Contract快速入门Demo
  • ML 系列: 第 24 节 — 离散概率分布(泊松分布)
  • XSS安全基础
  • 论文解读:Prompt-aligned Gradient for Prompt Tuning
  • 论文《Improving your graph neural networks:A High-Frequency Booster》笔记
  • 构造+模拟,CF 873D - Merge Sort
  • 水平垂直居中的方式
  • Nginx - Rewirte
  • 【GPT】Coze使用开放平台接口-【5】API 调用
  • 15、Django Admin添加自定义字段功能
  • 宠物勺子秤芯片解决方案CSU8RP1186
  • 机器学习(五) -- 监督学习(8) --神经网络2
  • 苹果系统中如何安装Python和PyCharm
  • 低代码用户中心的构建与应用
  • 计算机毕业设计PySpark深度学习动漫推荐系统 动漫视频推荐系统 机器学习 协同过滤推荐算法 bilibili动漫爬虫 数据可视化 数据分析 大数据毕业设计
  • Vue3 数据通信
  • 计算机网络 第1章 概述
  • AI预测体彩排3采取888=3策略+和值012路或胆码测试9月3日升级新模型预测第71弹
  • 大数据-114 Flink DataStreamAPI 程序输入源 自定义输入源 Rich并行源 RichParallelSourceFunction
  • Meshy-4:AI驱动3D建模的革命性工具,解锁虚拟创作新高度
  • AIGC与数据分析融合,引领商业智能新变革(TOP企业实践)
  • 摄像头进行视频捕获并定时截取屏幕图像
  • 【前端面试】设计循环双端队列javascript