Spring框架 IOC控制反转

对象之间的依赖由容器建立,避免对象之间依赖由对象自身建立。可以用减少代码之间的耦合度。其中最常见的方式叫做依赖注入。
当A类中用到了B类的对象b,在没有IOC时需要在A的代码中new一个B的对象。
采用依赖注入技术之后,A的代码只需要定义一个私有的B对象,不需要直接new来获得这个对象,而是通过相关的容器控制程序来将B对象在外部new出来并注入到A类里的引用中

依赖注入:

  1. 基本元素注入
  2. 列表元素注入
  3. 对象依赖注入

基本元素注入:

@Value("值")

property:name=“属性名” value=“值”

<bean id="student" class="entity.Student">
    <property name="age" value="21"/>
</bean>

列表元素注入:

  • list
<bean id="student" class="entity.Student">
    <property name="属性名">
         <list>
             <value>mysql</value>
             <value>j2ee</value>
         </list>
    </property>
</bean>
  • set
<bean id="student" class="entity.Student">
    <property name="属性名">
         <set>
             <value>mysql</value>
             <value>j2ee</value>
         </set>
    </property>
</bean>
  • map
<bean id="student1" class="entity.Student">
    <property name="属性名">
         <map>
             <entry key="j2ee" value="80">
             <entry key="mysql" value="80">
         </map>
    </property>
</bean>

对象依赖注入:

  1. set方法注入 注解:set方法上

xml配置

property元素表示用set注入方式,spring调用B类的setA()方法注入
<bean id="b" class="entity.B">
    <property name="a" ref = "a1">
</bean>

注解方式:

@Resource(name="a1")
public void setA( A a) {
       this.a = a;
 }
  1. 构造器方法注入 注解:构造器方法上

xml配置

index为第几个参数(下标从0开始)ref指定注入对象的setA()方法注入
<bean id="b" class="entity.B">
    <constructor-arg index="0" ref="a1">
</bean>

注解方式:
构造器上

  1. 自动注入 @Autowired

byName xml配置
Spring会根据B中的属性成员的名字自动调用set方法注入容器中Id等于属性名的对象(找不到注入null,不可能找到多个)

<bean id="b" class="entity.B"
    autowire="byName"
</bean>

byType xml配置
Spring会根据B中的属性成员的类型自动调用set方法注入容器中类型相等的对象(找不到注入null,找到多个报错)


<bean id="b" class="entity.B"
    autowire="byType"
</bean>

byType 注解注入
@Autowired为Spring提供的注解,只按照byType注入。
可以放在属性上 或者set方法上

@Autowired
  1. 属性反射注入 属性上 @Resource(name=“id”)
    下面两种@Resource只要使用一种即可
public class ServiceImpl {
    @Resource(name="userDao")
    private UserDao userDao;
    
    @Resource(name="userDao")
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
}

IOC部分知识图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值