現在、VariableService
は@Autowired
私のコントローラーにあります。
このエラーをなくすためにクラスを実装できることはParameterizedType
わかっていますが、間違った方向に向かっているのではないかと心配しています。これを行うためのより良い方法はありますか、それとも弾丸を噛んでParameterizedType
のメソッドを実装する必要がありますか?
org.springframework.beans.factory.BeanCreationException:「contentController」という名前のBeanの作成中にエラーが発生しました:自動配線された依存関係の挿入に失敗しました。ネストされた例外はorg.springframework.beans.factory.BeanCreationExceptionです:フィールドを自動配線できませんでした:private com.fettergroup.cmt.service.VariableService com.fettergroup.cmt.web.ContentController.variableService; ネストされた例外はorg.springframework.beans.factory.BeanCreationExceptionです:ServletContextリソース[/WEB-INF/dispatcher-servlet.xml]で定義された「variableService」という名前のBeanの作成中にエラーが発生しました:Beanのインスタンス化に失敗しました。ネストされた例外はorg.springframework.beans.BeanInstantiationExceptionです:Beanクラスをインスタンス化できませんでした[com.fettergroup.cmt.service.VariableService]:コンストラクターが例外をスローしました。ネストされた例外はjava.lang.ClassCastExceptionです。java.lang.Classをjava.lang.reflect.ParameterizedTypeにキャストすることはできません
可変サービス
public class VariableService extends EntityService {
public VariableService () {
super.setEntityRepository(new VariableRepository());
}
}
EntityService
public abstract class EntityService<T> {
public EntityRepository<T> entityRepository;
public T create(T entity) {
return entityRepository.create(entity);
}
public T update(T entity) {
return entityRepository.update(entity);
}
public void delete(T entity) {
entityRepository.delete(entity);
}
public void setEntityRepository(EntityRepository<T> entityRepository) {
this.entityRepository = entityRepository;
}
}
可変リポジトリ
public class VariableRepository extends EntityRepository {
}
EntityRepository
@Repository
public abstract class EntityRepository<T> {
//the equivalent of User.class
protected Class<T> entityClass;
@PersistenceContext(type= PersistenceContextType.TRANSACTION)
public EntityManager entityManager;
public EntityRepository () {
//Get "T" and assign it to this.entityClass
ParameterizedType genericSuperclass = (ParameterizedType) getClass().getGenericSuperclass();
this.entityClass = (Class<T>) genericSuperclass.getActualTypeArguments()[0];
}
/**
* Create this entity
* @param t
* @return
*/
public T create(T t) {
entityManager.persist(t);
return t;
}
/**
* Update this entity
* @param t
* @return
*/
public T update(T t) {
return entityManager.merge(t);
}
/**
* Delete this entity
* @param entity
*/
public void delete(T t) {
t = this.update(t);
entityManager.remove(t);
}
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
}