Technology Encyclopedia Home >How to use dependency injection in Spring Framework?

How to use dependency injection in Spring Framework?

Dependency Injection (DI) in the Spring Framework is a design pattern that allows for loose coupling by injecting dependencies into components rather than having them create their own. This makes the code more modular, easier to test, and maintain.

How to Use Dependency Injection in Spring Framework:

  1. Define Dependencies: First, you need to define the dependencies that your class needs. These are typically interfaces or classes that provide some functionality.

    public interface MessageService {
        String getMessage();
    }
    
    public class EmailService implements MessageService {
        @Override
        public String getMessage() {
            return "Email Message";
        }
    }
    
  2. Configure Beans: In Spring, you configure beans (objects) and their dependencies using XML configuration, Java configuration, or component scanning.

    • XML Configuration:

      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.springframework.org/schema/beans
                                 http://www.springframework.org/schema/beans/spring-beans.xsd">
      
          <bean id="emailService" class="com.example.EmailService"/>
          <bean id="messageSender" class="com.example.MessageSender">
              <property name="messageService" ref="emailService"/>
          </bean>
      </beans>
      
    • Java Configuration:

      @Configuration
      public class AppConfig {
      
          @Bean
          public MessageService emailService() {
              return new EmailService();
          }
      
          @Bean
          public MessageSender messageSender() {
              MessageSender sender = new MessageSender();
              sender.setMessageService(emailService());
              return sender;
          }
      }
      
    • Component Scanning:

      @Component
      public class MessageSender {
          @Autowired
          private MessageService messageService;
      
          public void sendMessage() {
              System.out.println(messageService.getMessage());
          }
      }
      
  3. Inject Dependencies: Use annotations like @Autowired to inject dependencies into your classes.

    @Component
    public class MessageSender {
        @Autowired
        private MessageService messageService;
    
        public void sendMessage() {
            System.out.println(messageService.getMessage());
        }
    }
    
  4. Run the Application: Finally, run your application using the Spring context to get the beans and use them.

    public class Application {
        public static void main(String[] args) {
            ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
            MessageSender sender = context.getBean(MessageSender.class);
            sender.sendMessage();
        }
    }
    

Example:

Consider a scenario where you have a MessageSender class that needs to send messages. Instead of creating the MessageService (like EmailService) within MessageSender, you inject it.

@Component
public class MessageSender {
    @Autowired
    private MessageService messageService;

    public void sendMessage() {
        System.out.println(messageService.getMessage());
    }
}

Recommendation for Cloud Services:

For deploying and managing Spring applications in the cloud, consider using Tencent Cloud services like Tencent Kubernetes Engine (TKE) for container orchestration or Cloud Container Service (CCS) for simplified container management. These services provide scalable and reliable infrastructure to host your Spring applications, leveraging the benefits of cloud computing.