目前spring 创建bean的方式一共有3种类,分别是:xml配置,java配置和注解
此篇是xml配置
在resource下新建beans.xml
beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- xmlns:c="http://www.springframework.org/schema/c"-->
<!-- xmlns:p="http://www.springframework.org/schema/p"-->
<!-- 注入方式,构造器注入-->
<!--有参bean 方式下标注入-->
<bean id ="people1" class = "com.kang.People">
<constructor-arg index="0" value="chenkang1"></constructor-arg>
</bean>
<!--有参bean 方式类型注入,不建议使用,会重复-->
<bean id = "people2" class ="com.kang.People">
<constructor-arg type="String" value="chengkang2"></constructor-arg>
</bean>
<!--有参bean 方式名称,最常使用-->
<bean id = "people3" class="com.kang.People">
<constructor-arg name="name" value="chenakng3"></constructor-arg>
</bean>
<!--set方法注入-->
<!--无参bean,id 是唯一标识符,class是类的地址 name是别名,可以取多个-->
<bean id="animal" class="com.kang.Animal" name="animalAlias1 animalAlisa2">
<property name="name" value="chenkang"></property>
<property name="people" ref="people1"></property>
<property name="ageList">
<list>
<value>1</value>
<value>1</value>
</list>
</property>
<property name="map">
<map>
<entry key="身份证" value="12345634"></entry>
</map>
</property>
<property name="set">
<set>
<value>1</value>
<value>2</value>
</set>
</property>
</bean>
<!-- <!– c,p 命名空间注入,c其实就是构造器注入,p是set方法属性注入–>-->
<!-- <bean id="peopleCP" name="com.kang.People" >-->
<!-- </bean>-->
<!--别名,就是给bean取另外一个名字,2个都能用,但是bean中的name也可以取别名,且name更高级-->
<alias name="people" alias="peopleAlias"></alias>
<!--设计模式,单例模式和原型模式,默认为单例模式,单例模式就全局唯一对象,原型模式会创建多个对象-->
<bean id ="peopleScope" class = "com.kang.People" scope="singleton">
</bean>
<!-- 开启注解需要导入 xmlns:context="http://www.springframework.org/schema/context http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd 和注解支持"-->
<context:annotation-config/>
<!-- 扫码指定包下的注解-->
<context:component-scan base-package="com.kang"></context:component-scan>
</beans>
实体类
package com.kang;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Animal {
private String name;
private List<String> ageList;
private Map<String,String> map;
private Set<String> set;
@Autowired
private People people;
public Animal() {}
public Animal(String name, List<String> ageList, Map<String, String> map, Set<String> set, People people) {
this.name = name;
this.ageList = ageList;
this.map = map;
this.set = set;
this.people = people;
}
@Override
public String toString() {
return "Animal{" +
"name='" + name + '\'' +
", ageList=" + ageList +
", map=" + map +
", set=" + set +
", people=" + people +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getAgeList() {
return ageList;
}
public void setAgeList(List<String> ageList) {
this.ageList = ageList;
}
public Map<String, String> getMap() {
return map;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
public Set<String> getSet() {
return set;
}
public void setSet(Set<String> set) {
this.set = set;
}
public People getPeople() {
return people;
}
public void setPeople(People people) {
this.people = people;
}
}
package com.kang;
public class People {
private String name;
public People() {
}
public People(String name) {
this.name = name;
}
@Override
public String toString() {
return "People{" +
"name='" + name + '\'' +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
测试类:
package com.kang;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
//获取spring的上下文对象
ApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("beans.xml");
//从上下文中获得bean,依赖注入的本质是se方法注入的
Animal people1 = (Animal) classPathXmlApplicationContext.getBean("animalAlisa2");
System.out.printf(people1.toString());
}
}