无法在扩展 DAO 和管理器接口时自动装配字段
Could not autowire field on extending DAO and Manager interface
您好,我的应用程序运行良好,但在扩展我的管理器和 Dao 接口时出现错误。我已经尝试了在各种帖子中发布的解决方案(将 <context:component-scan base-package="com.controller" />
更改为 <context:component-scan base-package="com" />
),但这给了我 WhosebugError
。我认为在扩展接口时需要一些注释,但我不知道应该在那里使用什么注释。请指导我
//控制器
@Controller
public class Controller {
@Autowired
private Manager2<Entity> manager;
//管理接口和实现
public interface Manager1 <T> {
public void add(T entity);
public List<T> getAll();
public T getById(Integer id);
public void delete(Integer id);
public void update(T entity);
}
public interface Manager2<T> extends Manager1<T> {
public List<Entity> getList(int Id);
}
@Service
public class ManagerImpl implements Manager2<Entity> {
@Autowired
private Manager2<Entity> dao;
}
//Dao 接口和实现
public interface DAO1 <T> {
public void add(T entity);
public List<T> getAll();
public T getById(Integer id);
public void delete(Integer id);
public void update(T entity);
}
public interface DAO2<T> extends DAO1<T> {
public List<Entity> getList(int Id);
}
public class DaoImpl implements DAO2<Entity> {
@Autowired
private SessionFactory sessionFactory;
}
//声明在servlet.xml
<context:component-scan base-package="com.controller" />
<bean id="dao" class="com.dao.DaoImpl"></bean>
<bean id="manager" class="com.service.ManagerImpl"></bean>
//来自日志文件的错误
nested exception is `org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.service.Manager2] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}`
Whosebug 的问题是因为这段代码
@Service
public class ManagerImpl implements Manager2<Entity> {
@Autowired
private Manager2<Entity> dao;
}
此行为的原因是它存在一个从未解决的递归依赖关系。服务需要具有相同 bean 配方的另一项服务。
此外,@autowired
注释用于按类型解析依赖关系。这意味着拥有 2 个保存类型的实例化 bean 会导致错误,因为 spring 无法理解您真正需要的 bean。在这种情况下,您可以使用 @Resource
(byName) 或添加带有您需要的 bean 名称的 @Qualifier
注释。
您好,我的应用程序运行良好,但在扩展我的管理器和 Dao 接口时出现错误。我已经尝试了在各种帖子中发布的解决方案(将 <context:component-scan base-package="com.controller" />
更改为 <context:component-scan base-package="com" />
),但这给了我 WhosebugError
。我认为在扩展接口时需要一些注释,但我不知道应该在那里使用什么注释。请指导我
//控制器
@Controller
public class Controller {
@Autowired
private Manager2<Entity> manager;
//管理接口和实现
public interface Manager1 <T> {
public void add(T entity);
public List<T> getAll();
public T getById(Integer id);
public void delete(Integer id);
public void update(T entity);
}
public interface Manager2<T> extends Manager1<T> {
public List<Entity> getList(int Id);
}
@Service
public class ManagerImpl implements Manager2<Entity> {
@Autowired
private Manager2<Entity> dao;
}
//Dao 接口和实现
public interface DAO1 <T> {
public void add(T entity);
public List<T> getAll();
public T getById(Integer id);
public void delete(Integer id);
public void update(T entity);
}
public interface DAO2<T> extends DAO1<T> {
public List<Entity> getList(int Id);
}
public class DaoImpl implements DAO2<Entity> {
@Autowired
private SessionFactory sessionFactory;
}
//声明在servlet.xml
<context:component-scan base-package="com.controller" />
<bean id="dao" class="com.dao.DaoImpl"></bean>
<bean id="manager" class="com.service.ManagerImpl"></bean>
//来自日志文件的错误
nested exception is `org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.service.Manager2] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}`
Whosebug 的问题是因为这段代码
@Service
public class ManagerImpl implements Manager2<Entity> {
@Autowired
private Manager2<Entity> dao;
}
此行为的原因是它存在一个从未解决的递归依赖关系。服务需要具有相同 bean 配方的另一项服务。
此外,@autowired
注释用于按类型解析依赖关系。这意味着拥有 2 个保存类型的实例化 bean 会导致错误,因为 spring 无法理解您真正需要的 bean。在这种情况下,您可以使用 @Resource
(byName) 或添加带有您需要的 bean 名称的 @Qualifier
注释。