Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法正确连接java.lang.Class_Java_Spring_Autowired - Fatal编程技术网

无法正确连接java.lang.Class

无法正确连接java.lang.Class,java,spring,autowired,Java,Spring,Autowired,我正在尝试创建一个项目,但在连接java类lang时遇到了问题。 我的spring配置 <bean id="userService" class="com.event.services.UserServiceImpl"> <property name="userRepository" ref="userRepository"></property> </bean> <bean name="userRepository" class=

我正在尝试创建一个项目,但在连接java类lang时遇到了问题。 我的spring配置

<bean id="userService" class="com.event.services.UserServiceImpl">
    <property name="userRepository" ref="userRepository"></property>
</bean>

<bean name="userRepository" class="com.event.repositories.UserRepository">
    <property name="entityClass">
        <bean class="java.lang.Class" factory-method="forName">
            <constructor-arg value="com.event.domain.User"/>
        </bean>
    </property>
</bean>

课程: 包com.event.repositories

import com.event.domain.User;
import org.springframework.stereotype.Repository;
@Repository
public class UserRepository extends JPARepository<String, User> implements UserBonusRepository {

@Override
public User findByKey(String id) {
    return em.find(entityClass, id);
}

@Override
public Iterable<User> findByKeys(Iterable<String> ids) {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}

@Override
public void persist(User entity) {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}

@Override
public User merge(User entity) {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}

@Override
public void remove(User entity) {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}

@Override
public void saveAll(Iterable<User> entities) {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}

@Override
public boolean isUserValid(String userName, String password) {
    User user = em.find(entityClass, userName);

    if (user == null || !user.getPassword().equals(password)) {
        return false;
    }
    return true;
}
导入com.event.domain.User;
导入org.springframework.stereotype.Repository;
@存储库
公共类UserRepository扩展JPARepository实现UserBonusRepository{
@凌驾
公共用户findByKey(字符串id){
返回em.find(entityClass,id);
}
@凌驾
公共Iterable findByKeys(Iterable ID){
抛出新的UnsupportedOperationException(“尚未受支持”);//若要更改生成的方法体,请选择“工具”“模板”。
}
@凌驾
public void persist(用户实体){
抛出新的UnsupportedOperationException(“尚未受支持”);//若要更改生成的方法体,请选择“工具”“模板”。
}
@凌驾
公共用户合并(用户实体){
抛出新的UnsupportedOperationException(“尚未受支持”);//若要更改生成的方法体,请选择“工具”“模板”。
}
@凌驾
公共作废删除(用户实体){
抛出新的UnsupportedOperationException(“尚未受支持”);//若要更改生成的方法体,请选择“工具”“模板”。
}
@凌驾
公共void saveAll(可编辑实体){
抛出新的UnsupportedOperationException(“尚未受支持”);//若要更改生成的方法体,请选择“工具”“模板”。
}
@凌驾
公共布尔值isUserValid(字符串用户名、字符串密码){
User=em.find(entityClass,用户名);
if(user==null | |!user.getPassword().equals(password)){
返回false;
}
返回true;
}
}

在JpaRepository中,我有这个

@PersistenceContext
public EntityManager em;
@Autowired
public Class<T> entityClass;
@PersistenceContext
公共实体管理者;
@自动连线
公共类实体类;
问题: 没有“java.lang.Class”类型的合格bean可用:至少需要1个符合autowire候选条件的bean。 我正试图解决这个问题并找到这个 但这没有帮助。有人知道如何解决这个问题吗? 提前谢谢。:)

您是否尝试过以下方法:

除去

@Autowired
来自
公共类entityClass

然后像这样更新xml

<bean name="userRepository" class="com.event.repositories.UserRepository">
</bean>
参数索引1,因为T是定义的第二个参数化类型

  • 使用超类构造函数在
    UserRepository
    super(User.class)中传递entityClass类型

  • 注意,我已经从xml中删除了entityClass连接

    能否显示堆栈跟踪请使用构造函数注入替换autowired属性。在当前配置中,此类是不可重用的,您需要向类属性添加限定符。其次,您将XMLBean定义与注释混合在一起。自动连接或配置存储库的类有什么意义?为什么不添加一个调用super(User.class)的无参数构造函数呢?为什么要使用XML来定义bean,而不仅仅是使用类路径扫描和注释呢?大家好,非常感谢你们的快速回答。我排除了带有服务和存储库注释的xml配置和带注释的服务类和存储库类。但现在,当我运行程序时,userService中的存储库类为null。这就是我试图通过xml配置它的原因。我认为如果我用repository annotation注释我的repository类,它不会为null,但事实并非如此。你知道怎么解决这个问题吗?先谢谢你@jbnizety您需要提供更多信息。如何配置spring?com.event.repositories是扫描包的一部分吗?我已经尝试过了,我认为这解决了我的问题,但我现在有了另一个。设置属性值时出错;嵌套异常为org.springframework.beans.NotWritablePropertyException:bean类[com.event.repositories.UserRepository]的属性“entityClass”无效:bean属性“entityClass”不可写或具有无效的setter方法。setter的参数类型与getter的返回类型匹配吗?我包括了entityClass的setter和getter,entityClass是公共字段。您能发布JpaRepositorySure的方法和泛型参数化类型定义吗。公共类实体类;公共类getEntityClass(){return entityClass;}公共void setEntityClass(Class entityClass){this.entityClass=entityClass;}这是使用User.Class public JPARepository(Class entityClass){this.entityClass=entityClass;}从子类调用的JPA构造函数我指的是类参数化类型定义,公共类JpaRepository。。。{.而且子类UserRepository不使用此构造函数??为什么?有默认构造函数?非常感谢Hassen,这解决了我的问题,1.一个解决方案是我一直在寻找的,但我没有想到。我现在在存储库连接方面有问题,但我会尝试用谷歌搜索并自己解决。干杯。:)
    @SuppressWarnings("unchecked")  
        private Class<T> getEntityClass() {   
             return (Class<T>) ( (ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[1];  
        }