2017-02-23 53 views
2

在下面的代码我使用inAppPurchaseService调用它的功能,但在运行时其显示我null当我打印inAppPurchaseService@Autowired空在运行时

public class SubscriptionChecker { 

    private static final Logger log  =Logger.getLogger(SubscriptionChecker.class); 

    @Autowired 
    private EmployerService employerService; 

    @Autowired 
    private InAppPurchaseService inAppPurchaseService; 

    private static final RenewalCheckStrategy STRATEGY_APPLE 
    = new AppleRenewalCheckStrategyImpl(); 

    private static final RenewalCheckStrategy STRATEGY_GOOGLE 
    = new GoogleRenewalCheckStrategyImpl(); 



    public boolean checkSubscription(User user) throws IOException, HunterException{ 
    boolean res = false; 

    OptedPlan optedPlan = getCurrentSubscription(user); 
    switch (optedPlan.getPlanType()){ 
    case FREE: res = checkFreeSubscription(optedPlan); 
     break; 
    case PREMIUM: res = checkPremiumSubscription(optedPlan,user); 
     break; 

    } 

    return res; 
} 

    /** 


* 
* @param optedPlan 
* @return 
*/ 
public boolean checkFreeSubscription(OptedPlan optedPlan){ 
     optedPlan.setPlanExpired(HunterUtil.isPlanExpired(optedPlan.getPlanExpirationDate())); 
     optedPlan.setPlanActive(HunterUtil.isPlanActive(optedPlan.getPlanActiveDate())); 
     //log.info("checkFreeSubscriptionResponse:: "+(optedPlan.isPlanActive())?(optedPlan.getMaxConnectionCount()>0 && optedPlan.getMaxJobCount()>0):true); 
    return(optedPlan.isPlanActive())?(optedPlan.getMaxConnectionCount()>0 || optedPlan.getMaxJobCount()>0):true; 


    } 

    private boolean checkPremiumSubscription(OptedPlan optedPlan,User user) throws IOException, HunterException{ 
    boolean res = false; 
    Date now = new Date(); 
    optedPlan.setPlanExpired(HunterUtil.isPlanExpired(optedPlan.getPlanExpirationDate())); 
Employer employer=(Employer)user; 
//First check stored expiry date 
log.info("checkPremiumSubscription:: "+optedPlan.isPlanExpired()); 
if(optedPlan.isPlanExpired()){ 
    // If expired, check for renewal 
    optedPlan = 
    getRenwRenewalCheckStrategy(optedPlan).getRenewal(optedPlan,user); 
    employer.setOptedPlan(optedPlan); 
    employerService.save(employer); 
    if (optedPlan != null){ 
    // Renewal found: check date and update information in db 
    res = optedPlan.getPlanExpirationDate().after(now); 
    log.info("checkPremiumSubscriptionFlag:: "+optedPlan.getPlanExpirationDate().after(now)); 
    } 
} 


return res; 
} 


    private OptedPlan getCurrentSubscription(User user) throws HunterException{ 
    Employer employer=(Employer)user; 

log.info("getCurrentSubscriptionResponse:: "+(HunterUtil.isNull(employer.getOptedPlan())?inAppPurchaseService.setFreePlanInEmployer(new StripeChargeTokenDto("FREE",DeviceType.ANDROID), employer) 
     :employer.getOptedPlan())); 
return (HunterUtil.isNull(employer.getOptedPlan())?inAppPurchaseService.setFreePlanInEmployer(new StripeChargeTokenDto("FREE",DeviceType.ANDROID), employer) 
     :employer.getOptedPlan()); 
    } 

    private RenewalCheckStrategy getRenwRenewalCheckStrategy(OptedPlan optedPlan){ 
    RenewalCheckStrategy res = null; 
    res = (optedPlan.getDeviceType().equals(DeviceType.ANDROID))?STRATEGY_GOOGLE:STRATEGY_APPLE; 

    return res; 
    } 
    } 

inAppPurchaseService就像

public interface InAppPurchaseService extends GenericService<BillingDetails> { 
     OptedPlan setFreePlanInEmployer(StripeChargeTokenDto stripeChargeTokenDto,Employer employer)throws HunterException; 
    String gettingResponseForReceiptValidation(InAppPurchaseReceiptDto inAppPurchaseReceiptDto,Employer employer) throws HunterException; 
    JSONObject createRequestForValidation(String  inAppPurchaseReceipt,Employer employer) throws HunterException; 
    void receiptForSuccessTransaction(InAppPurchaseReceiptResponse  inAppResponse, Employer employer); 
    void updateOptedPlanOfEmployer(InAppPurchaseReceiptResponse  inAppResponse, Employer emp,String productId,DeviceType deviceType) throws  HunterException; 
} 

另请注意InAppPurchaseServiceImpl我在我的代码中添加了@Service注释。

+0

什么是你的MVC配置,你可以显示那些? –

+0

您需要添加组件注释为你的类这样Spring容器会扫描并绑定到你想要的东西与自动装配Autowired –

+0

我只使用基于注解配置不和注释我使用的是@EnableAutoConfiguration SpringBootApplication EnableMongoAuditing EnableSwagger2 EnableAsync 我的基类中的EnableScheduling –

回答

1

在课堂SubscriptionChecker的顶部应@Component,因为SubscriptionChecker不是由Spring上下文初始化。

+0

我在subscriptionChecker类中添加了@Component,但它不起作用 –

+0

SubscriptionChecker类应该在SpringBootApplication类的包中。 –

+0

是它在同一个包中 –

0

您的SubscriptionChecker不由Spring管理。

对于@Autowired注释工作,你必须标注那类要么

@Component 
@Service 
@Controller 
@Repository 
+0

我已经添加@Service在我InAppPurchaseServiceImpl注释,我认为它足以使其自动连接服务 –

+0

是的,这足以使该服务自动连接,但你只能将其自动装配成也由Spring管理的类。因此您的SubscriptionChecker也必须有我提到的 – Janar

+0

测试的其中一个注释,但它不起作用。 –