Spring依赖注入的几种方式

一. 三种依赖注入

1. 字段注入
@Autowire 
private ExampleService exampleServiceImpl;

这种注入方式存在三个明显缺陷:

  1. 对象的外部可见性:也就是脱离了Spring容器那么这个对象就不会被注入进去。
  2. 循环依赖:字段注入不会被检测是否出现依赖循环。比如A类中注入B类,B类中又注入了A类。
  3. 无法设置注入对象为final:因为final的成员变量必须在实例化时同时赋值。
2. 构造器注入
private ExampleService exampleServiceImpl;

@Autowire
public ExampleController (ExampleService exampleServiceImpl){
	this.exampleServiceImpl = exampleServiceImpl;
}
  1. 因为用了构造器所以保证一定可以独立使用,不依赖Spring容器。
  2. 可以检测循环依赖。
  3. 如果注入的很多,那么构造方法要写很多参数,代码结构不是很清楚。
3. Setter注入
private ExampleService exampleServiceImpl;

@Autowire
public setExampleServiceImpl (ExampleService exampleServiceImpl){
	this.exampleServiceImpl = exampleServiceImpl;
}
  1. 利用set来注入保证不依赖Spring容器。
  2. 每个set单独注入某个对象,便于控制,并且可以实现选择性注入。
  3. 可以检测循环依赖。

结论:
因此一般如果强制注入选择构造器注入,可选注入的对象选择Setter注入方式。

二. Bean的作用域

1. @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) 
2. @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
  1. 默认的作用域是单例模式,用在无状态的情况下。
  2. 多例模式用在有状态的情况,比如请求对象和会话对象。

三. @Bean和@Component

  • @Component 修饰一个类,注解表明一个类会作为组件类,并告知Spring要为这个类创建bean。
  • @Bean 修饰一个返回对象的方法上,这个类一般是一个配置类(@Configuration),@Bean告诉Spring这个方法将会返回一个对象,这个对象要注册为Spring应用上下文中的bean,通常方法中包含了产生bean实例的逻辑。

四. 常用的注解

  • @Primary,@Qualifier 指定用那一个实例对象。
  • @ComponentScan 设置组件扫描范围
  • @Lazy 延迟加载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值