Bean Configuration – create prototype method on demand using look-up method
@Configuration @Lazy(value=true) public class SalesforceAuthenticationConfigImpl implements SalesforceAuthenticationConfig { @Bean(name="loginToProductionSalesforce") @Scope(value="prototype") public PartnerConnection loginToProductionSalesforce() throws ConnectionException, InterruptedException { int retryCounter=1; productionPartnerConnection(); Date now = new Date(); while (partnerConnection==null && retryCounter <= RETRYAMOUNT || TimeUnit.MILLISECONDS.toMinutes(now.getTime() - partnerConnection.getServerTimestamp().getTimestamp().getTimeInMillis()) > MINUTESTILLTIMEOUT){ logger.info("loginToProductionSalesforce retry attempt: " + retryCounter); productionPartnerConnection(); retryCounter++; Thread.sleep(30*1000); } return partnerConnection; } @Bean public SalesforceAuthenticationFactory salesforceAuthenicationFactory(){ return new SalesforceAuthenticationFactory() { @Override public PartnerConnection createPartnerConnection() throws ConnectionException, InterruptedException { return loginToProductionSalesforce(); } }; } }
Configuration factory
@Bean public SalesforceAuthenticationFactory salesforceAuthenicationFactory(){ return new SalesforceAuthenticationFactory() { @Override public PartnerConnection createPartnerConnection() throws ConnectionException, InterruptedException { return loginToProductionSalesforce(); } }; }
Test Class
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes={SalesforceAuthenticationConfigImpl.class}) public class SalesforceAuthenticationServiceTest { @Autowired SalesforceAuthenticationFactory salesforceAuthenicationFactory; @Test public void testSalesforceAuthenitcationFactory(){ try { PartnerConnection pConnection = salesforceAuthenicationFactory.createPartnerConnection(); assertNotNull(pConnection.getConfig().getSessionId()); } catch (ConnectionException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Each time you call createPartnerConnection()() you will receive the reference to newly created instance of PartnerConnection class.