依赖注入(DI)

一、依赖注入(将spring容器中的组件注入到bean中)

  我们之前学习了怎么将bean注入到容器中,接下来我们来研究一下怎么将容器中的组件注入到bean中。

1、属性注入(将组件注入到属性中)

1.1、spring提供的方式

  1、spring为我们提供了一个注解@Autowire,将@Autowired注解放到JavaBean对应类的属性上,该属性的值会在JavaBean对应类创建实例之前,去看容器中是不是存在属性对应类型的组件,有的话就从容器中取,并注入到该属性中。 如果不存在就报错,要想没有不报错,可以使用@Autowired的一个属性require=false。如果容器中存在多个同类型的组件,那么就会用属性的名字去匹配组件名。
  2、;@Autowire还可以与@Qualifier注解连用。直接指定组件名去注入。
  3、@Autowire支持@Primary【标注了@Primary注解的组件在按类型注入时会被优先选择】

@Component("qinglong")
public class PersonPojo {
   
    private String title = "青龙";//称号
    private String name = "宁仲";//真实姓名
    @Autowired//将容器中SkillPojo类型组件的注入到属性中
    @Qualifier("skillPojo")
    private SkillPojo skillPojo;//武器类
}

@Component("ghost")
@Primary//按类型注入时,这个组件会被优先选择
public class SkillPojo {
   
    private String name="以身饲鬼术";//武器名称
    private String type="召唤类";//武器功能
    @Override
    public String toString() {
   
        return "SkillPojo{" +
                "name='" + name + '\'' +
                ", type='" + type + '\'' +
                '}';
    }
    public String getName() {
   
        return name;
    }
    public void setName(String name) {
   
        this.name = name;
    }
    public String getType() {
   
        return type;
    }
    public void setType(String type) {
   
        this.type = type;
    }
}

1.2、jdk提供的方式

  jdk为我们提供了@Resoure注解。它可以直接指定组件名注入也可以指定类型注入,不需要与其他注解连用。但是它不支持@Primary注解

@Component("qinglong")
public class PersonPojo {
   
    private String title = "青龙";//称号
    private String name = "宁仲";//真实姓名
    //@Resource(type = SkillPojo.class)//按组件类型注入
    @Resource(value="skillPojo")//按组件名称注入
    private SkillPojo skillPojo;//武器类
  
}

1.3、第三方提供的方式

  既然是第三方提供的,我们就要导入第三方jar包。它的提供注解是@Inject。@Inject功能基本和@AutoWire注解一致。
  它支持@Primary注解
  它默认是按类型注入的,可以与@Qualifier注解连用。直接指定组件名去注入。

<dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
</dependency>

2、方法注入(将组件注入到属性中)

  将@Autowired注解放在方法上,方法可以有任意名称和任意数量的参数;每个参数都将与Spring容器中的匹配bean自动连接。Bean属性setter方法实际上只是这种通用配置方法的一个特例

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值