spring boot不用@Autowired的其他注入方式
在Spring Boot中,除了@Autowired
注解之外,还有其他几种注入Bean的方式:
- 使用
@Inject
注解(来自Java EE),这与@Autowired
类似,但是提供了更大的灵活性,例如可以指定注入的范围和依赖的类型。 - 使用
@Resource
注解,这也是来自Java EE,但它通常根据名称而不是类型进行注入。 - 使用
ApplicationContext
获取Bean,这种方式适用于非注入式的用法,例如在方法中直接获取Bean。
以下是使用@Inject
和@Resource
的例子:
import javax.inject.Inject;
import javax.annotation.Resource;
public class MyService {
// 使用@Inject
@Inject
private MyDependency myDependency;
// 使用@Resource
@Resource
private MyDependency myDependency2;
// ...
}
使用ApplicationContext
的例子:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
@Service
public class MyService {
private final ApplicationContext context;
@Autowired
public MyService(ApplicationContext context) {
this.context = context;
}
public MyDependency getMyDependency() {
return context.getBean(MyDependency.class);
}
// ...
}
请注意,@Inject
和@Resource
需要在类路径中有相应的依赖项,而ApplicationContext
方法则需要一个已经配置好的Spring ApplicationContext
实例。
评论已关闭