I followed an example which stated two contradictory flows and I would know to know which one is the correct one:
flow #1: Everytime VideoSvc is instantiated, Spring looks at the @Configuration class (VideoConf) to find an implementation of StorageSystem and sets the variable 'storage' in the VideoSvc class to what the method annotated with @Bean returns.
flow #2: At run-time, the VideoConf class is instantiated, and an object is proactively created of type StorageSystem as the method annotated with @Bean is run. Then, Spring looks for any @Autowired variables to which this object can be assigned to. It finds the variable 'storage' in VideoSvc, and conveniently assigns the return type.
So which one is the correct flow? I'm inclined to think that it's wasteful to proactively create an instance of VideoConf and run this storageSystem() method, and then try to find a variable to plug it into, and rather, it makes more sense to look at the variables first which are annotated with the @Autowired annotation, and then try to find an appropriate assignment for them... but I'm not too sure.