2011-04-11 66 views
0

我想试试spring 3.0.5的<context:component-scan base-package />功能。在spring项目中找不到hibernate autowire的麻烦,找不到bean错误

我在的applicationContext此项:

<context:component-scan base-package="com.project.personal.admin.model"/> 
<context:annotation-config /> 

我有知道如何创建任何POJO和DAO一个管理器类。

@Component("manager") 
public class ManagerImpl implements ApplicationContextAware, Manager { 

    ApplicationContext applicationContext; 

    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { 
    this.applicationContext = applicationContext; 
    } 

    public User CreateUser(){ 
    return (User) getInstance("user", User.class); 
    } 


    public UserDAO createUserDAO(){ 
    return (UserDAO) getInstance("userDAO", UserDAO.class); 
    } 
//.... 
} 

一个POJO喜欢:

@Entity 
@Table(name = "user", uniqueConstraints = { 
@UniqueConstraint(columnNames = {"email"})}) 
@Component("user") 
public class User { 

    public User() { 
    this.dateCreated = new Date(); 
    } 


    @Id 
    @GeneratedValue(generator = "uuid") 
    @GenericGenerator(name = "uuid", strategy = "uuid.hex") 
    @Column(name = "id", length = 32) 
    private String id; 
    @Column(name = "email", length = 150) 
    private String email; 

//setters and getters 
} 

我的测试类是像这样

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations={"classpath:META-INF/test-project-admin-config.xml"}) 
@TransactionConfiguration(defaultRollback=true) 
@Transactional 
public class UserDAOImplTest { 
    //@Autowired 
    @Resource(name="manager") 
    Manager manager; 

    @Autowired 
    UserDAO userDAO; 

    public UserDAOImplTest() { 
    } 

    @Test 
    public void testSave() { 
     User u1 = manager.CreateUser(); 
     u1.setEmail("[email protected]"); 
     u1.setFullname("joseph djomeda"); 
     u1.setPassword("psaumedetdavid"); 
     userDAO.save(u1); 
     User expResult = u1; 

     User result = (User)userDAO.getById(u1.getId()); 

     Assert.assertEquals(expResult, result); 
     Assert.assertEquals(expResult.getId(), result.getId()); 
    } 

    } 

我遇到这个错误:

org.springframework.beans。 factory.NoSuchBeanDefinitionException:没有匹配[com.project.personal.admin.ma nager.Manager]找到依赖关系:预计至少有1个bean有资格作为此依赖关系的自动连线候选。依赖注解:{@ org.springframework.beans.factory.annotation.Autowired(必需=真)}

大部分我创建ApplicationContext中的每一类条目的时间,它一直工作,此时沿着我想尝试包扫描。 这是我做得不好的东西吗?我已经尝试了Autowired和后来的资源。所以我的想法

感谢您阅读此。

+2

是否应用程序上下文您在'@ ContextConfiguration'注释中定义的'test-project-admin-config.xml'具有与您在应用中使用的内容相同的内容吗?它需要在那里进行组件扫描。否则,它不会找到你的班级。 – 2011-04-11 15:55:12

回答

2

确保您Manager是在正确的包(或您base-package已正确设置)(我不会提到这一点,但它似乎怀疑有模型软件包管理器)

+0

你好,你的回应让我意识到了一些事情。实际上这是一个maven项目。我有模型模块,服务模块和Web应用程序模块。 pojos在'com.project.personal.model.domain'和manager中,而不是在'com.project.personal.model.manager'中,我把它放在'com.project.personal.manager'中。非常感谢 – 2011-04-11 16:11:06