@autowired在Spring MVC中无效

时间:2013-07-09 13:43:28

标签: java spring inversion-of-control autowired

我开发了一个包含2个项目的基本应用程序。第一个是数据层,第二个是Web应用程序(mvc项目)

数据图层包含以下内容

@Entity
@Table(name="users")
public class User implements Serializable {
.....
}

public interface UserBase {
.....
  }

  @Repository
  public interface UserRepository extends JpaRepository <User, Long>{
  }



   @Service
   public class UserImpl implements UserBase {  
   private final UserRepository repository; 
   @Autowired
   public UserImpl(UserRepository repository) { 
   this.repository = repository;
    ......
   }


  @RunWith(SpringJUnit4ClassRunner.class)  
  @ContextConfiguration("Config/applicationContext.xml")
  public class testcase1 {

    @Autowired
private UserImpl userImpl;

   @Test
   public void test() {
   ..... 
   UserImpl.save(user);
   .....
   }

网络应用     @Controller     公共类ManageUser {

@Autowired
UserImpl userImpl;

@RequestMapping("/addUser/")
public ModelAndView addUser() {
UserImpl.save(user);
.....
}
}

当我运行单元测试时,代码成功,没有发现错误。 但是当我将输出jar从数据层放入spring mvc web app lib文件夹并添加对构建浴中数据层的引用时,我有一条错误消息
 注入自动连接的依赖项失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:com.my.domin.impl.UserImpl

注意: 我用tomcat。 我使用流动的配置:

    <jpa:repositories base-package="com.sanatech.repository" />
    <context:component-scan base-package="com.my.repository"/>
    <context:component-scan base-package="com.my.domin.impl"/>
    <context:component-scan base-package="com.my.domin"/>
    <context:component-scan base-package="com.my"/>
    <context:component-scan base-package="com.my.manageuser.controller"/>
    <tx:annotation-driven/>
    <context:annotation-config />

修改

当我将单元测试分离到一个新项目并在构建浴中添加对数据层jar的引用时,我发现了相同的异常。

1 个答案:

答案 0 :(得分:0)

您确定不会从您的测试用例中引发此异常:

public class testcase1 {

    @Autowired
private UserImpl userImpl;

您可以在@Service注释中显式设置bean名称,并在@Autowired中使用此名称以确保正确配置。