Spring自动注入bean是如何做到的
时间: 2023-03-31 16:02:19 浏览: 84
Spring自动注入bean是通过使用依赖注入(DI)实现的。在Spring容器中,所有的bean都被管理,并且可以通过注入方式来获取它们。Spring会自动扫描所有的bean,然后将它们注入到需要它们的地方,这样就可以实现自动注入bean的功能。具体实现方式包括:使用注解、XML配置文件、Java配置类等。
相关问题
如何获取Spring自动注入的bean
在Spring中,获取自动注入的bean可以使用@Autowired注解或者使用Spring的ApplicationContext对象。
使用@Autowired注解:
如果你想在某个类中获取自动注入的bean,可以在该类中使用@Autowired注解来注入该bean。例如,如果你想在一个名为MyService的类中注入一个名为MyDao的bean,可以像下面这样写:
```
@Service
public class MyService {
@Autowired
private MyDao myDao;
// ... other methods ...
}
```
这样,Spring会自动注入名为MyDao的bean到MyService中,并且你可以在MyService中随时使用myDao对象。
使用ApplicationContext对象:
如果你想在某个类中获取某个bean,可以通过ApplicationContext对象来获取该bean。例如,如果你想在一个名为MyService的类中获取一个名为MyDao的bean,可以像下面这样写:
```
@Service
public class MyService {
private MyDao myDao;
@Autowired
public MyService(ApplicationContext context) {
this.myDao = context.getBean(MyDao.class);
}
// ... other methods ...
}
```
这样,Spring会自动注入ApplicationContext对象,并且你可以通过调用context.getBean(MyDao.class)方法来获取名为MyDao的bean。需要注意的是,这种方式获取bean的方式可能会让代码变得复杂,所以建议优先考虑使用@Autowired注解方式来获取自动注入的bean。
spring boot注入bean
在 Spring Boot 中,我们可以使用 @Autowired、@Resource 或者 @Inject 注解来进行依赖注入。
1. @Autowired 注解
@Autowired 注解可以自动装配一个 bean 对象,它可以作用在字段、方法、构造器上。
(1)作用在字段上:
```java
@Component
public class UserService {
@Autowired
private UserDao userDao;
// ...
}
```
(2)作用在构造器上:
```java
@Component
public class UserService {
private final UserDao userDao;
@Autowired
public UserService(UserDao userDao) {
this.userDao = userDao;
}
// ...
}
```
(3)作用在方法上:
```java
@Component
public class UserService {
private UserDao userDao;
@Autowired
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
// ...
}
```
2. @Resource 注解
@Resource 注解也可以用来进行依赖注入,它可以作用在字段、方法上。与 @Autowired 注解不同的是,@Resource 注解可以通过 name 属性指定注入的 bean 名称。
```java
@Component
public class UserService {
@Resource(name = "userDao")
private UserDao userDao;
// ...
}
```
3. @Inject 注解
@Inject 注解也可以用来进行依赖注入,它和 @Autowired 注解类似。不同的是,@Inject 注解是 JSR-330 中定义的依赖注入规范,而 @Autowired 是 Spring 特有的注解。
```java
@Component
public class UserService {
@Inject
private UserDao userDao;
// ...
}
```
以上就是 Spring Boot 中常用的依赖注入方式。