spring三种常用注入方式的测试与总结

spring三种常用注入方式

setter方法注入
字段注入(注解实现)
构造器注入

1、setter方法注入

创建一个接口:

public interface Axe {
    public String chop();
}

创建一个实现类:

@Component("SteelAxe")
public class SteelAxe implements Axe{
    public String chop(){
        return "钢斧砍东西很快";
    }
}

创建需要被注入属性的类:

@Component("person")
public class Person implements AllPerson{
    private Axe axe;
    private int personId;
    @Resource(name="SteelAxe")
    public void setAxe(Axe axe){
        this.axe = axe;
    }

    public void setPersonId(int personId) {
        this.personId = personId;
    }

    public void useAxe(){
        System.out.println(this.axe.chop());
    }
    public String getPersonId(){
        return "personID ="+personId;
    }
}

测试:

ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
AllPerson person = (AllPerson) ctx.getBean("person");
person.useAxe();

这里写图片描述

2、字段注入

代码如下:

这里写图片描述
测试:
这里写图片描述

3、构造器注入

在person类中去掉注解,然后在xml文件中配置如下:

     <bean id="person" class="com.liuyuan.pojo.Person">
       <constructor-arg  ref="SteelAxe"/>
     </bean>

最后测试即可

4、@Autowire和@Resource的区别

@Autowire默认按照对象类型来注入,如果想按照名称注入可以添加@Qualifier属性实现。在字段注入中,Autowire如果放在接口的位置上,那么如果此时只有一个实现这个接口的类,那么可以注入。

这里写图片描述
但当我们再添加一个实现这个接口的类时就会报错了:
这里写图片描述
如果想要用autowire实现那么就得添加@Qualifier属性:
这里写图片描述
@Resource默认按照名称来匹配,若找不到合适名称的类才会按照类型来匹配。若注解的类上没有名称,那么就按照类名首字母小写来命名。测试:仍然只让一个类实现接口,然后用@Resource来不加名称实现:
这里写图片描述
可以看到没加名称后,@Resource也通过类型进行了注入。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值