spring框架之DI
2016-10-13 13:03
106 查看
一、以前属性复制的方法(1、通过构造方法
2、通过set方法)
1.使用Spring容器利用其set方法给属性赋值<bean id="" class="">
<property name="addr(属性名)" value="北京昌平(值)"></property> 实体类中需要有对应的set方法
</bean> value给基本类型赋值
底层调用的是set方法 与实体类中的属性没有关系,是通过set方法建立的链接。
底层的实现:根据<property name="addr(属性名)">找到实体类中的setName()方法====然后去掉set变成name。通过形参传递参数给实参赋值
2.使用Spring容器给对象赋值
<bean id="" class="">
<property name="student(对象名)"
ref=”student(对象的id)”></property>实体类中需要有对应的set方法
ref为引用类型赋值value赋值固定值
</bean> ref给注入的对象赋值
<bean id=”student” class=””></bean>
3.使用Spring容器给String类型赋值、List、Set、Map(复杂类型)
<bean id="" class="">
<property name="student(对象名)" >
<array>
<value>hahaha</value> 写String类型的set方法
</array>
</property> 实体类中需要有对应的set方法
</bean>
<list>
<value>hahaha</value> 写list类型的set方法
</list>
<set>
<value>去重功能</value>
</set>
<map>
<entry key=”” value-ref=””></entry>
<entry key=”” value=””></entry>
</map>
Properties prop
<property id=””>
</property>
二、通过构造方法赋值
模板:当不一定全有<bean id="" class="">
<Constructor-arg index=”参数的位置(从0开始)” name=”参数的名称” ref=”引用bean的ID” value=”固定的值” type=”类型”></>
</bean>
Index与name指定的是同一个对象:可以只写其中一个(建议使用index?),但当index与name一起写时,两个都必须正确。
原因:当没有关联源码时,形式参数可能会变成arg的形式,导致name属性赋值失败,所以建议使用index进行赋值
注:因为是使用的无参构造进行赋值,则类中必须要有无参的构造方法。
三、
问:在每一个都需要数据源,如果没有简化的配置,就需要重复的配置,如何来简化呢?答:写一个基类,在基类中写一个数据源,让所有的实现类继承此基类。 基类可以不创建其对象 可以添加abstract=true以不创建其对象
注:是在bean时需要写上parent属性
指明子父级的关系。(Spring在创建对象的时候不知道需要维护子父级的关系,所以需要明确的指明)
标签:
Abstrac:true
Parent:
Autowire: 简化xml配置,就不需要写引用类型的赋值
用法:【底层是根据set方法来做的(找到所有的set方法(setPerson)==>找到对应的属性(person)==>去bean中找id=person的类)
autowire=“byName”根据属性的名称和bean的ID进行匹配。】
Autowire=“byType”通过类型进行匹配,【找到所有的set方法===>找到对应的属性(person)==>根据属性去找类型===>根据类型去找bean中的class】
全局的default-autowire
属性注解注入步骤:1.在xml头中引入Context头文件:xmlns:context="http://www.springframework.org/schema/context"
2.开启属性<context:annotation-config/>注解开关
3.在属性上使用对应的注解@value(给基本类型和String进行赋值)、@autowired(给引用类型进行赋值)
【autowired的注入原理:会根据属性的名称去bean中找到对应的ID,如果正确匹配则进行注入;如果匹配不成功则会匹配
类型(class),匹配成功进行注入,如果匹配不成功则报错】
扩充:如果想指定bean的ID进行注入可以是用Qualifier(value=“”),当@autowired与@Qualifier两个一起用时,只有@Qualifier生效。
@Resource用法与@autowired一致 当使用@Resource(name=“”)表名使用ID注入与@autowired与@Qualifier用法一样。
类的注解:(以后不需要在写set方法)
使用步骤:1.开启<context:component-scan base-package=”domain,dao”/>
类扫描(包含了属性的注解) 多个包之间用“,”号隔开。
2.在需要创建对象的类上写@Component注解 注:开启了类扫描属性的开关也相当于已经开
【实现原理:通过类扫描器找到相应的包,扫描所有包下的类,如果有Component注解,就个这个类创建对象,对象的id就是类名,
首字母小写,存入Map中供我们使用。】
Component的属性value值,@component(value=“p”)则会将对应的类的Id改成p。
注解的分层:@Repository供DAO层使用
@Service供Service层使用
@Controller供控制层使用 作用与component一致。
单例、多例 懒加载也能通过注解来做。
@Scope("prototype")?
@Lazy(true)?
动态读取外部文件:将配置信息加载到容器中
!!!<context:property-placeholder location=”classpath:spring.properties”>
使用时“${key}”
相关文章推荐
- Spring框架入门01-理解Spring的DI
- Spring框架初解一----IOC(控制反转)及DI(依赖注入)
- Spring框架第三篇之基于XML的DI注入
- Spring框架总结,控制反转(IOC),依赖注入(DI),面向切面编程(AOP)
- (九)Spring框架——依赖注入(DI)
- Spring框架核心介绍:DI和AOP
- Spring框架IOC,DI概念理解
- Spring框架 之 反射机制简单实现基于XML标签的IOC与DI
- Spring框架核心理论 AOP|DI
- 大数据WEB阶段Spring框架(一)IOC控制反转、DI注入依赖
- 12-25 Spring框架控制反转(IOC),依赖注入(DI)
- 解读超轻量级DI容器-Guice与Spring框架的区别【转载】
- Spring框架源码学习---DI的实现
- Spring框架第四篇之基于注解的DI注入
- Spring框架中IOC控制反转和DI依赖注入区别
- Spring框架——IOC&DI
- spring框架的控制反转(IoC)和注入依赖(DI)
- Spring框架xml配置文件 复杂类型属性注入——数组 list map properties DI dependency injection 依赖注入——属性值的注入依赖于建立的对象(堆空间)
- 使用Spring框架入门一:基于XML配置的IOC/DI的使用
- Spring框架,个人笔记--IOC,DI,AOP