2013-03-28 89 views
0

我的会计实例有什么问题? Calculator bean不会注入到Accoount中。存款方法中存在空指针异常,因为计算器为空。春天不注入我的豆

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = "classpath:/META-INF/spring/context.xml") 
public class DITestJavaTest extends Assert { 
    @Test 
    public void diTest() { 
     Account account = new Account(500); 
     account.deposit(500); 
     assertEquals("balance is 1000", 1000, account.getBalance(), 0.0001); 
    } 
} 
public class Account { 

    @Autowired 
    private ICalculator calculator; 

    private double balance; 

    public Account() { 
     balance = 0; 
    } 

    public Account(double balance) { 
     this.balance = balance; 
    } 

    public void deposit(double amount) { 
     balance = calculator.add(balance, amount); 
    } 

    public void withdraw(double amount) { 
     balance = calculator.subtract(balance, amount); 
    } 

    public double getBalance() { 
     return balance; 
    } 

}  
@Component 
public class Calculator implements ICalculator { 

    @Override 
    public double add(double summand1, double summand2) { 
     System.out.println("Main implementation with " + Calculator.class.getName() + "addition"); 
     BigDecimal result = round(summand1 + summand2); 
     return result.doubleValue(); 
    } 

    @Override 
    public double subtract(double minuend, double subtrahend) { 
     System.out.println("Main implementation with " + Calculator.class.getName() + "subtraction"); 
     BigDecimal result = round(minuend - subtrahend); 
     return result.doubleValue(); 
    } 

    private BigDecimal round(double amount) { 
     return new BigDecimal(amount).setScale(2, BigDecimal.ROUND_HALF_UP); 
    } 

}  
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd"> 

    <context:component-scan base-package="org.example.banking" /> 
    <context:annotation-config /> 

</beans> 

回答

0

您需要anotate Account类以及告诉春天,它包含注释成员。

Somethng像

@Component 
public class Account { ... } 
+0

尝试这个。没有帮助.. – myborobudur 2013-03-28 10:09:05

+0

包conatining Account类的名字是什么? – 2013-03-28 10:30:54

+0

src/main/java/org/example/banking/Account.java - src/main/java/org/example/banking/Calculator.java - src/main/java/org/example/banking/ICalculator.java – myborobudur 2013-03-28 11:35:36

2
@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = "classpath:/META-INF/spring/context.xml") 
public class DITestJavaTest extends Assert { 

@Autowired 
Account account 

@Test 
public void diTest() { 
    account.deposit(500); 
    account.deposit(500); 
    assertEquals("balance is 1000", 1000, account.getBalance(), 0.0001); 
} 

}

不要在您的测试初始化​​帐户。这样,它不是由Spring管理和Calculator从未注射

而作为建议,注释Account@Component

+0

这很有道理!但帐户应该是一个单身人士 – myborobudur 2013-03-28 11:42:50

+0

它是。 Spring bean的作用域默认为单例 – 2013-03-28 11:45:09