In Spring Boot, beans are managed objects that are instantiated, assembled, and otherwise managed by the Spring IoC (Inversion of Control) container. To use a bean in Spring Boot, you typically follow these steps:

Define the Bean

You define a bean by creating a class and annotating it with @Component or one of its specialized stereotypes like @Service, @Repository, or @Controller.

import org.springframework.stereotype.Component;

@Component
public class MyBean {
    // Bean implementation
}

Inject the Bean

You can inject the bean into other classes using constructor injection, field injection, or setter injection.

Constructor Injection

import org.springframework.stereotype.Component;

@Component
public class MyService {
    private final MyBean myBean;

    public MyService(MyBean myBean) {
        this.myBean = myBean;
    }

    // Other methods using myBean
}

Field Injection

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MyService {
    @Autowired
    private MyBean myBean;

    // Other methods using myBean
}

Setter Injection:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MyService {
    private MyBean myBean;

    @Autowired
    public void setMyBean(MyBean myBean) {
        this.myBean = myBean;
    }

    // Other methods using myBean
}

Use the Bean

Once injected, you can use the bean within your class as needed.

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MyService {
    private final MyBean myBean;

    @Autowired
    public MyService(MyBean myBean) {
        this.myBean = myBean;
    }

    public void doSomething() {
        // Use myBean here
    }
}

Enable Component Scanning (if necessary)

Ensure that your Spring Boot application is set up to scan the package containing your beans for components. Typically, Spring Boot does this by default.

To make it even more clear, let's create a simple example where we have a UserService that depends on a UserRepository bean. The UserRepository will be responsible for accessing the user data, and the UserService will use it to perform operations like fetching user details or saving new users.

First, let's define the UserRepository:

import org.springframework.stereotype.Repository;

@Repository
public class UserRepository {
    public void saveUser(User user) {
        // Logic to save user to a database
    }

    public User getUserById(long id) {
        // Logic to retrieve user from a database by id
        return null; // Placeholder for demonstration
    }
}

Now, let's define the UserService that depends on the UserRepository:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public void createUser(User user) {
        userRepository.saveUser(user);
    }

    public User getUserById(long id) {
        return userRepository.getUserById(id);
    }
}

In this example:

  • UserRepository is annotated with @Repository, indicating that it's a repository component.
  • UserService is annotated with @Service, indicating that it's a service component.
  • The UserService constructor takes a UserRepository parameter, indicating its dependency on UserRepository.
  • The methods in UserService delegate the actual user data operations to methods in UserRepository.

You can now use UserService in your application to create and retrieve users:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;

@SpringBootApplication
public class MyApp {
    public static void main(String[] args) {
        ApplicationContext context = SpringApplication.run(MyApp.class, args);

        // Get UserService bean from the context
        UserService userService = context.getBean(UserService.class);

        // Create a new user
        User user = new User();
        user.setId(1);
        user.setName("John Doe");
        userService.createUser(user);

        // Retrieve the user by id
        User retrievedUser = userService.getUserById(1);
        System.out.println("Retrieved User: " + retrievedUser.getName());
    }
}

In this example, MyApp is the main Spring Boot application class, where we retrieve the UserService bean from the Spring context and use it to create and retrieve users.