私はインターフェイスとそのインターフェイスの2つの実装を持っています。 今、インターフェース上に '@Component'アノテーションを追加しています。インプリメンテーションの1つに、呼び出されるだけの「@プライマリ」アノテーションがあります。 インターフェイスのメソッドをautowiredインターフェイスBeanから呼び出すときに、両方の実装を呼び出す必要があります。1回の呼び出しでインターフェイスのすべての実装を呼び出す
@Component
public interface CustomerPersister {
AbuserDetails setAbuserDetails(AbuserDetails customer);
}
@Primary
@Component
public class CustomerRedisPersisterImpl implements CustomerPersister{
@Autowired
private CustomerManager customerManager;
@Override
public AbuserDetails setAbuserDetails(AbuserDetails customer) {
if(customerManager.setAbuserDetails
(customer,ATSNamespaces.ABUSERDETAILS)){
return customer;
}else{
return new AbuserDetails();
}
}
@Component
public class MongoDbRepositoryImpl implements CustomerPersister{
@Autowired
MongoTemplate mongoTemplate;
@Override
public AbuserDetails setAbuserDetails(AbuserDetails customer) {
Query query = new Query(Criteria.where("login").is(customer.getLogin()));
System.out.println("query is:"+query);
Update update = new Update();
update.set("isReturnAbuser", customer.getIsReturnAbuser());
update.set("reasonReturnAbuser", customer.getReasonReturnAbuser());
update.set("isCODThrottled", customer.getIsCODThrottled());
update.set("reasonRTOAbuser", customer.getReasonRTOAbuser());
update.set("isFakeEmail", customer.getIsFakeEmail());
update.set("reasonFakeEmail", customer.getReasonFakeEmail());
update.set("amount",customer.getAmount());
WriteResult result = mongoTemplate.upsert(query, update, AbuserDetails.class);
System.out.println("This is the class that got returned:"+result.getClass());
System.out.println("New design result:"+result);
if(result!=null){
if(result.getN() != 0)
return customer;
else
return null;
}else
return null;
}
someOtherClass
@Autowired
private CustomerPersister customerPersister;
@Override
@RequestMapping(value = "/abuser/details/set", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public AbuserDetails setAbuserDetails(@RequestBody AbuserDetails customer){
return customerPersister.setAbuserDetails(customer);
}
** 1)**。 *どちらの方法? 5. ** 2)**を宣言しました。他の4つの方法はどこで実装しますか? ** 3)**。両方の実装方法をいつ呼び出すのですか? – Lino
@Lino私はちょうど編集しました。 1つの方法しかありません。私はその方法の2つの実装を持っています。私はそれらの両方が呼ばれるようにします。したがって、後で3番目の実装がある場合は、その実装を追加し、上記のコードを変更しなくてはなりません。 一部のその他のクラスでは、メソッドを呼び出しています。 – user1973987