有时候也报错@Resource 出错 java.lang.NoSuchMethodError: javax.annotation.Resource.lookup()
总之是@Resource这个标签没有正确被识别。其实是javax.annotation这个包没有被正确使用,缺失了或发生了冲突。
我使用的是jdk10(据说jdk9也存在这个问题)
解决方案:
在pom.xml中添加依赖,亲测可行
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.1</version>
</dependency>
下面是我的源代码:
1、新建 BaseJunit4Test.java,一定要添加那两个注释
package com.ay.test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class BaseJunit4Test {
}
2、新建测试类,这个@Resource能正确被解释的话,这个测试方法应该就能正确执行了
package com.ay.test;
import com.ay.dao.AyTestUserDao;
import com.ay.model.AyTestUser;
import org.junit.Test;
import javax.annotation.Resource;
import java.util.List;
public class AyUserDaoTest extends BaseJunit4Test {
@Resource
private AyTestUserDao ayTestUserDao;
@Test
public void testFindAll(){
List<AyTestUser> userList = ayTestUserDao.findAll();
for(AyTestUser ayUser: userList){
System.out.println("name: " + ayUser.getName());
}
}
}