hjr-SpringBoot:springboot 与 spring版本 与 mongodb spring-data和注入bean的方式

施自珍
2023-12-01

当开发springboot项目时,与springmvc项目对比 pom配置中的各种版本 会使人疑惑,还有springboot bean的注入方式也有多种。

版本

用mongodb对版本进行解释
比较下面三个maven pom依赖

1、spring-boot-starter-data-mongodb   --- springboot
2、spring-data-mongodb  --- spring
3、mongo-java-driver   --- 普通java包

上面三种方式都可以实现maven引用mongodb驱动 jar包。

1的特点是不需要写版本号,写了反而可能版本冲突报错,版本号会根据springboot的版本自动生成合适的版本。

2 如果在spring boot项目中也不用写版本号,版本号会根据spring自动生成一个适合的版本,而spring又会根据spring boot自动生成合适的版本,
而如果在spring项目中则要自己根据spring版本去判断改用什么版本号。

3则必须写版本号,版本号可以随意写。

其中springboot的版本最新版是2.x,springboot 1x自身 和 2x自身相差不大,但是1x和2x相差很大。很多1x的项目不要轻易升级2x,但是在1x自身的各个版本之间可以升级。

springboot 1x 会自动生成 spring的 3x 版本号

所以在springboot项目中有spring-boot springframework 等标识的依赖都不用写版本号,而如果自己引用的比如fastjson等jar包则需要注明版本号

注入bean

在没有spring的时候,创建java对象使用Bean bean = new Bean();

在有spring的时候,我们用@Autowired private Bean bean 自动注入对象
springboot在注入上也没区别,有区别的是在bean的声明上,如果不先声明bean,直接用注解注入会报空指针错误。

spring 我们用.xml文件声明,和注解声明
springboot 我们用XXXConfig.java 配置类声明和注解声明,然后在application中配置扫描范围,或者默认扫描当前文件下级的全部包

两者都可以用注解声明bean,比如 @Component(所有类都可以,不规范)@service(声明服务,规范) @Repository(声明DAO,规范)等

mongodb

mongodb有2x和3x,数据库这里对我们代码影响不大,但是驱动也有2x和3x
这两套版本的区别就非常大了,2x项目直接升级到3x,会导致

  1. 部分代码报错
  2. 配置文件报错

先写application.properties配置文件,然后

其中2x的配置,主要是mongo

	<mongo:mongo id="mongo"  host="${mongo.host}" port="${mongo.port}"   />
<bean id="userCredentials" class="org.springframework.data.authentication.UserCredentials">-->
		<constructor-arg name="username"  value="${mongo.username}"/>
		<constructor-arg name="password"  value="${mongo.password}"/>
	//     此处为用户名和密码,默认为空 
	</bean>

3x的配置,主要是mongo-client,并且3x不支持 无密码的认证

<mongo:mongo-client id="mongoClient"  host="${mongo.host}" port="${mongo.port}" credentials="${mongo.username}:${mongo.password}@${mongo.dbname}">
		<mongo:client-options
				connections-per-host="${mongo.connectionsPerHost}"
				min-connections-per-host="${mongo.minConnectionsPerHost}"
				threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}"
				connect-timeout="${mongo.connectTimeout}"
		/>
	</mongo:mongo-client>

	<mongo:db-factory id="mongoDbFactory"
					  dbname="${mongo.dbname}"
					  mongo-ref="mongoClient"/>

	<mongo:template id="mongoTemplate" db-factory-ref="mongoDbFactory" write-concern="NORMAL"/>

最后都是通过

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
	protected MongoOperations mongoTemplate = (MongoOperations) ctx.getBean("mongoTemplate");

方式获取bean。

如果我们使用springboot,XXXConfig.java文件的方式声明bean,就固定使用
spring.data.mongodb.uri=mongodb://name:pass@ip:port/database?maxPoolSize=256
这种配置写到application.properties文件里,
然后再配置类中可以return bean,或者不做配置类,直接注入mongoTemplet就可以

	@Autowired
	MongoTemplate  mongoTemplate 
	
 类似资料: