Spring @Autowire是当前服务的另一个实现

时间:2018-03-22 17:36:08

标签: java spring

我需要一个接口,然后在不同的maven模块中有两个实现。两个impl服务都看到带有接口的api模块但它们没有看到对方。

有一个默认实现,然后是事务实现。我想只需加载事务impl服务并调用默认的impl服务。像这样:

package my.app.core.api;
public interface MyService {
    boolean process();
}

package my.app.core.impl
@Service
public class MyServiceImpl implements MyService {

    @Override
    public boolean process() {
        // do something cool...
    }
}

package my.app.somewhere.else.impl
@Service
@Transactional
public class TransactionalMyServiceImpl implements MyService {

    @Autowire
    private MyService myService;

    @Override
    public boolean process() {
        myService.process();
    }
}

是否可以或我需要@Autowire显式MyServiceImpl而不是接口?这意味着将maven依赖性添加到my.app.somewhere.else.impl.pom

1 个答案:

答案 0 :(得分:4)

您可以为您的服务指定不同的名称,如下所示:

@Service
@Qualifier("transactionalMyService")

然后当您自动装配时,您可以使用名称:

@Autowired
@Qualifier("transactionalMyService")
private MyService myService;