Bean的三种实例化方式:
1、无参构造器方法 2、静态工厂的方法 3、实例工厂的方法
Spring配置文件:applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--UserService的创建权交给了Spring-->
<bean id = "userService" class="com.imooc.ioc.demo1.UserServiceImpl">
<property name="name" value="李雪"/>
</bean>
<!--Bean的实例化的三种方式-->
<!--第一种:无参构造器的方法-->
<bean id="bean1" class="com.imooc.ioc.demo2.Bean1"></bean>
<!--Bean的实例化的三种方式-->
<!--第二种:静态工厂的方法-->
<bean id="bean2" class="com.imooc.ioc.demo2.Bean2Factory" factory-method="createBean2"></bean>
<!--第三种:实例工厂方式-->
<bean id="bean3Factory" class="com.imooc.ioc.demo2.Bean3Factory"/>
<bean id="bean3" factory-bean="bean3Factory" factory-method="createBean3" />
</beans>
测试类
package com.imooc.ioc.demo2; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * Bean的实例化的三种 */ public class SpringDemo2 { @Test public void demo1(){ //创建工厂 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); //通过工厂获得类的实例 Bean1 bean1 = (Bean1) applicationContext.getBean("bean1"); } @Test public void demo2(){ //创建工厂 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); //通过工厂获得类的实例 Bean2 bean2 = (Bean2) applicationContext.getBean("bean2"); } @Test public void demo3(){ //创建工厂 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); //通过工厂获得类的实例 Bean3 bean3 = (Bean3) applicationContext.getBean("bean3"); } }
第一种采用无参数的构造方法的方式
package com.imooc.ioc.demo2; /** * Bean的实例化的三种方式:采用无参数的构造方法的方式 */ public class Bean1 { public Bean1(){ System.out.println("Bean1被实例化"); } }
运行后显示:Bean1被实例化
第二种静态工厂实例化方式
package com.imooc.ioc.demo2; /** * Bean的实例化三种方式:静态工厂实例化方式 */ public class Bean2 { }
package com.imooc.ioc.demo2; /** * Bean2的静态工厂 */ public class Bean2Factory { public static Bean2 createBean2(){ System.out.println("Bean2Factory方法已经执行"); return new Bean2(); } }
运行后显示:Bean2Factory方法已经执行
第三种实例工厂实例化
package com.imooc.ioc.demo2; /** * Bean的实例化三种方式:实例工厂实例化 */ public class Bean3 { }
package com.imooc.ioc.demo2; /** * Bean3的实例工厂 */ public class Bean3Factory { public Bean3 createBean3(){ System.out.println("Bean3的工厂被执行了"); return new Bean3(); } }
运行后显示:Bean3的工厂被执行了
在正常的情况下都会采用默认的方式:即无参数的构造方法的方式,如果类的构造特别复杂,则会采用第二种或第三种方式,OK~以上就是关于Bean的实例化的三种方式。希望对大家有所帮助!