• Spring Bean 注入 1


    1.代码结构图

    xxx

    2.bean代码

    package com.xxx.bean;
    
    /**
     * Created with IntelliJ IDEA.
     * User: zhenwei.liu
     * Date: 13-7-18
     * Time: 上午1:25
     * To change this template use File | Settings | File Templates.
     */
    public abstract class People {
        protected String name;
        protected int age;
        protected Pet pet;
    
        public abstract String speak();
    
        @Override
        public String toString() {
            return "I am " + name + ", I'm " + age +
                    " years old. And I have a pet named " + pet.getName();
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public Pet getPet() {
            return pet;
        }
    
        public void setPet(Pet pet) {
            this.pet = pet;
        }
    }
    
    package com.xxx.bean;
    
    /**
     * Created with IntelliJ IDEA.
     * User: zhenwei.liu
     * Date: 13-7-18
     * Time: 上午1:28
     * To change this template use File | Settings | File Templates.
     */
    public class Chinese extends People {
        public Chinese(String name, int age, Pet pet) {
            this.name = name;
            this.age = age;
            this.pet = pet;
        }
    
        public Chinese() {
        }
    
        @Override
        public String speak() {
            return "I can speak Chinese";
        }
    }
    
    package com.xxx.bean;
    
    import java.util.List;
    
    /**
     * Created with IntelliJ IDEA.
     * User: zhenwei.liu
     * Date: 13-7-18
     * Time: 上午2:14
     * To change this template use File | Settings | File Templates.
     */
    public class American extends People {
        private List<Pet> petList;
    
        @Override
        public String speak() {
            return "I can speak English!";
        }
    
        public List<Pet> getPetList() {
            return petList;
        }
    
        public void setPetList(List<Pet> petList) {
            this.petList = petList;
        }
    }
    
    package com.xxx.bean;
    
    /**
     * Created with IntelliJ IDEA.
     * User: zhenwei.liu
     * Date: 13-7-18
     * Time: 上午1:26
     * To change this template use File | Settings | File Templates.
     */
    public abstract class Pet {
        protected String name;
        public abstract String bark();
    
        @Override
        public String toString() {
            return "My name is " + name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    
    package com.xxx.bean;
    
    /**
     * Created with IntelliJ IDEA.
     * User: zhenwei.liu
     * Date: 13-7-18
     * Time: 上午1:28
     * To change this template use File | Settings | File Templates.
     */
    public class Dog extends Pet {
        public Dog() {
        }
    
        public Dog(String name) {
            this.name = name;
        }
    
        @Override
        public String bark() {
            return "Wang wang";
        }
    }
    
    package com.xxx.bean;
    
    /**
     * Created with IntelliJ IDEA.
     * User: zhenwei.liu
     * Date: 13-7-18
     * Time: 上午1:29
     * To change this template use File | Settings | File Templates.
     */
    public class Cat extends Pet {
        public Cat() {
        }
    
        @Override
        public String bark() {
            return "miao";
        }
    }

    3.applicationContext.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:p="http://www.springframework.org/schema/p"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <!-- 构造方法注入示例 -->
        <!-- scope参数表示bean的作用域,如下 -->
        <!-- singleton,默认值,一个bean只有一个实例 -->
        <!-- prototype,每次调用创建一个实例 -->
        <!-- request,每次http请求对应一个实例,仅在Spring MVC上下文有效 -->
        <!-- session,每个session对应一个实例,仅在Spring MVC上下文有效 -->
        <!-- global-session,每个全局session对应一个实例,尽在Portlet上下文有效 -->
        <bean id="chineseA" class="com.xxx.bean.Chinese" scope="prototype">
            <constructor-arg value="Li Lei"/>
            <constructor-arg value="15"/>
            <constructor-arg ref="dogA"/>
        </bean>
    
        <bean id="dogA" class="com.xxx.bean.Dog">
            <constructor-arg value="Bobby"/>
        </bean>
    
        <!-- 工厂方法注入示例 -->
        <!-- 如果bena的类型是一个单例模式类 -->
        <!-- 那么注入这个类的方法则是使用其工厂方法生成实例 -->
        <!--<bean id="staticClass" -->
              <!--class="com.xxx.bean.StaticClass"-->
              <!--factory-method="getInstance" />-->
    
        <!-- 属性注入示例 -->
        <!-- 使用p前缀,直接引入属性或属性引用 -->
        <bean id="chineseB" class="com.xxx.bean.Chinese" scope="prototype"
                p:pet-ref="catA">
            <property name="name" value="Han Meimei" />
            <property name="age" value="18" />
            <!--<property name="pet" ref="catA" />-->
        </bean>
    
        <bean id="catA" class="com.xxx.bean.Cat"
              p:name="Kitty" />
    
        <!-- 集合注入示例 -->
        <!-- 集合注入包括List,Set,Map,Properties -->
        <!-- 此处以List为例子,其他不详写 -->
        <bean id="americanA" class="com.xxx.bean.American" scope="prototype">
            <property name="name" value="Michael Johnson" />
            <property name="age" value="28" />
            <property name="pet" ref="dogB" />
            <property name="petList">
                <list>
                    <ref bean="dogA" />
                    <ref bean="catA" />
                </list>
            </property>
        </bean>
    
        <bean id="dogB" class="com.xxx.bean.Dog"
              p:name="Cookie" />
    </beans>

    4.测试代码及结果

    package com.xxx.bean;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    /**
     * Created with IntelliJ IDEA.
     * User: zhenwei.liu
     * Date: 13-7-18
     * Time: 上午1:51
     * To change this template use File | Settings | File Templates.
     */
    public class ConstructInjectTest {
        /**
         * Spring的3种应用上下文介绍
         * ClassPathXmlApplicationContext-从运行时加载类路径下读取XML配置
         * FileSystemXmlApplicationContext-从文件系统读取XML配置文件(绝对路径)
         * XmlWebApplicationContext-从Web应用下读取XML配置文件
         */
        public static void main(String[] args) {
            ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
            People chinese = (People) ctx.getBean("chineseA");
            Pet dog = chinese.getPet();
            System.out.println(chinese);
            System.out.println(chinese.speak());
            System.out.println(dog);
            System.out.println(dog.bark());
        }
    }

    I am Li Lei, I'm 15 years old. And I have a pet named Bobby
    I can speak Chinese
    My name is Bobby
    Wang wang

    package com.xxx.bean;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    /**
     * Created with IntelliJ IDEA.
     * User: zhenwei.liu
     * Date: 13-7-18
     * Time: 上午2:13
     * To change this template use File | Settings | File Templates.
     */
    public class PropInjectTest {
        public static void main(String[] args) {
            ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
            People chinese = (People) ctx.getBean("chineseB");
            Pet dog = chinese.getPet();
            System.out.println(chinese);
            System.out.println(chinese.speak());
            System.out.println(dog);
            System.out.println(dog.bark());
        }
    }

    I am Han Meimei, I'm 18 years old. And I have a pet named Kitty
    I can speak Chinese
    My name is Kitty
    miao

    package com.xxx.bean;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    /**
     * Created with IntelliJ IDEA.
     * User: zhenwei.liu
     * Date: 13-7-18
     * Time: 上午2:23
     * To change this template use File | Settings | File Templates.
     */
    public class CollectionInjectTest {
        public static void main(String[] args) {
            ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
            American american = (American) ctx.getBean("americanA");
            Pet dog = american.getPet();
            System.out.println(american);
            System.out.println(american.speak());
            System.out.println(dog);
            System.out.println(dog.bark());
            System.out.println(american.getPetList());
        }
    }

    I am Michael Johnson, I'm 28 years old. And I have a pet named Cookie
    I can speak English!
    My name is Cookie
    Wang wang
    [My name is Bobby, My name is Kitty]

    自动装配配置

        <!-- 自动装配示例 -->
        <!-- autowire属性表示自动装配bean中的所有属性,也可以和手动装配混合使用 -->
        <!-- byName表示装配属性名与bean id相同的bean -->
        <!-- byType表示装配类型与bean class类型相同的bean -->
        <!-- constructor表示按照构造方法装配,装配规则与byType相同 -->
        <!-- autodetect表示先使用constructor装配,如果没有与构造方法匹配的参数,在使用byType装配 -->
        <!-- 当使用byType有多个符合条件的bean时,可以设置primary=true,表示有多个符合条件bean时使用此bean -->
        <!-- 如果不想让某个bean成被装配,可以设置autowire-candidate=false -->
        <bean id="autoChinese" class="com.xxx.bean.Chinese"
              autowire="byName" >
            <property name="name" value="#{chineseA.name}" />
        </bean>
    
        <!-- 可以在 beans 标签中配置全局自动装配 default-autowire="byType" -->
  • 相关阅读:
    CCPC 2020 长春站 部分简略题解
    atcoder arc106 D Powers
    循环节与拓展欧拉定理(广义欧拉降幂)
    最长公共上升子序列 题解
    namomo fish round1 A~C题解
    Codeforces Round #666 (Div. 2) A~E题解
    Educational Codeforces Round 93 Div2 A~E题解
    Codeforces Round #578 Div2 1200 A~E题解
    UVA11997 K Smallest Sums 题解
    LCA模板
  • 原文地址:https://www.cnblogs.com/zemliu/p/3197611.html
Copyright © 2020-2023  润新知