:构造方法注入web
index="参数的位置 从0开始"spring
name="参数的名称"安全
ref="对象的引用" value="具体的赋值" 两者不能同时出现架构
<constructor-arg index="0" name="name" value="TOM猫"></constructor-arg>dom
说明:spa
1.经过构造方法为属性赋值时,可使用index 或者是name属性为属性赋值。index的起始值为0 ,name属性就是参数的名称。用的时候两者取其一就行。不过一般状况下使用Index最为安全。component
ref是注入的引用类型。value注入的是具体数值,两者不能共存取其一。xml
2.在使用构造方法进行注入的时候。配置文件中的构造参数。必须和实体类中的构造参数匹配。若是不匹配则报错对象
:SpringIOC和DI的意义:继承
1.若是在架构中web、service、dao 应该尽量的保持松耦合。若是各层之间紧耦合对于后期代码的维护,至关困难。
2.Spring能够经过配置文件的形式。动态的实现松耦合。若是未来具体的实现类发生了改变。只须要修改配置文件便可。无需手动修改代码。提升 了代码的开发效率和维护效率。而且其中全部的注入都是面向接口的,这样作能最大程度保证代码的灵活性。
:Parent属性
parent="baseDao"
说明:Spring容器在建立对象的时候会根据bean的个数来建立对象。但是若是没有指明parent属性。指明子父级关系。那么Spring容器在建立对象的时候就不会自动的维护。因此在bean中若是有子父级关系。须要经过parent标签来指明。
2:parent属性的使用场景:
对于架构层级而言。经过一些基础类,使用接口或父类继承的形式来达到简化代码的目的。可使用parent属性
:自动的装配过程
若是类中的属性是引用类型,而且配置文件中有相应bean的配置。则能进行自动的装配。(自动的注入)
1:autowire
1.1spring中能够经过autowire属性实现自动装配。未来不须要手动的在写property可以节省代码。
1.2使用装配过程必须添加set方法。不然装配失败 对象属性为null
2.装配的原理
2.1autowire="byName"
使用spring在进行装配的时候会先检查全部的set方法
setStudent====>student======>拿到student之后会根据bean中的ID进行匹配。若是匹配成功则能正确的注入。若是匹配不成功则为null。
2.2autowire="byType"
使用spring在进行装配的时候会先检查全部的set方法
setStudent====>student===>拿到对应的Class形式====>根据bean中的class类型进行匹配。若是匹配成功则能正确注入。
:Spring的属性注解
Spring为咱们提供了属性注解的方式,可以简化开发。
1.@Autowired注入的原理
首先会根据属性的名称找对应的bean的ID,若是能正确匹配则正确注入。若是匹配不成功,则去找对应的class形式,经过class与bean中的class匹配。若是匹配则注入。不然匹配不成功,则报错。
2.@Resource
用法和@Autowired如出一辙,@Resource(name="Bean的ID")
一旦指明bean的ID,那么就会严格按照bean的ID去查找。不会再根据属性的ID和类型查找。
3.@Autowired和@Qualifier(value="s1")一块儿使用的效果和@Resource(name="ID")效果相同。
一般状况下 咱们使用@Resource注解
:类的注解
1.开启类扫描
<context:component-scan base-package="domain"/>
说明:开启类扫描之后会自动的扫描给定的包及其子包,若是是多个包之间用“,”号隔开
2:@Component注解使用的原理
1.首先Spring在进行xml解析时 会解析包扫描的标签。根据标签指定的包进行扫描。而后会到指定的包下查找那些类上有@Component注解,找到相应的注解后,会给这个类建立一个对象,建立好对象以后存入MAP中,会根据类的名称生成相应的ID(首字母小写其余不变)。
看成KEY存入map中。
2.ID生成的原则
若是第二个字母是大写的 ABcc ==> 转化之后的ID就是ABcc
若是第二个字母小写 Abcc====>转化之后ID就是abcc
3:@Value注解
@Value注解能够注入字符串和基本类型只须要将注入的值写到
@Value(value="张三")便可。就能完成注入。
若是属性值只有value那么value能够省略不写。
3.1复杂类型的注入
父类类型的注入须要引入一个util这样的标签
<util:map id="map">
<entry key="1" value="一"></entry>
<entry key="2" value="TOM猫"></entry>
<entry key="3" value="Jerry老鼠"></entry>
</util:map>
要指明map的ID 这个ID就是经过@Value("#{@ID}") ID应该保持一致。
4:动态数据注入---引入外部配置文件
<context:property-placeholder location="classpath:/tom.properties"/>
原理说明:
spring进行解析的时候会根据指定的路径扫描对应的配置文件,扫描完成之后将配置文件的键值对进行保存。保存到spring容器中。须要使用的时候经过@Value("${key}")来获取相应的value值,实现了动态的注入效果。
5:类扫描的包容性
在开启类扫描的时候,会默认的开启属性注解。因此属性注解能够省略。
6:类的注解指明ID
@Component(value="TomDao")
说明:使用这个注解的时候默认的条件下会根据类的名称按照首字母小写,自动的生成相应的Bean的ID
若是有value值 那么就会按照value指定的名称当作bean的ID
7:Spring的分层标识的注解
@Repository(value="TomDao") dao层
@Service("TomService") service层
@Controller 控制层
说明:Spring为了知足分层的须要 发明了三个注解 分别代码不一样的层级