2017-05-20 71 views
0

我在抽象基類中有一個自動裝入對象的問題。它總是給我null而不是實例。請幫忙。抽象類中的autowire null

基類:

public abstract class BaseClass implements IReq<Req> { 

    @Autowired 
    protected ReqDao dao; 

    protected void updateReq() { 
     dao.update(); 
    } 
} 

子類:

@Component 
public class ChildClass extends BaseClass { 
    ... 
} 

ReqDao類:

@Component 
public class RptRequestDao { 
    public void update(){ 
      ... 
    } 
} 

我想到的是簡單地使用update()函數的基類,意味着在我的ChildClass中,我不重寫那個。這是問題嗎?如果是這樣,那麼正常的做法是什麼?提前致謝。

+0

你確定你在上下文中有ReqDao嗎?你如何instanciate和使用ChildClass?我複製了上面的代碼,它按預期工作。 –

+0

@AndriySlobodyanyk,我使用新的ChildClass()來實例化它。 – Laodao

+0

[Spring,抽象類和註解]可能的重複(https://stackoverflow.com/questions/2921899/spring-abstract-class-and-annotations) – Aelphaeis

回答

0

當你初始化對象的bean是按需創建的,你的情況, RepoDao是私有的,因此不會被inhereted到將在intialized類,你要麼需要把

@Component 
public class ChildClass extends BaseClass { 
    @Autowired 
    private ReqDao dao; 

或使它在BaseClass中受到保護/公開,肯定公開將使其可以被其他類違反封裝的類訪問

+0

保護不公開! – Sikorski

+0

@Sikorski謝謝你的注意,他們都適用但保護更好 –

+0

我修改它爲受保護的。仍然給我空值。 :('公共抽象類BaseClass的實現IREQ { @Autowired 保護ReqDao道; 保護無效updateReq(){ dao.update();} } ?' – Laodao

-1

BaseClass是抽象的,你不能實例化它。你需要讓你的ReqDao在ChildClass中被自動裝配。Spring只會autowire它將創建該類的實例。希望可以幫助