Spring自动注入与加载配置文件
在spring配置文件中,对引用属性进行自动注入。
它和加载配置文件一起出现会出现问题。
一、自动注入
(一)、配置方式
1、在<bean>中通过 autowire属性配置,只对这个bean生效
2、在<beans>中通过default-autowire属性配置,对标签内的所有bean有效。
(二)、autowire取值
1、no,默认的不自动注入。
2、byName,通过比较属性名和容器内的bean的id值是否一致,若一致则自动注入。
3、byType,通过比较属性所属的类,和容器内的bean所属类是否一致,若一致则自动注入,若容器内有多个同类型的bean,则会注入失败并抛出异常。
4、constructor,通过构造器进行自动注入,构造器中的参数名和容器内的bean的id值一致,自动注入。(底层使用byName)
二、资源文件加载
(一)、准备资源文件
db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:53306/lurenjia_web
jdbc.username=root
jdbc.password=123456
(二)、配置资源文件
在spring配置文件中使用标签
<!--配置资源文件--> <context:property-placeholder location="classpath:db.properties"></context:property-placeholder>
(三)、获取配置文件信息
使用${键名}获取
<!--等价于dataSource标签,数据库连接配置--> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${jdbc.driver}"></property> <property name="url" value="${jdbc.url}"></property> <property name="username" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean>
三、冲突
原理:
全局配置的自动注入,会把创建对象的优先级跳到最高。
冲突:
配置文件还没有读取,就开始创建对象,必然会创建失败。
解决:
对于依赖配置文件创建的对象不要使用自动注入,例如数据库操作的对象。