标签:web 父类继承 数值 注入 杂类 路径 property 字符 查找
:构造方法注入
index="参数的位置 从0开始"
name="参数的名称"
ref="对象的引用" value="具体的赋值" 二者不能同时出现
<constructor-arg index="0" name="name" value="TOM猫"></constructor-arg>
说明:
1.通过构造方法为属性赋值时,可以使用index 或者是name属性为属性赋值。index的起始值为0 ,name属性就是参数的名称。用的时候二者取其一就行。不过通常情况下使用Index最为安全。
ref是注入的引用类型。value注入的是具体数值,二者不能共存取其一。
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为了满足分层的需要 发明了三个注解 分别代码不同的层级
标签:web 父类继承 数值 注入 杂类 路径 property 字符 查找
原文地址:http://www.cnblogs.com/buyucgb/p/6021543.html