Spring的依赖注入及三种配置方式(依赖注入的两种形式)

依赖注入的两种形式

1.1构造方法注入

LowerAction.class

public class LowerAction implements Action {
    private String prefix;
    private String message;

    public  LowerAction(){}

    public  LowerAction(String prefix, String message){
        this.prefix = prefix;
        this.message = message;
    }
    public String getPrefix() {
        return prefix;
    }
    public String getMessage() {
        return message;
    }
    public void setPrefix(String string) {
        prefix = string;
    }
    public void setMessage(String string) {
        message = string;
    }
    public void execute(String str) {
        System.out.println((getPrefix() + ", " + getMessage() + ", " + str).toLowerCase());
    }
}

ApplicationContext.xml中的TheAction2的Bean

    
        
            Hi
        
        
            Good Afternoon
        
    

测试函数

    @Test
    public void test5() {
        String XML = "file:src/applicationContext.xml";
        ApplicationContext ctx = new ClassPathXmlApplicationContext(XML);

        LowerAction lowerAction=(LowerAction) ctx.getBean("TheAction2");
        System.out.println(lowerAction.getPrefix());
        System.out.println(lowerAction.getMessage());

    }

测试结果


测试结果

实验中想到的问题:构造注入只能通过index索引匹配吗?
还有类型匹配


        
            Hi
        
        
            Wushuohan
        
    

以及参数名传值


        
        
        
        
    

测试结果如下

测试结果

Setter()方法注入

ApplicationContext.xml中的TheAction1的Bean


        
            Hi
        
        
            Good Morning
        
    

测试函数

    @Test
    public void test4() {
        String XML = "file:src/applicationContext.xml";
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(XML);
        LowerAction lowerAction=(LowerAction) ctx.getBean("TheAction1");
        System.out.println(lowerAction.getPrefix());
        System.out.println(lowerAction.getMessage());
    }

测试结果如下


测试结果

实验中想到的问题:Setter()注入能不能没有构造函数?
注释掉LowerAction的构造函数

public class LowerAction implements Action {
    private String prefix;
    private String message;

    public void execute(String str) {
        System.out.println((getPrefix() + ", " + getMessage() + ", " + str).toLowerCase());
    }
}

运行后报错

报错

报错原因:TheAction2没有构造函数
TheAction2没有了构造函数

将这个Bean暂时删除后,运行成功:
运行成功

以上的测试说明了Setter()注入可以没有构造函数,但是构造注入必须有构造函数。


本章总结

对于依赖关系无需变化的注入,尽量采用构造注入。而其他的依赖关系的注入,则考虑采用设值注入。

你可能感兴趣的:(Spring的依赖注入及三种配置方式(依赖注入的两种形式))