@Autowired写在private ExampleDao exampleDao;上不行吗
时间: 2024-02-24 14:53:10 浏览: 58
是的,@Autowired注解可以写在类成员变量上,也可以写在构造方法上。因此,您完全可以将@Autowired注解写在private ExampleDao exampleDao;上,如下所示:
```
@Service
public class ExampleService {
@Autowired
private ExampleDao exampleDao;
// ...
}
```
在上面的代码中,ExampleDao对象会被自动注入到ExampleService类的私有成员变量exampleDao中。
无论是将@Autowired注解写在类成员变量上还是写在构造方法上,Spring容器都会自动查找对应的Bean,并将其注入到需要的位置。只是使用构造方法注入时,可以更明确地表达依赖关系,并且在创建对象时必须注入依赖项,避免了空指针异常等问题。而使用类成员变量注入时,可以减少代码量,使代码更加简洁易读。
总之,两种注入方式都是可以的,具体应该根据实际情况选择。
相关问题
@Autowiredpublic void init( ExampleDao exampleDao)
在这个例子中,@Autowired注解用于ExampleService类中的init()方法上,表示该方法会在ExampleService对象创建完成后自动调用,并将ExampleDao对象作为参数传入该方法中。被@Autowired注解注释的参数ExampleDao对象会自动从Spring容器中获取,并传入到init()方法中。
因为这里是方法注入,所以被@Autowired注解注释的方法不能有返回值,否则Spring容器会将其视为一个Bean,而不是一个初始化方法。此外,被注解的方法不能是private或final修饰的方法,因为Spring容器需要通过反射来调用被注解的方法,如果方法是private或final修饰的,就无法调用该方法。
你在ExampleService类这段代码没使用@Autowired啊
非常抱歉,我的回答中出现了错误。在ExampleService类中的构造方法中,确实没有使用@Autowired注解。应该修改为如下代码:
```
public class ExampleService {
private ExampleDao exampleDao;
public ExampleService(ExampleDao exampleDao) {
this.exampleDao = exampleDao;
}
// ...
}
```
在上面的代码中,ExampleService类的构造方法中接收一个ExampleDao类型的参数,并将其赋值给类成员变量exampleDao。在@Configuration注解所标注的配置类中,通过@Bean注解创建ExampleDao对象,并在创建ExampleService对象时将ExampleDao对象传递给ExampleService的构造方法,这样就实现了依赖注入的功能。
再次感谢您指出我的错误。如果您还有其他问题,请随时提出。
阅读全文