我的Spring应用程序中有以下用于资源的类
@RestController
@RequestMapping("/whatever")
public class SomeResource {
@Autowired
private CoolService coolService;
@RequestMapping(
path = "",
method = RequestMethod.GET)
@PreAuthorize("hasPerm(@coolService.resolve(#attribute))")
public void resource(@PathVariable("attribute") int attribute) {
...
}
我想调用实现了CoolService
的bean,该实现已由Spring上下文自动连接,因为对于CoolService
,我有两个bean会根据启动时的配置文件被激活。
public interface CoolService {
resolve(int attribute);
}
@Service
@Profile("super")
public interface SuperCoolService implements CoolService {
public Object resolve(int attribute){...}
}
@Service
@Profile("ultra")
public interface UltraCoolService implements CoolService {
public Object resolve(int attribute){...}
}
但是,似乎Spring不知道要使用哪个bean,因为没有一个仅命名为CoolService
的bean,并且在Preauthorize
中我无法写@superCoolService
或{{ 1}},因为它取决于配置文件。
我该如何实现?
答案 0 :(得分:1)
如果要定义2个bean实现相同的接口,则可以对@Qualifier进行用户注释。 例如:
@Service
@Qualifier("service1")
public interface SuperCoolService implements CoolService {
public Object resolve(int attribute){...}
}
@Service
@Qualifier("service1")
public interface UltraCoolService implements CoolService {
public Object resolve(int attribute){...}
}