Spring_day02

:构造方法注入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.在使用构造方法进行注入的时候。配置文件中的构造参数。必须和实体类中的构造参数匹配。若是不匹配则报错对象

 

 

SpringIOCDI的意义:继承

1.若是在架构中webservicedao 应该尽量的保持松耦合。若是各层之间紧耦合对于后期代码的维护,至关困难。

 

2.Spring能够经过配置文件的形式。动态的实现松耦合。若是未来具体的实现类发生了改变。只须要修改配置文件便可。无需手动修改代码。提升 了代码的开发效率和维护效率。而且其中全部的注入都是面向接口的,这样作能最大程度保证代码的灵活性。

 

Parent属性

parent="baseDao"

说明:Spring容器在建立对象的时候会根据bean的个数来建立对象。但是若是没有指明parent属性。指明子父级关系。那么Spring容器在建立对象的时候就不会自动的维护。因此在bean中若是有子父级关系。须要经过parent标签来指明。

2parent属性的使用场景:

对于架构层级而言。经过一些基础类,使用接口或父类继承的形式来达到简化代码的目的。可使用parent属性

 

 

 

:自动的装配过程

若是类中的属性是引用类型,而且配置文件中有相应bean的配置。则能进行自动的装配。(自动的注入)

1autowire

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注入的原理

首先会根据属性的名称找对应的beanID,若是能正确匹配则正确注入。若是匹配不成功,则去找对应的class形式,经过class与bean中的class匹配。若是匹配则注入。不然匹配不成功,则报错

2.@Resource

用法和@Autowired如出一辙,@Resource(name="Bean的ID")

一旦指明beanID,那么就会严格按照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>

要指明mapID 这个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为了知足分层的须要 发明了三个注解 分别代码不一样的层级

相关文章
相关标签/搜索