Spring注入bean的常用的六种方式
一.通过注解注入的一般形式
Bean类
public class TestBean{ }
Configuration类
@Configuration注解去标记了该类,这样标明该类是一个Spring的一个配置类,在加载配置的时候会去加载他。
@Bean的注解,标明这是一个注入Bean的方法,会将下面的返回的Bean注入IOC。
//创建一个class配置文件 @Configuration public class TestConfiguration{ //将一个Bean交由Spring进行管理 @Bean public TestBean myBean(){ return new TestBean(); } }
测试类
ApplicationContext context = new AnnotationConfigApplicationContext(TestConfiguration.class); TestBean testBean = cotext.getBean("testBean",TestBean.class); System.out.println("testBean = " + testBean);
二.通过构造方法注入Bean
我们在生成一个Bean实例的时候,可以使用Bean的构造方法将Bean实现注入
Bean类
@Component public class TestBeanConstructor { private AnotherBean anotherBeanConstructor; @Autowired public TeanBeanConstructor(AnotherBean anotherBeanConstructor){ this.anotherBeanConstructor = anotherBeanConstructor; } @Override public String toString() { return "TeanBean{" + "anotherBeanConstructor=" + anotherBeanConstructor + '}'; } }
AnotherBean类
@Component(value="Bean的id,默认为类名小驼峰") public class AnotherBean { }
Configuration类
@Configuration @ComponentScan("com.company.annotationbean") public class TestConfiguration{ }
三.通过set方法注入Bean
@Component public class TestBeanSet { private AnotherBean anotherBeanSet; @Autowired public void setAnotherBeanSet(AnotherBean anotherBeanSet) { this.anotherBeanSet = anotherBeanSet; } @Override public String toString() { return "TestBeanSet{" + "anotherBeanSet=" + anotherBeanSet + '}'; } }
四.通过属性去注入Bean
@Component public class TestBeanProperty { @Autowired private AnotherBean anotherBeanProperty; @Override public String toString() { return "TestBeanProperty{" + "anotherBeanProperty=" + anotherBeanProperty + '}'; } }
五.通过List注入Bean
TestBeanList类
方法一:
@Component public class TestBeanList { private List<String> stringList; @Autowired public void setStringList(List<String> stringList) { this.stringList = stringList; } public List<String> getStringList() { return stringList; } }
方法二:
@Configuration @ComponentScan("annoBean.annotationbean") public class TestConfiguration { @Bean public List<String> stringList(){ List<String> stringList = new ArrayList<String>(); stringList.add("List-1"); stringList.add("List-2"); return stringList; } }
方法三:
@Bean //通过该注解设定Bean注入的优先级,不一定连续数字 @Order(34) public String string1(){ return "String-1"; } @Bean @Order(14) public String string2(){ return "String-2"; }
六.通过Map去注入Bean
@Component public class TestBeanMap { private Map<String,Integer> integerMap; public Map<String, Integer> getIntegerMap() { return integerMap; } @Autowired public void setIntegerMap(Map<String, Integer> integerMap) { this.integerMap = integerMap; } }
/** *第一种注入map方式 */ @Bean public Map<String,Integer> integerMap(){ Map<String,Integer> integerMap = new HashMap<String, Integer>(); integerMap.put("map-1",1); integerMap.put("map-2",2); return integerMap; }
/** *第二种注入map方式 */ @Bean public Integer integer1(){ return 1; } @Bean public Integer integer2(){ return 2; }
Name:zhengwei
Company:Beyond
思考:学而不思则罔,思而不学则殆!
积累:不积跬步无以至千里!