spring核心配置IOC/DI依赖注入(depedency injection)

依赖注入(depedency injection)
IOc/DI
IOC的作用:降低程序间的耦合(依赖关系)
DI:当类中需要用到其他类的对象的时候,由spring容器为我们提供,只需要配置好依赖关系即可
依赖关系的维护称为依赖注入
依赖注入的数据,分三类:
1.简单数据类型(基本数据类型以及封装类型和string)
注:spring对boolean类型进行容器错处理,值可以是true/false yes/no on/off 1/0 代表真/假
2.其他的bean类型(需要在spring中配置过的bean)
3.复杂数据类型(数组/集合/映射/property)

依赖注入的方式,分为三种:
1.使用构造方法进行注入:
spring使用构造方法进行注入时,使用constructor-arg 标签
属性:
index: 用于指定要注入的数据给构造方法中指定索引为参数赋值,索引的位置从0开始
name:用于指定给构造方法中指定名称的参数赋值
type:用于指定要注入的数据类型
value:用于提供基本类型的数据和String类型的数据
ref:用于指定其他的bean类型的数据
构造方法注入优势:
在获取bean对象时,以来的对象一定存在,可能为空,否则bean对象无法创建
劣势:当获取bean对象时,创建对象的方式发生改变,有些用不到的值,也必须提供

2.使用setter方法进行注入:
1).必须要有无参构造方法
2).必须要有setter方法
property属性:
name:指定需要调用的setter方法名,规则:去掉set关键字,把剩余的部分首字母大写转换成小写
value:
ref:
优势:创建对象使用默认的构造方法,需要哪些参数,就直接注入,无需提供额外的参数
与传统的JavaBean的写法更相似,程序开发人员更容易理解、接受。通过setter方法设定依赖关系显得更加直观、自然。
对于复杂的依赖关系,如果采用构造注入,会导致构造器过于臃肿,难以阅读。Spring在创建Bean实例时,需要同时实例化其依赖的全部实例,因而导致性能下降。而使用设值注入,则能避免这些问题。
尤其在某些成员变量可选的情况下,多参数的构造器更加笨重。
劣势:对象中某个属性必须要有值时,setter注入无法保证一定能够注入

3.使用注解方法进行注入:
1).用于创建对象
相对于在xml文件中定义的 元素
Component:用于把当前类对象存入spring容器中
@Component 相对于
属性:
value:相对bean中name,如果不写,则会提供默认的名称,该名称为类的首字母大写转小写
注意:使用该注解时,要配置一个扫描器,告诉spring,需要在哪些包下面查询相关注解
context:component-scan
由Component注解衍生出3个注解
Controller: 一般使用在表现层
Service: 一般用于业务层
Repository: 一般用于持久化
和Component注解作用和属性是一模一样.
这个三种注解时spring提供针对mvc三层开发,让我们的对三层更加有清晰的认识
使用位置:只能放在类上面

    2).用于注入数据
          相对于bean标签中 property 和 constructor-arg
          AutoWired
             作用:自动按照类型注入,只要容器中有唯一一个bean对象的类型和要注入的类型匹配,就可以进行注入
             使用的位置:
                  构造方法
                  普通方法
                  字段
                  方法参数
          Qualifier:
              当按照自动类型注入时,找的类型对象不只一个是,且没有一个bean的名称和需要注入的参数名称一致时,
              使用该注解指定需要注入的bean的名称
          Resource:
              按照名称注入,
              name:
                  指定bean的名称
          Value
             作用:注入普通类型的数据,字符串,数字,boolean
             属性:
                 指定数据的值,可以是普通类型,也可以使用spring中的SpEL,写法为:${表达式}
    3).用于对象的作用范围
         相对于bean中的scope属性
         Scope
            作用:用于指定bean的作用范围
            属性:
            value: 指定的作用范围,常用的取值:singleton prototype
    4).用于对象的生命周期
         相当于bean中的init 和destroy 属性
         PostConstruct
             作用: 用于指定init方法
         PreDestroy
             作用: 用于指定destroy方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值