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>