2013-08-02 32 views
0

我一直在嘗試從JBOSS 5升級到jboss 7,並且出現以下異常。@資源注入目標無效。只允許使用setter方法:

at java.lang.Thread.run(Thread.java:619) [rt.jar:1.6.0_20] 
Caused by: java.lang.IllegalArgumentException: JBAS011089: @Resource injection target is invalid. Only setter methods are allowed: void com.myaccount.admin.manager.dao.ManagerDaoImpl.init(com.ibatis.sqlmap.client.SqlMapClient) 
    at org.jboss.as.ee.component.deployers.ResourceInjectionAnnotationParsingProcessor.processMethodResource(ResourceInjectionAnnotationParsingProcessor.java:192) 
    at org.jboss.as.ee.component.deployers.ResourceInjectionAnnotationParsingProcessor.deploy(ResourceInjectionAnnotationParsingProcessor.java:153) 
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:113) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final] 
    ... 5 more 

下面是代碼

@Repository("managerDao") 
    public class ManagerDaoImpl extends SqlMapClientDaoSupport implements ManagerDao { 

    @Resource(name="sqlMapClient_ADMIN") 
    public void init(SqlMapClient sqlMapClient) { 
     setSqlMapClient(sqlMapClient); 
    } 

    ...... 

我用Google搜索,但除了JBoss的罐子我沒有發現任何的源代碼。

+0

只要註釋setter,就像例外說的那樣。 –

回答

4

如果您想看看ResourceInjectionAnnotationParsingProcessorprocessMethodResource源代碼,你會看到:

if (!methodName.startsWith("set") || methodInfo.args().length != 1) { 
    throw new IllegalArgumentException("@Resource injection target is invalid. Only setter methods are allowed: " + methodInfo); 
} 

它檢查方法名不"set"啓動時,它拋出一個異常。因爲也許

@Autowired 
    private SqlMapClient sqlMapClient; 

    @PostConstruct 
    public void init() { 
     setSqlMapClient(sqlMapClient); 
    } 

註解與後結構的方法可能是更好的解決方案在未來的你」:因此,要麼重新命名您的init方法入手set或只是注入領域,隨着@PostConstruct註釋是這樣的註解你init方法您需要添加(或更改)更多的初始化內容,因此您唯一需要做的就是修改init()方法。

+0

謝謝,它解決了這個問題。在發佈問題之前,我應該閱讀該行,我已將註釋更改爲自動編寫 – NullPointerException