我有以下代码,其中我试图从方法的返回类型创建一个bean。
启动应用程序时出错如下:
使用名称' myMap'创建bean时出错在类路径资源中定义 [com / test / MyServiceImpl.class]:找不到匹配的工厂方法: factory bean' MyServiceImpl&#39 ;;工厂方法' myMap()'。检查一下 存在具有指定名称的方法,并且它是非静态的。
代码:
@Configuration
public class MyServiceImpl implements MyService
{
@Autowired
private MyDao myDao;
@Override
@Bean
@Scope("singleton")
@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
public Map<String, String> myMap()
{
return myDao.getMapFromDB();
}
}
public interface MyService
{
Map<String, String> myMap()
}
我的应用程序基于spring mvc,我在xml中添加了相关配置。
<mvc:annotation-driven/>
<context:component-scan>
答案 0 :(得分:0)
我不是100%肯定你会尝试做什么,但这是一种可行的方法:
@Service
public class MyServiceImpl implements MyService {
@Autowired
private MyDao myDao;
@Override
@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
public Map<String, String> myMap() {
return myDao.getMapFromDB();
}
}
interface MyService {
Map<String, String> myMap()
}
这会将您的服务实现定义为Spring管理的@Service
。您的MyDao
会自动注入,您可以在方法中使用它。
如果您希望MyDao
具有特定范围(单例已经是默认值),则需要注释MyDao
类。
如果你想编写配置,你需要这样做:
@Configuration
class MyConfig {
public MyService myService() {
return new MyServiceImpl();
}
}