Spring概念和三种对象创建方式

概念

Spring

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>