zoukankan      html  css  js  c++  java
  • 小庆的Spring学习笔记

    该内容全部基于xml的配置

    一、创建Bean的方式

    1.通过构造器创建bean对象,只需要在配置文件中声明bean的id和class,就会默认使用bean的无参构造方法创建bean,bean会很好的被创建,这种方式最好用了。

    2.通过静态工厂创建bean,这种方法允许我们自定义返回的是什么bean,需要在配置中制定静态工厂方法,该方法返回一个bean对象。

     <bean id="student" class="com.yqg.bean.Student" factory-method="getInstance"></bean>
    
    package com.yqg.bean;
    
    /**
     * @author yqg
     * @date 2019/01/29
     */
    public class Student {
        private String name;
        private Integer age;
        private String sex;
        public static Student getInstance(){
            return new Student();
        }
        public void speak (){
            System.out.println("I speak chinese ,teacher!");
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    }
    

      

    3.使用实例工厂创建bean,需要在配置文件中声明工厂类,然后声明需要被工厂创建的bean,并指定工厂方法,这也是一种注入bean的方法。

      <bean id="factory" class="com.yqg.util.Factory"></bean>
      <bean id="student1" factory-bean="factory" factory-method="getStudent"></bean>
    
    package com.yqg.util;
    
    import com.yqg.bean.Student;
    
    /**
     * @author yqg
     * @date 2019-01-30 09:22
     */
    public class Factory {
        public Student getStudent(){
            System.out.println("。。。");
            return new Student();
        }
    }
    

    4.通过java注解声明bean

    二、依赖注入bean的方式和实现方法

    1.通过setter方法注入,在bean中声明需要被注入的属性,并生成get和set方法,这是最常用的方式。

    2.通过构造器注入,在构造器中声明需要注入的bean,其目的是为了在创建bean时强制将一些必须的该bean依赖的bean同时创建。

    <!--通过构造方法注入bean-->
    <bean id="school" class="com.yqg.bean.School"> <constructor-arg ref="teacher"></constructor-arg> </bean>
    <!--通过set方法注入bean--> <bean id="teacher" class="com.yqg.bean.Teacher"> <property name="student" ref="student"></property> <property name="name" value="泰罗"></property> </bean>
    <!--通过静态工厂创建bean--> <bean id="student" class="com.yqg.bean.Student" factory-method="getInstance"></bean>

    3.自动注入,使用自动注入策略能够将该bean在被需要的时候依据自动注入策略注入到其他bean对象中。

    自动注入有no、byType、byName、constructor、autodecet五种方式,no就是不使用自动注入策略,在需要的使用时通过构造或者set手工注入依赖,byType意味着该类在其他bean中如果有相同类型的属性,该bean将会被注入到类中,同理byName意味着在其他bean中如果有属性的名称与该bean的id相同,就会被注入进去,constructor方式在构造器需要使用的时候以byType方式被注入,autodect是一种全能方案,如果有有参构造器使用constructor方式,否则使用byType自动装配。

    注意,byType的生成策略不能有多个相同类型但是不同id的bean,也就是一个类型只能有一个bean,不能有多个对象。

    <!--该bean使用byType装配策略-->
    <bean id="teacher" class="com.yqg.bean.Teacher" autowire="byType"> <property name="name" value="泰罗"></property> </bean>

      

  • 相关阅读:
    Java_Eclipse_Android安装
    deep_learning_Function_os.makedirs()
    deep_learning_Function_ Matplotlib 3D 绘图函数 plot_surface 的 rstride 和 cstride 参数
    deep_learning_Function_ numpy.random.randn()
    deep_learning_Function_list变量前面加星号,字典变量前面加两个星号
    deep_learning_Function_ lambda函数详解
    Unity 3D中C#的性能优化小陷阱
    1.Bacula各组件说明
    vmware修改虚拟机名称
    AWS IoT Greengrass 入门-模块3(第 1 部分):AWS IoT Greengrass 上的 Lambda 函数
  • 原文地址:https://www.cnblogs.com/yanqingguo/p/10370714.html
Copyright © 2011-2022 走看看