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就是对象引用,指向这个对象的内存地址!

posted @ 2020-05-26 21:19  贝加尔湖畔╭  阅读(301)  评论(0编辑  收藏  举报