2、Spring如何创建对象
4、IOC创建如何创建对象
对象创建又三种方式:都写在了注解上。我们推荐用 key -- value创建因为见名之意,还不会歧义!
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="user" class="bing.User">
<!-- 第一种方式:通过index获取-->
<constructor-arg index="0" value="bingbing"/>
</bean>
<bean id="student" class="bing.Student">
<!-- 方式二:通过key value-->
<constructor-arg name="gender" value="小仙女"></constructor-arg>
<constructor-arg name="age" value="19"/>
</bean>
<bean id="student2" class="bing.Student">
<!-- 方式三:通过 类型或许,不推荐可能会出现歧义比如两个String-->
<!-- 这里以及上面为什么使用全类名? 肯定用到了反射-->
<constructor-arg type="java.lang.String" value="女"/>
<constructor-arg type="int" value="18"/>
</bean>
<bean id="teacher" class="bing.Teacher">
<!-- 我们来试一下两个String类型会发生什么情况-->
<constructor-arg type="java.lang.String" value="girl"/>
<constructor-arg type="java.lang.String" value="刘老师"/>
</bean>
<!-- 相当于new对象,对象名为person,只有这一个对象-->
<bean id="person" class="bing.Person">
</bean>
</beans>
- 测试对象是怎么创建的,两个相同的bean对象是相同的
import bing.Person;
import bing.Student;
import bing.Teacher;
import bing.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @author zhangbingbing
* @version 1.0
* @date 2020/5/15 20:17
*/
public class MyTest {
public static void main(String[] args) {
//第一步获取上下文
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//我们测试两个user引用是否是同一个对象
User user = (User) context.getBean("user");
User user2 = (User) context.getBean("user");
System.out.println(user.hashCode() == user2.hashCode());
System.out.println(user);
//======================================================
Student student = (Student) context.getBean("student");
Student student2 = (Student) context.getBean("student2");
System.out.println(student);
System.out.println(student2);
//测试两个String会出现什么情况
Teacher teacher = (Teacher)context.getBean("teacher");
System.out.println(teacher);
/**输出内容:
* Person被创建!!
* true
* User{name='bingbing'}
* Student{gender='小仙女', age='19'}
* Student{gender='女', age='18'}
* Teacher{name='girl', gender='刘老师'} //默认顺序,所以不推荐用
*
*/
}
}
总结:Bean标签表示new一个对象,其中id就是对象引用,指向这个对象的内存地址!