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

来源:互联网 发布:ubuntu没有vim命令 编辑:程序博客网 时间:2024/06/07 09:41

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也通过类型进行了注入。

原创粉丝点击