spring构造器注⼊多个构造函数_使⽤构造器注⼊的好处
常⽤的注⼊⽅式
1.使⽤@Autowired,@Resource等注解⾃动注⼊,最为常见
1.注⼊⽅式⾮常简单,只需要加⼊需要注⼊的字段,附上该注解就完成
2.整体代码代码简洁明了
但是对于IOC容器以外的环境,除了使⽤反射提供需要的依赖之外,⽆法复⽤该实现类。并且使⽤field注⼊可能会导致循环依赖。
2.构造器注⼊
@Controller
public class UserController {
private final UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
}
相较于field注⼊,显得难看,臃肿,特别是注⼊的依赖很多的时候。
但是官⽅推荐还是有很多好处的。
3.setter注⼊
@Controller
public class UserController {
private UserService userService;
//使⽤⽅式上同,略
@Autowired
public void setUserService(UserService userService) {
this.userService = userService;
}
}
现在基本没有这种写法了,如果构造器注⼊参数太多,就会显得笨重,另外setter的⽅式能够让类在以后重新配置或者重新注⼊。
重点就是构造器注⼊
构造器注⼊的依赖总是能够在
依赖不为空。⽽且,构造器注⼊的依赖总是能够在构造器注⼊的⽅式能够保证注⼊的组件不可变
组件不可变,因为⽤final修饰了,并且保证需要的依赖不为空
返回客户端(组件)代码的时候保证完全初始化的状态。
返回客户端(组件)代码的时候保证完全初始化的状态
依赖不为空:当要实例化UserController的时候,由于⾃⼰实现了有参数的构造函数,所以不会调⽤默认构造函数,就需要Spring容器传⼊所需要的参数
1.有该类型的参数 ->传⼊,
2.⽆该类型的参数 ->报错,所以保证不会为空
完全初始化的状态:向构造器传参之前,要确保注⼊的内容不为空,就肯定要调⽤依赖组件的构造⽅法完成实例化。⽽在Java类加载实例化的过程中,构造⽅法是最后⼀步。所以返回来的都是初始化之后的状态。
spring ioc注解BeanCurrentlyInCreationException:Requested bean is currently 使⽤构造器注⼊,在spring项⽬启动的时候,就会抛出BeanCurrentlyInCreationException:Requested bean is currently in creation: Is there an unresolvable circular reference从⽽提醒避免循环依赖,如果是field注⼊的话,启动的时候就不会报in creation: Is there an unresolvable circular reference
错,在使⽤那个bean的时候才会报错。
使⽤构造器注⼊的好处
1.保证依赖不可变(final关键字)
2.保证依赖不为空(省去了我们对其检查)
3.保证返回客户端(调⽤)的代码的时候是完全初始化的状态
4.避免了循环依赖
5.提升了代码的可复⽤性
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论