Spring

Spring属于容器性质,对每一层都提供技术支持。就像一个工厂,可以将所有对象创建和依赖关系维护交给Spring管理。 请输入图片描述

IOC ( 反转控制)

对象的创建及依赖关系的注入交由Spring。

DI(依赖注入)

注入方式:set方法注入、构造方法注入、字段注入 注入类型:值类型、引用类型

BeanFactory

原始接口,每次获得对象时才会创建。

ApplicationContext

容器一启动就会创建创建容器中配置的所有对象。

Bean元素的scope属性

  • singleton:单例对象,在容器中只存在一个实例。默认为singleton。
  • prototype:多例原型,每次创建都是新的对象。
  • 此外还有request、session等。

三种对象创建方式

构造器实例化

Bean:

    public class Bean {
    }

测试类

   public class TestConstructor {
       public static void main(String[] args){
           ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
           Bean bean1= (Bean) applicationContext.getBean("bean");
           System.out.println(bean1);
       }
    }

applicationContext.xml

    <bean id="bean" class="com.me.bean.instance.constructor.Bean"></bean>

静态工厂方式实例化

Bean

    public class Bean2 {
    }

工厂类

    public class StaticFactory {
        public static Bean2 getBean(){
            return new Bean2();
        }
    }

测试类

    public class TestStaticFactory {
        public static void main(String[] args){
            ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
            Bean2 bean2=(Bean2)applicationContext.getBean("bean2");
            System.out.println(bean2);
        }
    }

applicationContext.xml

    <bean id="bean2" class="com.me.bean.instance.static_factory.StaticFactory" factory-method="getBean"></bean>

实例工厂方式实例化

Bean

    public class Bean3 {
    }

工厂类

    public class InstanceFactory {
        public Bean3 getBean(){
            return new Bean3();
        }
    }

测试类

    public class TestInstanceFactory {
        public static void main(String[] args){
            ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
            Bean3 bean3=(Bean3)applicationContext.getBean("bean3");
            System.out.println(bean3);
        }
    }

applicationContext.xml

     <bean id="instanceFactory" class="com.me.instance.instance_factory.InstanceFactory"></bean>
    <bean id="bean3" factory-bean="instanceFactory" factory-method="getBean"></bean>