当开发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包则需要注明版本号
在没有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有2x和3x,数据库这里对我们代码影响不大,但是驱动也有2x和3x
这两套版本的区别就非常大了,2x项目直接升级到3x,会导致
先写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