sprint boot学习之bean

news/2025/11/24 10:51:02/文章来源:https://www.cnblogs.com/cinerariay/p/19262517

在Spring Boot中,注册Bean主要有以下几种方式:

1. 使用@Component注解

在springboot创建类时添加@Component注解

点击查看代码
@Component
public class MyBean 
{ ; // 类定义 }

2. 使用@Repository@Service@Controller注解

这些注解是@Component的特化,分别用于标记数据访问层(DAO层)、服务层和控制器层。使用这些注解可以让代码更加清晰,同时也便于Spring进行分层管理。

  • @Repository:用于标记数据访问层组件。
  • @Service:用于标记服务层组件。
  • @Controller:用于标记控制器层组件。
点击查看代码 ``` @Service public class MyService { // 类定义 } ```

3. 使用 @Bean 注解

 如果你需要在配置类中显式地定义Bean,可以使用@Bean注解。这种方式通常用于那些需要通过方法创建的复杂Bean,或者当你想要在运行时动态创建Bean时。

点击查看代码
@Configuration 
public class AppConfig { 
@Bean 
public MyBean myBean() 
{ return new MyBean(); } }

4. 使用@Configuration和@Bean结合的方式创建配置类

这种方式结合了上面提到的使用@Configuration和@Bean的方法,适用于需要大量配置和复杂逻辑的情况。

点击查看代码
@Configuration 
public class AppConfig 
{ @Bean public MyService myService() 
{ return new MyServiceImpl(); // 返回一个实现了MyService接口的类的实例 } }

5. 使用@Import注解导入其他配置类

如果你有多个配置类,可以使用@Import注解将它们导入到主配置类中。这样可以使配置更加模块化。

点击查看代码
@Configuration 
@Import({AppConfig.class, AnotherConfig.class}) 
public class MainConfig { // 主配置类内容 } 

关于扫描bean组件:

1. 使用@SpringBootApplication注解

当你使用@SpringBootApplication注解在你的主类上时,它内部已经包含了@ComponentScan,并且默认会扫描当前类所在的包及其子包

点击查看代码
@SpringBootApplication//MyApplication及其所在包和子包中组件都会被扫描
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

2.自定义包扫描

2.1 在@SpringBootApplication注解中指定scanBasePackages属性

点击查看代码
@SpringBootApplication(scanBasePackages = "com.example.myapp")//指定扫描的组件名
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

2.2.(通过@ComponentScan)自动扫描包中的组件:

Spring Boot默认会扫描启动类所在的包及其子包下的所有带有@Component、@Service、@Repository、@Controller等注解的类,并将它们注册为Spring容器中的Bean。

你可以通过在主应用类或者配置类上使用@ComponentScan注解来指定Spring Boot自动扫描的包路径,从而自动注册这些包下的所有Bean。(注意扫描路径外的组件不会扫描)

点击查看代码
@SpringBootApplication 
@ComponentScan(basePackages = "com.example.myapp") // 指定扫描的组件名
public class MyApplication 
{ 
public static void main(String[] args) 
{ SpringApplication.run(MyApplication.class, args); } 
}
也可以在特定的配置类上使用@ComponentScan来指定扫描的包:也可以在特定的配置类上使用@ComponentScan来指定扫描的包:
点击查看代码
@Configuration
@ComponentScan(basePackages = "com.example.myapp")
public class AppConfig {
}@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) // 示例,排除自动配置类
public class MyApplication {public static void main(String[] args) {SpringApplication app = new SpringApplication(MyApplication.class);app.setRegisterShutdownHook(true); // 确保应用正确关闭app.run(args);}
}
使用排除模式(Exclude Filters)

如果你只想包含或排除特定的组件,你可以使用includeFilters或excludeFilters属性

点击查看代码
@ComponentScan(basePackages = "com.example.myapp", excludeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = SpecificComponent.class)
})
public class AppConfig {
}

在application.properties或application.yml中设置扫描路径

properties
spring.main.scan-package=com.example.myapp 
yaml
spring: main: scan-package: com.example.myapp

bean注入:

1. 使用@Autowired注解

@Autowired注解可以自动装配Spring容器中的Bean。你可以在构造器、字段或方法上使用它。

点击查看代码
@Component
public class MyService {// 通过字段注入@Autowiredprivate MyDependency myDependency;// 通过构造器注入private final MyDependency myDependency;@Autowiredpublic MyService(MyDependency myDependency) {this.myDependency = myDependency;}// 通过Setter方法注入@Autowiredpublic void setMyDependency(MyDependency myDependency) {this.myDependency = myDependency;}
}

2. 使用@Resource注解

@Resource注解是Java标准,用于依赖注入。它可以通过名称或类型来装配Bean

@Resource
@Component
public class MyService {// 通过类型注入@Resourceprivate MyDependency myDependency;
}

3. 使用@Inject注解(JSR-330标准)

@Inject注解是JSR-330(Java依赖注入)标准的一部分,用于依赖注入。它比@Autowired更简洁,但在Spring中通常不常用,因为@Autowired提供了更多的灵活性

@Inject
@Component
public class MyService {@Injectprivate MyDependency myDependency;
}

4. 使用构造函数注入(推荐方式)

构造函数注入确保了依赖项在对象创建时就已经被注入,从而使得对象的状态在创建时就被确定,这是一种更清晰和更安全的依赖注入方式

点击查看代码
@Component
public class MyService {private final MyDependency myDependency;@Autowired // 或使用 @Inject,两者效果相同但 @Autowired 是 Spring 特有的,更常用。public MyService(MyDependency myDependency) {this.myDependency = myDependency;}
}

5. 使用@Qualifier注解解决歧义

当有多个相同类型的Bean候选时,你可以使用@Qualifier注解来指定具体的Bean。

点击查看代码
@Component
public class MyService {@Autowired@Qualifier("specificBean") // 指定具体的Bean名称或变量名private MyDependency myDependency;
}

或者使用@Primary注解标注首选的Bean:

点击查看代码
@Component
@Primary // 标记首选的Bean,当存在多个相同类型的Bean时,Spring将自动选择这个Bean进行注入。
public class PrimaryMyDependency implements MyDependency { } 

6. 使用@Lazy注解实现懒加载(Lazy Loading)

点击查看代码
@Component
public class MyService {@Autowired // 或者 @Inject 和 @Resource 都支持 @Lazy 注解。 例如: @Autowired(required = false) @Lazy 也可以用在字段或方法上。 默认情况下,如果找不到Bean会抛出异常,设置 required = false 可以避免这种情况。 例如: @Autowired(required = false) @Lazy private MyDependency myDependency; 这样即使没有找到对应的Bean也不会抛出异常。 而是将myDependency设置为null。 但通常不推荐这种方式,因为它可能导致NullPointerException。 更合适的做法是使用 Optional<MyDependency> 来避免NullPointerException。 例如: @Autowired(required = false) private Optional<MyDependency> myDependency; 这样即使没有找到对应的Bean,myDependency也不会是null,而是Optional.empty()。 这样在使用时就需要判断是否存在值了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/974568.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 最新关节电机厂家权威推荐榜:直流无刷 / 力矩 / 机械臂等专用电机优质厂商综合测评人形机器人 / 智能机器人 / 无刷直流 / 力矩 / 机械臂 / 机械手关节电机公司推荐

引言 在全球智能制造与机器人产业高速迭代的背景下,关节电机作为核心动力部件,其性能直接决定设备的精准度与稳定性,市场需求呈爆发式增长。为破解品牌选择困境,本次榜单由国际机器人技术协会(IRTA)联合全球电机…

2025年知名的离婚财产分割律师实力榜单

2025年知名的离婚财产分割律师实力榜单行业背景与市场趋势随着我国离婚率的持续攀升,离婚财产分割法律服务市场呈现出快速增长态势。根据民政部最新数据显示,2024年全国离婚登记数量达到450万对,同比增长8.3%,其中…

2025年11月北京遗产继承律师权威选择指南及十大律所深度解析

摘要 2025年北京遗产继承法律服务行业呈现专业化、精细化发展趋势,随着人口老龄化加剧和家庭资产结构多元化,遗产继承纠纷案件量同比增长23%。本文基于第三方调研数据,从胜诉率、客户满意度、专业资质等维度深度解析…

2025年知名的朝日精酿啤酒机定制定做

2025年知名的朝日精酿啤酒机定制定做:行业趋势与优质供应商推荐精酿啤酒机行业背景与市场趋势近年来,全球精酿啤酒市场呈现爆发式增长态势。根据Grand View Research最新报告显示,2023年全球精酿啤酒市场规模已达到…

2025 最新风机电机厂家推荐!全球权威测评认证风机电机供应商涵盖多类型电机靠谱采购指南直流无刷移动风机电机 / 交直流吹地机风机电机 / 交直流吸油烟机风机电机公司推荐

引言 风机电机作为工业生产与民生领域的核心动力设备,其性能稳定性、节能效率与适配能力直接决定下游产业的运营成本与发展质量。当前全球风机电机市场品牌繁杂,产品质量与服务水平差异显著,给采购方带来选型难题。…

2025年喷漆加工服务厂家综合实力排行榜前十强推荐

摘要 2025年喷漆加工行业迎来技术升级与市场洗牌,环保型喷漆技术和智能化生产线成为主流趋势。本文基于市场调研数据、企业技术实力和客户反馈,对国内喷漆加工服务厂家进行综合评估排名,为有需求的客户提供参考选择…

2025 最新泡沫灭火剂厂家推荐!全场景适配泡沫灭火剂厂家权威榜单:国际协会测评认证 + 多维度甄选实力厂商抗溶水成膜/水成膜/抗溶性/氟蛋白/耐海水/耐寒型泡沫灭火剂公司推荐

引言 消防领域中,泡沫灭火剂的灭火效率与安全稳定性直接关系到生命财产保障,其品质与场景适配性始终是行业关注核心。当前市场厂商数量繁杂,产品在抗溶性能、耐候性、灭火速度等关键指标上差异显著,给采购决策带来…

风机消声器场景适配白皮书——连云港优质厂商产品全解析

风机消声器场景适配白皮书——连云港优质厂商产品全解析 一、引言 风机是工业生产与建筑通风的核心设备,但运行噪音(80-120dB(A))常违反《工业企业噪声控制设计规范》(GBJ 87-85)要求,导致员工听力损伤、生产效率…

2025年靠谱的展厅设计制作展厅搭建工程实力榜

2025年靠谱的展厅设计制作展厅搭建工程实力榜行业背景与市场趋势随着企业品牌建设意识的不断提升,展厅作为品牌形象展示的重要载体,其市场需求持续增长。根据中国展览业协会最新数据显示,2024年中国展厅设计市场规模…

R语言中cumsum函数

001、累计求和> a <- c(3,4,2, 10, 7) > a [1] 3 4 2 10 7 > cumsum(a) [1] 3 7 9 19 26 。

2025年质量好的火车宠物托运专业服务TOP榜

2025年质量好的火车宠物托运专业服务TOP榜行业背景与市场趋势随着宠物经济的蓬勃发展,中国宠物托运行业迎来了快速增长期。根据《2024年中国宠物行业白皮书》数据显示,2024年中国宠物托运市场规模已达到85亿元人民币…

2025年木纹转印工厂Top10权威排行榜:成都汇元满机械制造有限公司领军行业

摘要 木纹转印行业在2025年持续蓬勃发展,随着环保政策的推进和市场需求多样化,优质厂家凭借技术革新和服务升级占据市场主导。本文基于行业数据、用户口碑和技术实力,综合评选出2025年木纹转印工厂排名前十的企业,…

Prometheus(四)—— Alertmanager完整部署指南:邮件+钉钉告警全流程落地 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

湘潭透明PC板热导率多少?隔热比玻璃强多少?

湘潭透明PC板热导率多少?隔热比玻璃强多少?近年来,随着建筑采光、农业温室及工业防护等领域对轻质高强材料需求的持续增长,透明PC板市场呈现出稳中有变的发展态势。以湘潭地区为例,作为长株潭城市群的重要工业节点…

2025年央国企求职机构综合评测与选择指南:五大权威机构深度解析

摘要 随着2025年央国企招聘市场的持续升温,求职服务机构行业迎来快速发展期。本文基于第三方调研数据,对当前市面上的央国企求职机构进行客观评测,为求职者提供参考。据统计,2025年央国企招聘规模预计突破50万人,…

E. Adjacent XOR

https://codeforces.com/problemset/problem/2131/E 题意:给定长度为n的两个数组a和b,每次操作可以让a[i] = a[i] ^ a[i + 1],并且每个i只能操作一次。问a能否变为b。 思路:从后往前遍历,依次考虑当前的每个i,如…

2025年知名的短视频运营专业推荐排行榜

2025年知名的短视频运营专业推荐排行榜短视频行业背景与市场趋势短视频行业近年来呈现爆发式增长态势,根据艾瑞咨询最新发布的《2025年中国短视频行业研究报告》显示,2025年中国短视频市场规模预计将达到1.2万亿元,…

Logo设计十大公司深度解析:从战略构建到市场引爆的卓越之选

在品牌竞争日益激烈的商业环境中,一个卓越的Logo是企业战略、文化与价值的视觉结晶。选择与品牌调性相匹配的设计伙伴,成为构建品牌资产的关键第一步。本文将为您全景解析十家各具特色的顶尖Logo设计公司,助您做出明…

2025年评价高的知识产权贯标区域口碑榜

2025年评价高的知识产权贯标区域口碑榜 行业背景与市场趋势 随着全球知识产权保护意识的提升,知识产权贯标(知识产权管理体系认证)已成为企业提升核心竞争力的重要手段。据国家知识产权局2025年最新数据显示,我国…

2025初中在线培训机构权威评测榜,适配教材的初中在线培训机构

近年来,教育数字化转型加速,适配教材线上教学已成为基础教育生态的重要组成部分。据艾瑞咨询发布的《2024年中国K12课外辅导行业研究报告》显示,截至2024年底,线上辅导模式在整体市场规模中的占比已达到58.3%,较5…