spring框架使用构造器注入时,为什么不需要写无参构造方法
时间: 2023-03-28 21:02:44 浏览: 233
Spring框架使用构造器注入时,会优先调用有参构造方法来创建对象,因此不需要写无参构造方法。如果没有有参构造方法,则会调用无参构造方法来创建对象。但是,如果使用构造器注入时,没有写无参构造方法,会导致编译错误。
相关问题
通过spring完成set和构造器注入
是的,Spring框架提供了两种方式来进行依赖注入:构造器注入和Setter方法注入。
构造器注入是指通过构造器来注入Bean的依赖。在Bean定义中,可以使用<constructor-arg>元素来指定构造器参数的值或者引用。
Setter方法注入是指通过Setter方法来注入Bean的依赖。在Bean定义中,可以使用<property>元素来指定Setter方法的属性值或引用。
下面是一个示例,演示如何使用构造器注入和Setter方法注入:
构造器注入:
```java
public class Foo {
private Bar bar;
public Foo(Bar bar) {
this.bar = bar;
}
}
<bean id="foo" class="com.example.Foo">
<constructor-arg ref="bar"/>
</bean>
```
Setter方法注入:
```java
public class Foo {
private Bar bar;
public void setBar(Bar bar) {
this.bar = bar;
}
}
<bean id="foo" class="com.example.Foo">
<property name="bar" ref="bar"/>
</bean>
```
spring为什么不推荐autowired进行依赖注入
Spring框架并不是不推荐使用@Autowired进行依赖注入,事实上@Autowired是Spring框架中最常用的依赖注入方式之一。但是,有一些情况下,使用@Autowired可能会导致一些问题,所以Spring官方文档提到了一些建议。
首先,使用@Autowired注解时,Spring会根据类型进行自动装配。如果存在多个类型相同的Bean,则会产生歧义,无法确定要注入哪个Bean,这时就会抛出异常。为了避免这种歧义,Spring推荐使用更明确的注解,如@Qualifier来指定具体的Bean。
其次,使用@Autowired时,如果要注入的Bean不存在,Spring默认会抛出NoSuchBeanDefinitionException异常。为了避免这种情况,可以将@Autowired的required属性设置为false,这样如果找不到匹配的Bean,Spring会将该属性设置为null而不是抛出异常。
最后,使用@Autowired注解进行依赖注入是基于反射实现的,会稍微增加一些性能开销。对于性能要求较高的场景,可以考虑使用构造器注入或者setter方法注入来替代@Autowired。
综上所述,虽然Spring框架并不是不推荐使用@Autowired进行依赖注入,但在特定情况下,使用更明确的注解、处理歧义和性能考虑等因素,可能会建议使用其他方式进行依赖注入。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)