2013-08-02 77 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