zoukankan      html  css  js  c++  java
  • Spring学习笔记(三)

    接上篇

    注入集合属性

    主要为数组、List、Map集合

    比较简单直接放例子

    //Stu类
    public class Stu {
    
        //1 数组类型属性
        private String[] courses;
        //2 集合类型属性
        private List<String> list;
        //3 map类型属性
        private Map<String,String> maps;
        //4 set类型属性
        private Set<String> sets;
    
        public void setSets(Set<String> sets) {
            this.sets = sets;
        }
        public void setCourses(String[] courses) {
            this.courses = courses;
        }
        public void setList(List<String> list) {
            this.list = list;
        }
        public void setMaps(Map<String, String> maps) {
            this.maps = maps;
        }
    
        @Override
        public String toString() {
            return "Stu{" +
                    "courses=" + Arrays.toString(courses) +
                    ", list=" + list +
                    ", maps=" + maps +
                    ", sets=" + sets +
                    '}';
        }
    }
    

    xml配置文件

    //xml配置文件
    <bean id="stu" class="com.qy.spring5.ListTest.Stu">
        <!--数组属性注入-->
        <property name="courses">
            <array>
                <value>java课程</value>
                <value>数据库课程</value>
            </array>
        </property>
        <!--list属性注入-->
        <property name="list">
            <list>
                <value>大王</value>
                <value>小王</value>
            </list>
        </property>
        <!--map属性注入-->
        <property name="maps">
            <map>
                <entry key="JAVA" value="java"></entry>
                <entry key="MYSQL" value="mysql"></entry>
            </map>
        </property>
        <!--set属性注入-->
        <property name="sets">
            <set>
                <value>set1</value>
                <value>set2</value>
            </set>
        </property>
    </bean>
    
    //测试类
    @Test
    public void testOrder(){
        // 1 加载Spring配置文件
        ApplicationContext context =
                new ClassPathXmlApplicationContext("com/day3/spring5/ListTest/bean.xml");
        // 2 获取配置创建的对象
        Stu stu = context.getBean("stu", Stu.class);
        // 3 输出配置创建的对象
        System.out.println(stu);
    }
    

    记清楚每个集合重要的组件,这一部分就可以掌握

    外部Bean注入

    //Stu类
    public class Stu {
        private List<Course> course;
        public void setCourse(List<Course> course) {
            this.course = course;
        }
        public void test(){
            System.out.println(course);
        }
    }
    
    //Course类
    public class Course {
    
        private String cname;
        public void setCname(String cname) {
            this.cname = cname;
        }
        @Override
        public String toString() {
            return "Course{" +
                    "cname='" + cname + '\'' +
                    '}';
        }
    }
    

    xml配置文件

    //xml配置文件
    <bean id="stu" class="com.day3.spring5.ListTest.Stu">
        <property name="course">
            <list>
                <ref bean="course1"></ref>
                <ref bean="course2"></ref>
            </list>
        </property>
    </bean>
    <bean id="course1" class="com.day3.spring5.ListTest.Course">
        <property name="cname" value="Sprng5框架"></property>
    </bean>
    <bean id="course2" class="com.qy.spring5.ListTest.Course">
        <property name="cname" value="MyBatis框架"></property>
    </bean>
    

    IOC操作Bean管理(FactoryBean)

    1、Spring有两种类型bean,一种普通bean,另一种工厂bean(FactoryBean)

    2、普通bean:在配置文件中定义bean类型就是返回类型

    3、工厂bean:在配置文件定义bean类型可以和返回类型不一样


    接下来来讲讲实现步骤

    第一步:创建工厂类,实现接口FactoryBean

    //MyBean类
    public class MyBean implements FactoryBean {
        private String cname;
    
        @Override
        // 定义返回的类型为Course
        public Course getObject() throws Exception {
            Course course = new Course();
            course.setCname("Java课程");
            return course;
        }
    
        @Override
        public Class<?> getObjectType() {
            return null;
        }
        @Override
        public boolean isSingleton() {
            return false;
        }
    }
    //Course类
    public class Course {
        private String cname;
    
        public String getCname() {
            return cname;
        }
    
        public void setCname(String cname) {
            this.cname = cname;
        }
    }
    

    xml配置文件

    <bean id="myBean" class="com.day4.spring5.MyBeanTest.MyBean"></bean>
    

    测试类

    //测试类
    //会发现获取myBean的返回值已经变为了Course
    @Test
    public void test(){
        //1 加载xml配置文件
        ApplicationContext context =
                new ClassPathXmlApplicationContext("com/day4/spring5/MyBeanTest/bean.xml");
        //2 获取配置文件创建的对象
        Course course = context.getBean("myBean", Course.class);
        //3 输出获得的对象
        System.out.println(course.getCname());
    }
    

    最后我们来说说作用域

    在Spring中,默认情况下,bean都为单实例对象,可通过设置bean的属性scope设置多实例还是单实例。

    scope属性值:

    • 第一个值,默认值,singleton,表示单实例对象
    • 第二个值,prototype,表示多实例对象
    //测试类
    @Test
    public void testBook(){
        // 1 加载Spring配置文件
        ApplicationContext context =
                new ClassPathXmlApplicationContext("com/qy/spring5/bean1.xml");
        // 2 获取配置创建的对象
        Book book1 = context.getBean("book",Book.class);
        Book book2 = context.getBean("book",Book.class);
        // 3 输出配置创建的对象的属性
        System.out.println(book1);
        System.out.println(book2);
    }
    
    //xml配置文件
    <bean id="book" class="com.day4.spring5.Book" scope="prototype"></bean>
    
    //测试类输出
    com.qy.spring5.Book@365185bd
    com.qy.spring5.Book@18bf3d14
     
    // 发现创建的对象地址不同,说明创建了多实例对象
    
  • 相关阅读:
    带编译器的codeblocks下载地址
    联想拯救者s15k重装w10系统教程
    w10下Oracle 11g完全干净卸载
    小机房的树(codevs 2370)
    NOIP[2015] 运输计划(codevs 4632)
    ⑨要写信(codevs 1697)
    酒厂选址(codevs 1507)
    美丽的大树(codevs 2124)
    乘法运算(codevs 3254)
    货车运输(codevs 3287)
  • 原文地址:https://www.cnblogs.com/Emuaer/p/15090903.html
Copyright © 2011-2022 走看看