二、spring中装配bean
在spring框架中提供了三种 bean的装配方式,当然这三种装配方式是可以灵活的进行组合使用的,项目中使用最多的是自动装配bean的方式,也就是通过注解的方式进行bean的装配,一下是四种装配方式的介绍:
一、自动化装配bean
spring从两个角度实现自动化装配:
(1)组件扫描(component scanning):spring会自动发现应用上下文中所创建的bean
注:组件扫描在项目中一般是使用XML文件中的启用组件扫描:
1 | <context:component-scan base- package = "com.ssc.controller" /> |
但是,在spring中使用注解的方式启用组件扫描也是可以的,就是@ComponentScan注解,默认会扫描与配置类相同的包。
1 2 3 4 5 6 7 8 9 | package soundsystem; import org.springframework.context.annotation.componentScan; import org.springframework.context.annotation.Configuration; @configuration @componentScan public class CDPlayerConfig{ /*****/ } |
可以为@ComponentScan注解设置属性的:
1)@ComponentScan(basePackage="soundsystem")
2)@ComponentScan(basePackage={"soundsystem",“video”})
3)@ComponentScan(basePackageClasses={CDPlayer.class,DVDplayer.class}) 这种是扫描某些特定的class类
(2)自动装配(autowiring):spring自动满足bean之间的依赖
自动装配就是让spring自动满足bean依赖的一种方法,在满足的过程中,会在spring应用上下文中寻找匹配某个bean需求的其他bean。
自动装配的注解@Autowired 是spring特有的注解,主要有:
1)bean的声明上加@Autowired
1 2 | @Autowired private CompactDisc cd; |
2)构造器
1 2 3 4 | @Autowires public CDPlayer(CompactDisc cd){ this .cd = cd; } |
3)setter方法或者其他方法
1 2 3 4 5 6 7 8 9 | @Autowires public void setCompactDisc(CompactDisc cd){ this .cd = cd; } @Autowires public void insertDisc(CompactDisc cd){ this .cd = cd; } |
二、通过Java代码装配bean
尽管在很多场景下通过组件扫描和自动装配实现spring的自动化配置是更为推荐的方式,但有时候自动化配置的方案行不通,因此需要明确配置spring。比如说,你想要将第三方库中的组件装配到你的应用中,在这种情况下,是没有办法在它的类上使用@Component和@Autowired注解的,因此就不能使用自动化装配方案了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | package soundsystem; import org.springframework.context.annotation.Configuration; @Configuration public class CDPlayConfig{ //@Bean注解会告诉spring这个方法会返回一个对象,该对象要注册为spring应用上下文中的bean @Bean public CompactDisc sgtPeppers(){ return new SgtPeppers(); } //cdPlayer()方法同样使用了@Bean注解,这表明这个方法会创建一个bean实例并将其注册到spring应用上下文中去 @Bean public CDPlayer cdPlayer(){ return new CDPlayer(sgtPeppers()); } //cdPlayer()方法请求一个CompactDisc作为参数,当spring调用cdPlayer()创建CDPlayer bean的时候,它会自动装备一个CompactDisc到配置方法之中 @Bean public CDPlayer cdPlayer(CompactDisc compactDisc){ return new CDPlayer(compactDisc); } //cdPlayer()方法请求一个CompactDisc作为参数,当spring调用cdPlayer()创建CDPlayer bean的时候,它会自动装备一个CompactDisc到配置方法之中 @Bean public CDPlayer cdPlayer(CompactDisc compactDisc){ CDPlayer cdPlayer = new CDPlayer(compactDisc); cdPlayer.setCompactDisc(compactDisc); return cdPlayer; } } |
三、通过XML装配bean
这里写一下在XML文件中的几种配置方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | //简单的bean的声明 <bean id= "compactDisc" class = "soundsystem.SgtPeppers" /> //借助构造器注入初始化bean <bean id= "cdPlayer" class = "soundsystem.CDPlayer" > <constructor-arg ref= "compactDisc" /> </bean> <bean id= "cdPlayer" class = "soundsystem.CDPlayer" c:rd-ref= "compactDisc" /> //将字面量注入到构造器中 注意属性为集合的时候可以使用list set标签 <bean id= "cdPlayer" class = "soundsystem.BlackDisc" > <constructor-arg value= "此时此刻" /> <constructor-arg value= "许巍" /> <constructor-arg> <list> <value>爱情</value> <value>空谷幽兰</value> <value>灵岩</value> <value>此时此刻</value> <value>救赎之旅</value> </list> </constructor-arg> </bean> //将字面量注入到属性中 <bean id= "cdPlayer" class = "soundsystem.BlackDisc" > <property name= "title" value= "此时此刻" /> <property name= "artist" value= "许巍" /> <property name= "tracks" > <list> <value>爱情</value> <value>空谷幽兰</value> <value>灵岩</value> <value>此时此刻</value> <value>救赎之旅</value> </list> </property> </bean> |
四、导入和混合装配
(1)在JavaConfig中引入XML配置package soundsystem;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | import org.springframework.context.annotation.Bean; import org.springgramework.context.annotation.Configration; @Configration public class CDConfig{ @Bean public CompactDisc compactDisc(){ return new SgtPeppers(); } } package soundsystem; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configration; import org.springframework.context.annotation.Import; //使用@Import注解导入CDConfig @Configration @Import (CDConfig. class ) public class CDPlayerConfig{<br> @Bean public CompactDisc cdPlayer(CompactDisc compactDisc){ return new SgtPeppers(compactDisc); } } package soundsystem; import org.springframework.context.annotation.Configration; import org.springframework.context.annotation.Import; //创建soundsystemConfig,使用@Import注解将两个配置类组合在一起 @Configration @Import (CDConfig. class ,CDPlayerConfig. class ) public class soundsystemConfig{ } package soundsystem; import org.springframework.context.annotation.Configration; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.ImportResource;<br> //创建soundsystemConfig,使用@Import注解和@ImportResource将配置类和XML文件组合在一起 @Configration @Import (CDConfig. class ) @ImportResource ( "classpath:cd-config.xml" ) public class soundsystemConfig{ } |
(2)在XML配置中应用JavaConfig
1 2 3 4 5 6 7 8 9 10 11 12 13 | //import 引入XML文件 < import resource= "cd-config.xml" /> <bean id= "cdPlayer" class = "soundSystem.CDPlayer" c:cd-ref= "compactDisc" > </bean> //将Javaconfig 类导入到XML文件中 <bean class = "soundsystem.CDConfig" /> <bean id= "cdPlayer" class = "soundSystem.CDPlayer" c:cd-ref= "compactDisc" > </bean> //XML文件中配置JavaConfig类和XML文件的组合 <bean class = "soundsystem.CDConfig" /> < import resource= "cdplayer-config.xml" /> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题
· 记一次 .NET某固高运动卡测试 卡慢分析
· 微服务架构学习与思考:微服务拆分的原则
· 记一次 .NET某云HIS系统 CPU爆高分析
· 如果单表数据量大,只能考虑分库分表吗?
· 7 个最近很火的开源项目「GitHub 热点速览」
· DeepSeekV3:写代码很强了
· 记一次 .NET某固高运动卡测试 卡慢分析
· Visual Studio 2022 v17.13新版发布:强化稳定性和安全,助力 .NET 开发提
· MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题