Bean的3种实例化方式
Bean有三种实例化
构造器实例化、静态工厂方式实例化和实例工厂方式实例化。
目录
概念:构造器实例化是指Spring容器通过Bean对应类中默认的无参构造方法来实例化Bean。
概念:在该方法中,需要我们自己创建一个静态工厂来创建Bean的实例
一、构造器实例化
概念:构造器实例化是指Spring容器通过Bean对应类中默认的无参构造方法来实例化Bean。
案例演示:
(1)在chapter02项目的java资源目录下创建一个包,名为:com.itheima.instance.constructor,在包下创建类Bean1
package com.itheima.instance.constructor;
public class Bean1 {
}
(2)配置Bean1类,在包下创建beans1.jsp文件
<?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-4.3.xsd">
<bean id="bean1" class="com.itheima.instance.constructor.Bean1"></bean>
</beans>
(3)在包下创建一个测试类InstanceTest1
package com.itheima.instance.constructor;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class InstanceTest1 {
public static void main(String[] args) {
// 定义配置文件的路径
String xmlPath = "com/itheima/instance/constructor/beans1.xml";
// ApplicationContext在加载配置文件时,对Bean进行实例化
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext(xmlPath);
Bean1 bean = (Bean1) applicationContext.getBean("bean1");
System.out.println(bean);
}
}
运行结果:
二、静态工厂方式实例化
概念:在该方法中,需要我们自己创建一个静态工厂来创建Bean的实例
演示案例:
(1)在src下创建一个新的包,取名为com.itheima.instance.static_factory;在该类下创建一个类Bean2
package com.itheima.instance.static_factory;
public class Bean2 {
}
(2)在包下创建静态工厂MyBean2Factory
package com.itheima.instance.static_factory;
public class MyBean2Factory {
public static Bean2 createBean() {
return new Bean2();
}
}
(3)在包下创建beans2.xml文件配置Bean2
<?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-4.3.xsd">
<bean id="bean2"
class="com.itheima.instance.static_factory.MyBean2Factory"
factory-method="createBean">
</bean>
</beans>
将类com.itheima.instance.static_factory.MyBean2Factory的静态工厂方法createBean的id配置为bean2,当向Spring容期的方法getBean()传入参数bean2时,调用com.itheima.instance.static_factory.MyBean2Factory类的静态方法createBean实例化Bean2返回。
(4)创建测试类InstanceTest2
package com.itheima.instance.static_factory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class InsatanceTest2 {
public static void main(String[] args) {
String xmlPath = "com/itheima/instance/static_factory/beans2.xml";
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext(xmlPath);
System.out.println(applicationContext.getBean("bean2"));
}
}
(5)运行结果:
三、实例工厂方式实例化
概念:采用直接创建Bean实例的方式。具体看演示讲解
演示案例:
(1)在src下创建一个的名为com.itheima.instance.factory的包,在该包下创建类Bean3
package com.itheima.instance.factory;
public class Bean3 {
}
(2) 在包下创建类MyBean3Factory
package com.itheima.instance.factory;
public class MyBean3Factory {
public MyBean3Factory() {
System.out.println("bean3工程实例化中");
}
// 创建bean3实例的方法
public Bean3 createBean() {
return new Bean3();
}
}
(4)创建beans3.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-4.3.xsd">
<bean id="myBean3Factory" class="com.itheima.instance.factory.MyBean3Factory"></bean>
<bean id="bean3" factory-bean="myBean3Factory" factory-method="createBean"></bean>
</beans>
在实例方式实例化这种方式中,配置文件里面需要配置实例化工厂的id,配置实例化Bean3的Bean的id和其调用的方法的id,也就是factory-bean属性和factory-method属性。
(5)在包下创建测试类InstanceTest03
package com.itheima.instance.factory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class InstanceTest3 {
public static void main(String[] args) {
String xmlPath = "com/itheima/instance/factory/beans3.xml";
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext(xmlPath);
System.out.println(applicationContext.getBean("bean3"));
}
}
(6)运行结果
三种方式演示完毕,有疑问或者有发现我写错的地方欢迎提出,互相学习
上一篇: 李嘉诚无锡演讲:骂到你成功
下一篇: 富养还是穷养,决定孩子的一生