Spring注入

spring注入

接口注入,构造器注入,setter注入

接口注入(springboot支持)

即注解注入,在持久层,业务逻辑层,控制层的实现类上面分别加上@Repository,@Service,@Controller;在中立的类上加上@Component注解

构造器注入

bean管理的对象必须实现无参构造,否则不能创建对象。

img

然后在核心配置文件中,配置构造器注入

img

setter注入

创建DAO类和属性,提供get,set方法

img

创建Service类,创建DAO类型的成员变量,,提供get,set方法

img

在bean.xml中配置

img

转载于:

https://www.jianshu.com/p/1f55a652f017

构造注入与setter注入有什么区别?

  1. setter注入可以实现部分注入,构造器注入不能部分注入。
  2. 当setter注入和构造器注入都存在时,setter注入可以覆盖构造器注入。【构造器注入又被称为创建实例的第一项】
  3. setter不能保证所有的依赖都被注入,而构造器注入必须依赖都注入才会创建实例
  4. 构造器注入会产生A依赖于B,B又依赖于A,创建对象的时候会报出对象循环不能创建异常(ObjectCurrentlyInCreationException)。setter注入不会存在这种问题。

【Spring setter 注入是如何解决循环依赖问题的? 构造注入为啥解决不了循环依赖?】

1 注入是如何解决循环依赖问题的? 构造注入为啥解决不了循环依赖?
构造注入解决不了:因为构造方法创建实例,每次都要new一个要构造的实例bean,而A创建时,依赖B,就去创建B,B又依赖了A,继续构造A,如此循环下去 A(B) B(A) A(B)->…
设值注入:使用三级缓存来解决循环依赖问题;构造的对象使用无参构造方法,会把A先放入二级缓存(前置也会把A的工厂方法放到三级缓存),后面B,会从二级缓存中获取A(中间态)完成属性设置,B就直接进入了一级缓存中,递归回A,最后也进入一级缓存。
2 源码位置
1级放成品
2级是中间态
3级是lamb工厂方法

img

部分资料参考

https://blog.csdn.net/qfzhangwei/article/details/109849289

什么时候使用构造器注入,什么时候使用setteer注入?

两种依赖注入都可以,最好的方案时强制依赖选择构造器注入,可选依赖选择setter注入。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring注入注解是一种在Spring框架中进行依赖注入的方式。通过使用注解,我们可以方便地将依赖对象注入到需要使用它们的类中,从而实现解耦和灵活性。 Spring框架提供了多种注入注解,常用的有: 1. `@Autowired`:自动装配,通过类型进行匹配注入。可以用在构造方法、属性、方法上。当需要注入的对象在容器中有多个实例时,可以结合`@Qualifier`使用。 2. `@Inject`:与@Autowired类似,也是进行自动装配,通过类型进行匹配注入。不过@Inject是Java规范中定义的注解,需要导入`javax.inject`包才能使用。 3. `@Resource`:按名称进行注入。可以通过`name`属性指定要注入的对象名称,也可以通过`type`属性指定要注入的对象类型。 4. `@Value`:用于从配置文件中读取属性值并注入到类的字段中。可以使用`${}`表达式读取配置文件中的值。 5. `@Qualifier`:与@Autowired或@Resource配合使用,通过指定bean的名称来消除自动装配时的歧义性。 6. `@Primary`:与@Autowired或@Resource配合使用,当需要注入的对象在容器中有多个实例时,优先选择带有@Primary注解的实例。 除了上述常用的注入注解,Spring还提供了其他一些注解,如`@Component`、`@Service`、`@Repository`等,用于标识组件、服务、仓库等不同的类,并将其纳入到Spring容器中进行管理。 通过使用这些注解,我们可以在Spring框架中方便地实现依赖注入,提高代码的可读性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值