在我的服务层
中public class MyServiceLayerImpl{
public void method1(){
MyServicelayer.method(); //is this correct?
}
public void method2(){
}
@Autowired
MyServiceInterface MyServiceLayer;
}
如果我在服务层内部有需要在服务层内调用另一个服务的方法。我不能使用this._method,因为我正在使用AOP进行缓存。为了使缓存起作用,我必须使用@Autowired
来获取服务。因此,上面的风格可以吗?
我得到以下错误
引起:org.springframework.beans.factory.BeanCreationException:创建名为'com.company.iss.services.MyServiceLayerImpl#85aedd'的bean时出错:字段自动装配失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:com.company.iss.services.MyServicelayer com.company.iss.services.MyServiceLayerImpl.MyServiceLayer;嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义[com.company.iss.services.MyServiceLayer]类型的唯一bean:类型[interface com.company.iss.services.MyServiceLayer]的不满意的依赖项:expected至少1个匹配的豆
答案 0 :(得分:6)
很难从奇怪的格式和命名中分辨出来,但是如果你想从另一个服务中调用一个服务:
public interface MasterService {
void someMethod();
}
public class MasterServiceImpl implements MasterService {
private OtherService otherService;
public void someMethod() {
this.otherService.someCallOnOtherService();
}
@Autowired
public void setOtherService(OtherService otherService) {
this.otherService = otherService;
}
}
现在,必须配置MasterServiceImpl
和任何实现OtherService
。有很多方法可以做到这一点,最流行的是在你的XML配置中明确地使用基于注释的配置紧接着。
另请注意,如果您不使用接口,AOP往往会非常脆弱。在你的代码中,你的Impl实际上并不是implement
。我建议反对。
答案 1 :(得分:0)
除了有一个大写变量而且没有冒号外 - 没关系。
当然,您需要将您的类定义为bean。通过在其上使用@Service
(或其他刻板印象)注释,或在<bean>
中使用applicationContext.xml
(see here获取在春季2中引入的基于注释的配置)
另一件事:你的成员变量应该是小写的,而不是大写的。