当前位置:   article > 正文

Spring框架依赖注入DI顺序_spring注入顺序

spring注入顺序

Spring 依赖注入的顺序

  1. 构造器方法注入
  2. 字段注入
  3. 属性或普通方法注入

注意:后面的注入会覆盖前面的值

测试代码

  1. package com.jade.spring.context.annotation7;
  2. import org.springframework.context.annotation.Bean;
  3. import org.springframework.context.annotation.Configuration;
  4. @Configuration
  5. public class ConfigForRegister {
  6. @Bean
  7. String fieldInject() {
  8. return "属性注入值";
  9. }
  10. @Bean
  11. String constructorInject() {
  12. return "构造器注入值";
  13. }
  14. @Bean
  15. String methodInject() {
  16. return "方法注入值";
  17. }
  18. @Bean
  19. String anotherMethodInject() {
  20. return "另一个方法注入值";
  21. }
  22. }
  1. package com.jade.spring.context.annotation7;
  2. import javax.inject.Named;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.stereotype.Component;
  5. @Component
  6. public class InjectOrder {
  7. @Autowired
  8. @Named("fieldInject")
  9. String log;
  10. {
  11. log = "手动属性赋值";
  12. System.out.println(log);
  13. }
  14. @Autowired
  15. public InjectOrder(@Named("constructorInject") String log) {
  16. System.out.println();
  17. System.out.println("进入构造器《="+this.log);
  18. System.out.println("第一步:构造器注入=》"+log);
  19. this.log = "手动构造器赋值";
  20. System.out.println(this.log);
  21. }
  22. @Autowired
  23. public void setValue(@Named("methodInject") String log) {
  24. System.out.println();
  25. System.out.println("进入方法《="+this.log);
  26. System.out.println("第三步:方法注入=》"+log);
  27. this.log = "手动方法赋值";
  28. System.out.println(this.log);
  29. }
  30. @Autowired
  31. public void setValue2(@Named("anotherMethodInject") String log) {
  32. System.out.println();
  33. System.out.println("再次进入方法《="+this.log);
  34. System.out.println("再次方法注入=》"+log);
  35. this.log = "再次手动方法赋值";
  36. System.out.println(this.log);
  37. }
  38. public String getValue() {
  39. return log;
  40. }
  41. }
  1. package com.jade.spring.context.annotation;
  2. import org.junit.Test;
  3. import org.springframework.context.ApplicationContext;
  4. import org.springframework.context.annotation.AnnotationConfigApplicationContext;
  5. import com.jade.spring.context.annotation7.ConfigForRegister;
  6. import com.jade.spring.context.annotation7.InjectOrder;
  7. public class InjectionOrderTest {
  8. @Test
  9. public void testInjectionOrder() {
  10. @SuppressWarnings("resource")
  11. ApplicationContext context = new AnnotationConfigApplicationContext(InjectOrder.class, ConfigForRegister.class);
  12. InjectOrder bean = context.getBean(InjectOrder.class);
  13. System.out.println(bean.getValue());
  14. }
  15. }

结果如下:

  1. 手动属性赋值
  2. 进入构造器《=手动属性赋值
  3. 第一步:构造器注入=》构造器注入值
  4. 手动构造器赋值
  5. 进入方法《=属性注入值
  6. 第三步:方法注入=》方法注入值
  7. 手动方法赋值
  8. 再次进入方法《=手动方法赋值
  9. 再次方法注入=》另一个方法注入值
  10. 再次手动方法赋值
  11. 再次手动方法赋值

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/858307
推荐阅读
相关标签
  

闽ICP备14008679号