See FactoryBean Example - The MessageDigestFactoryBean

sequenceDiagram participant Main as FactoryBeanDemo participant Context as AnnotationConfigApplicationContext participant Config as MessageDigestConfig participant Factory as MessageDigestFactoryBean participant Digester as MessageDigester participant MD as MessageDigest Main->>Context: new AnnotationConfigApplicationContext(MessageDigestConfig.class) activate Context Context->>Config: Initialize configuration Config->>Factory: Create shaDigest bean Config->>Factory: Create defaultDigest bean Config->>Digester: Create digester bean Digester->>Factory: getObject() for shaDigest Digester->>Factory: getObject() for defaultDigest Context-->>Main: Context initialized deactivate Context Main->>Context: getBean("digester") Context-->>Main: Return MessageDigester Main->>Digester: digest("Hello World!") Digester->>MD: digest1.digest() Digester->>MD: digest2.digest() Main->>Context: getBean("&shaDigest") Context-->>Main: Return MessageDigestFactoryBean Main->>Factory: getObject() Factory-->>Main: Return MessageDigest Main->>MD: digest("Hello world".getBytes()) Main->>Context: close() activate Context Context-->>Main: Context closed deactivate Context