欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring中基于XML实例化Bean的四种方式

程序员文章站 2022-05-24 17:48:47
...

1.无参数构造器(默认构造器) (最常用)

spring在创建bean的时候自动调用无参构造器来实例化,相当于new Bean1()

Bean1.java

public class Bean1 {
    //默认无参构造
}

applicationContext.xml

<!-- 1.默认构造器实例化对象 -->
<bean id="bean1" class="com.alilaoye.demo02_instantiate_bean.way1.Bean1"/>

Bean1Test.java

public class Bean1Test {
    @Test
    public void test() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        Bean1 bean1 = (Bean1)applicationContext.getBean("bean1");
        System.out.println(bean1);
    }
}

2.静态工厂方法

Bean2.java

public class Bean2 {
    //默认无参构造
}

Bean2Factory.java

public class Bean2Factory {
    public static Bean2 getBean2() {
        //在做实例化的时候,可以做其他的事情,即可以在这里写初始化其他对象的代码
        //...
        return new Bean2();
    }
}

applicationContext.xml

<!-- 1.默认构造器实例化对象 -->
<!-- 2.静态工厂获取实例化对象 -->
<!-- class:直接指定到静态工厂类, factory-method: 指定生产实例的方法, spring容器在实例化工厂类的时候会自动调用该方法并返回实例对象 -->
<bean id="bean2" class="com.alilaoye.demo02_instantiate_bean.way2.Bean2Factory" factory-method="getBean2"/>

Bean2Test.java

public class Bean2Test {
    @Test
    public void test() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        Bean2 bean2 = (Bean2)applicationContext.getBean("bean2");
        System.out.println(bean2);
    }
}

3.实例工厂方法

Bean3.java

public class Bean3 {
    //默认无参构造
}

Bean3Factory.java

public class Bean3Factory {
    public Bean3 getBean3() {
        return new Bean3();
    }
}

applicationContext.xml

<!-- 3:实例工厂的方式实例化bean -->
<bean id="bean3Factory" class="com.alilaoye.demo02_instantiate_bean.way3.Bean3Factory"/>
<!-- factory-bean相当于ref:引用一个bean对象 -->
<bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"/>

Bean3Test.java

public class Bean3Test {
    @Test
    public void test() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        Bean3 bean3 = (Bean3)applicationContext.getBean("bean3");
        System.out.println(bean3);
    }
}

4.FactoryBean方式

Bean4.java

public class Bean4 {
    //默认无参构造
}

Bean4Factory.java

spring在实例化对象的时候回判断是否该对象实现了FactoryBean接口,如果实现了就直接调用

public class Bean4Factory implements FactoryBean<Bean4> {
    //产生对象
    @Override
    public Bean4 getObject() throws Exception {
        return new Bean4();
    }

    @Override
    public Class<?> getObjectType() {
        return null;
    }
}

applicationContext.xml

<!-- 4:FactoryBean-->
<!--spring在实例化对象的时候会判断是否该对象实现了FactoryBean接口,如果实现了就直接调用getObject()方法,并返回执行结果-->
<bean id="bean4" class="com.alilaoye.demo02_instantiate_bean.way4.Bean4Factory"/>

Bean3Test.java

public class Bean4Test {
    @Test
    public void test() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        Bean4 bean4 = (Bean4)applicationContext.getBean("bean4");
        System.out.println(bean4);
    }
}