⭐️前面的话⭐️
本文已经收录到《Spring框架全家桶系列》专栏,本文将介绍在Spring环境下基于注解完成第三方对象的管理。
📒博客主页:未见花闻的博客主页
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📌本文由未见花闻原创,CSDN首发!
📆首发时间:🌴2023年5月10日🌴
✉️坚持和努力一定能换来诗与远方!
💭推荐书籍:📚《无》
💬参考在线编程网站:🌐牛客网🌐力扣🌐acwing
博主的码云gitee,平常博主写的程序代码都在里面。
博主的github,平常博主写的程序代码都在里面。
🍭作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!
1.前言
前面我们已经在基于XML的基础上对数据库连接池进行了管理,本质上就是将对应的DataSource
对象实例化到Bean容器当中,然后进行调用即可。
其实思路都是一样的,只不过实现的思路不同罢了。
首先准备一下环境,导入Druid数据库连接池依赖,创建properties配置文件,创建项目的配置类。
相关依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.17</version>
</dependency>
项目结构:
2.基于注解完成对第三方对象的管理
第一步,导入相关依赖的包
主要包括spring依赖,Druid依赖,因为连接Druid数据库连接池属于配置操作,所以我们将它放入配置类当中。
第二步,在配置类中配置dataSource
注意该方法的返回值就是要创建的Bean对象类型
@Bean注解的作用是将方法的返回值制作为Spring管理的一个bean对象。
注意:不能使用DataSource dataSource = new DruidDataSource()
因为DataSource接口中没有对应的setter方法来设置属性。
第三步,获取第三方Bean对象
运行结果:
OK,大功告成,简单吧,留个小任务,尝试配置c3p0数据库连接池,其实步骤是一模一样的。
如果有多个bean要被Spring管理,直接在配置类中多些几个方法,方法上添加@Bean注解即可。
如果把所有的第三方bean都配置到Spring的配置类SpringConfig
中,虽然可以,但是不利于代码阅读和分类管理,所有我们就想能不能按照类别将这些bean配置到不同的配置类中?
答案是肯定的,在实际的开发过程当中,并不推荐将所有的配置都配置到Spring的配置类当中,更建议针对不同模块在不同的配置类上进行配置,我们可以再建一个配置类JdbcConfig
类来进行配置。
还有一个问题,我们配置的内容好像并不是一尘不变的吧,所以需要导入properties文件使用@Value注解引入配置。
第四步,新建数据库连接池专用配置类
将JdbcConfig放入扫描的包下,即可。
运行程序,发现是可以正常运行的,但是在工程中一般不推荐通过包扫描的方式导入配置类,如果在同一个包下,有些配置类想导入,有些不想呢?
所以推荐使用@Import注解将配置类导入到Spring配置当中,并且该方案不要求在JdbcConfig
类上加上@Configuration注解。
运行结果:
注意:
- 扫描注解可以移除
- @Import参数需要的是一个数组,可以引入多个配置类。
- @Import注解在配置类中只能写一次,下面的方式是不允许的。
@Configuration
//@ComponentScan("com.annotation.bean.demo.config")
@Import(JdbcConfig.class)
@Import(Xxx.class)
public class SpringConfig {}
- 如果需要导入多个配置类,按照数组的方式将配置类依次写上。
@Import({JdbcConfig.class, Xxx.class, ...})
第五步,换用properties文件加载
配置时,不能将配置信息写死,下面来导入properties文件的属性。
我们在JdbcConfig类中,添加需要使用的属性,然后使用@Value注解将properties文件当中的属性导入,再在方法当中将值导入到DataSource。
配置JdbcConfig:
运行结果:
我们在配置DataSource对象时,我们需要的参数都是简单类型参数,可以使用添加属性的方式基于@Value注解注入对应的参数。
那如果我们需要一个对象的时候应该怎么办呢?
我们可以加上@Bean注解,然后在方法的形参列表当中加入所需要的类型,这样spring就会自动去容器当中去寻找,如果找到了,就会将对象注入进去。
我们创建一个dao
包,里面写一个实体类,写一个save
输出一句话。
将这个类型加到dataSource方法列表:
这样就可以实现在方法当中对象的注入了,当然也可以建一个对象属性使用@Resoure注解或@Autowired注解,然后在方法中引用, 但是这样直接写参数好像更简便一点吧。
3.总结
知识点1:@Bean
名称 | @Bean |
---|---|
类型 | 方法注解 |
位置 | 方法定义上方 |
作用 | 设置该方法的返回值作为spring管理的bean |
属性 | value(默认):定义bean的id |
知识点2:@Import
名称 | @Import |
---|---|
类型 | 类注解 |
位置 | 类定义上方 |
作用 | 导入配置类 |
属性 | value(默认):定义导入的配置类类名, 当配置类有多个时使用数组格式一次性导入多个配置类 |
前面我们已经完成了XML配置和注解的开发实现,至于两者之间的差异,咱们放在一块去对比回顾下: