Khi nào cần sử dụng @Autowired

Em còn 1 số điều mông lung vê việc sử dụng @Autowired trong Spring. Mọi người giúp em cùng thảo luận để clear hơn nhé:

public interface AccountService {
    public void createAccount();
}


public class AccountServiceImpl implements AccountService{
   @Override
   public void createAccount(){
     // do something in here  
   }
}

@Controller
public class AccountController{
    // Cách 1 dùng Autowired
   @Autowired
    AccountService actService;

   // Cách 2 khai báo biến static
   public static AccountService actService = new AccountService();

   // Cách 3 khai báo biến cục bộ
   private AccountService actService = new AccountService();

   public void action(){
       // Cách 4 khai báo biến bên trong hàm
       AccountService actService = new AccountService();
       
       actService.createAccount();
   }
}

So với những cách còn lại thì việc sử dụng @Autowired có gì khác biệt, lợi ích của việc sử dụng @Autowired và khi nào thì mình nên sử dụng nó?
Nhờ các anh/chị giải đáp giúp em với nhé.

@Autowired là một annotation của Spring, nó đánh dấu rằng biến này sẽ được init bởi bean container của Spring nếu có phần tử tương ứng. Theo mình, sử dụng @Autowired tuân thủ Dependency Injection (DI), và đó là tác dụng của nó. Spring khuyến khích bạn thiết kế chương trình tuân thủ theo DI, giúp ta dễ test, bảo trì và nâng cấp hơn khi không phải chính chúng ta trực tiếp init cho những dependency mà thành phần của chúng ta cần, từ đó chúng không bị ràng buộc với nhau

3 Likes

Thanks bạn!
Việc Spring Container nó scan lúc init để cấp phát vùng nhớ ban đầu cho các object đó thì nó sẽ dựa vào annotation là @Autowire hay @Service, hay còn annotation nào khác ko ạ?

nó sẽ dựa vào @Autowired để biết khi nào việc init là do container đảm nhiệm. Khi đó, container sẽ kiếm trong nó xem có thành phần thỏa yêu cầu không. Còn các lớp có @Component hay những annotation kế thừa nó sẽ được tạo bởi container luôn.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?