前面讲到了Spring创建对象Spring项目搭建,如何通过Spring创建对象_小魏快起床的博客-CSDN博客,那么在Spring中创建对象方式有哪些呢,这个问题也是外面很多面试官会问到的问题,这里小魏就带各位看官进入了解一下
首先声明一共有4种:
1、通过构造器实例化
2、通过FactoryBean接口进行实例化
3、通过静态工厂进行创建
4、通过实例工厂创建bean
第一种:通过构造器方式实例化
1、在Spring核心配置文件中配置一个bean
<!--1、构造器方式实例化-->
<bean id="animal" class="cn.xjxwc666.spring.Animal"></bean>
2、我们去将实体类对象的无参构造方法进行改造一下,添加一句输出的代码
class Animal {
private String name;
private Integer age;
public Animal() {
System.out.println("动物类型执行了无参构造方法");
}
public Animal(String name, Integer age) {
System.out.println("动物类型执行了有参构造方法");
this.name = name;
this.age = age;
}
}
3、在代码中通过getBean进行获取
public class SpringTest {
@Test
public void test() throws Exception{
//创建一个容器
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
//从容器中根据类型获取对象
Animal bean = context.getBean(Animal.class);
System.out.println(bean);
}
}
4、很清晰的可以看到结果中无参构造方法里面的代码被执行了
第二种:通过FactoryBean接口创建bean
1、创建一个类实现FactoryBean,同时提供一个泛型【比如我要创建Animal对象,就提供Animal】,实现里面的2个方法
public class FactoryBeanMethod implements FactoryBean<Animal> {
//决定创建一个什么样的对象
@Override
public Animal getObject() throws Exception {
return new Animal("小狗",2);
}
//决定返回什么样的类型
@Override
public Class<?> getObjectType() {
return Animal.class;
}
}
2、将此类交给spring管理
<!--2、FactoryBean接口实例化bean-->
<bean id="animal" class="cn.xjxwc666.spring.FactoryBeanMethod"></bean>
3、代码之中进行获取,得到的是Animal对象
第三种:通过静态工厂
1、创建静态工厂类,在工厂里面写一个静态方法获取类对象
public class StaticFactory {
//写一个静态方法,创建一个Animal对象并返回
public static Animal getInstance(){
return new Animal("小狗",20);
}
}
2、将静态工厂交给Spring管理,同时配置此工厂创建对象的方法
<!--3、静态工厂实例化-->
<bean id="animal" class="cn.xjxwc666.spring.StaticFactory" factory-method="getInstance"></bean>
3、代码获取查看
第四种:通过实例工厂创建bean
1、创建实例工厂类
public class InstanceCreateBean {
public Animal createBean(){
return new Animal("小狗",22);
}
}
2、将此实例工厂类交给Spring管理
<!--4、实例工厂实例化-->
<bean id="instanceCreateBean" class="cn.xjxwc666.spring.InstanceCreateBean"></bean>
<bean id="getget" factory-bean="instanceCreateBean" factory-method="createBean"></bean>
3、查看效果
总结:
构造器实例化方式就是反射调用了无参构造方法,然后创建了一个对象,注意一定要有无参构造方法,如果有参构造方法添加上了,记得添加上无参构造,不然无参构造方法会被覆盖,其他另外三种都可以不依赖于无参构造方法,只是我们手动的指定调用什么样的构造方法,总的来说,第一种和第四种用的较多
分享就到这里了,到站下车了