The basic principle is that beans define their dependencies (i.e. the other objects they work with) only through constructor arguments, arguments to a factory method, or properties which are set on the object instance after it has been constructed or returned from a factory method
Dependency Injection are of two types
1 Constructor based dependency injection.
2 Setter based dependency injection
setter-based dependency injection is realized by calling setters on your beans after invoking a no-argument constructor or no-argument static factory method to instantiate your bean. Beans defined in the BeanFactory that use setter-based dependency injection are true JavaBeans
constructor-based dependency injection is realized by invoking a constructor with a number of arguments,each representing a collaborator or property. Additionally, calling a static factory method with specific arguments, to construct the bean.