spring框架之DI

一、以前属性复制的方法(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类型赋值、ListSetMap(复杂类型)

<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=”引用beanID”  value=”固定的值”  type=”类型”></>

</bean>

Indexname指定的是同一个对象:可以只写其中一个(建议使用index),但当indexname一起写时,两个都必须正确。

原因:当没有关联源码时,形式参数可能会变成arg的形式,导致name属性赋值失败,所以建议使用index进行赋值

注:因为是使用的无参构造进行赋值,则类中必须要有无参的构造方法。

 

三、

问:在每一个都需要数据源,如果没有简化的配置,就需要重复的配置,如何来简化呢?

答:写一个基类,在基类中写一个数据源,让所有的实现类继承此基类。  基类可以不创建其对象  可以添加abstract=true以不创建其对象

注:是在bean时需要写上parent属性 指明子父级的关系。(Spring在创建对象的时候不知道需要维护子父级的关系,所以需要明确的指明

 

标签:

Abstractrue

Parent

Autowire:  简化xml配置,就不需要写引用类型的赋值

用法:【底层是根据set方法来做的(找到所有的set方法(setPerson==>找到对应的属性(person==>bean中找id=person的类)

 autowire=byName”根据属性的名称和beanID进行匹配。】

Autowire=byType”通过类型进行匹配,【找到所有的set方法===>找到对应的属性(person==>根据属性去找类型===>根据类型去找bean中的class

全局的default-autowire

 

属性注解注入步骤:1.xml头中引入Context头文件:xmlnscontext="http://www.springframework.org/schema/context"

  2.开启属性<context:annotation-config/>注解开关

  3.在属性上使用对应的注解@value(给基本类型和String进行赋值)、@autowired(给引用类型进行赋值)

    autowired的注入原理:会根据属性的名称去bean中找到对应的ID,如果正确匹配则进行注入;如果匹配不成功则会匹配

类型(class),匹配成功进行注入,如果匹配不成功则报错

扩充:如果想指定beanID进行注入可以是用Qualifier(value=“”),当@autowired@Qualifier两个一起用时,只有@Qualifier生效。

@Resource用法与@autowired一致     当使用@Resourcename=“”)表名使用ID注入与@autowired@Qualifier用法一样。

 

 

类的注解:(以后不需要在写set方法)

使用步骤:1.开启<context:component-scan base-package=”domain,dao”/> 类扫描(包含了属性的注解) 多个包之间用“,”号隔开。

     2.在需要创建对象的类上写@Component注解    注:开启了类扫描属性的开关也相当于已经开

【实现原理:通过类扫描器找到相应的包,扫描所有包下的类,如果有Component注解,就个这个类创建对象,对象的id就是类名,

首字母小写,存入Map中供我们使用。】

Component的属性value值,@componentvalue=p”)则会将对应的类的Id改成p

 

注解的分层:@RepositoryDAO层使用

@ServiceService层使用

@Controller供控制层使用  作用与component一致。

 

单例、多例 懒加载也能通过注解来做。

@Scope("prototype")

@Lazytrue)?

 

动态读取外部文件:将配置信息加载到容器中

!!!<context:property-placeholder location=”classpath:spring.properties”>

使用时${key}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值