本文内容
- 通过构造函数实例化bean
- 通过静态工厂方法实例化bean
- 通过实例工厂方法实例化bean
通过构造函数实例化bean
Spring中可以通过空构造函数或是默认构造函数来实例bean,直接上案例。
定义一个简单类
package com.crab.spring.ioc.demo01;
/**
* @author zfd
* @version v1.0
* @date 2022/1/13 12:05
* @关于我 请关注公众号 螃蟹的Java笔记 获取更多技术系列
*/
public class ConstructorBean {
}
配置文件
<?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">
<!--默认构造函数实例化-->
<bean class="com.crab.spring.ioc.demo01.ConstructorBean" id="constructorBean"/>
</beans>
来个测试测试进行测试
package com.crab.spring.ioc.demo01;
import static org.junit.Assert.*;
/**
* @author zfd
* @version v1.0
* @date 2022/1/13 13:32
* @关于我 请关注公众号 螃蟹的Java笔记 获取更多技术系列
*/
public class Test {
@org.junit.Test
public void test() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("demo01/spring.xml");
ConstructorBean constructorBean = context.getBean(ConstructorBean.class);
System.out.println(constructorBean);
context.close();
}
}
运行结果
com.crab.spring.ioc.demo01.ConstructorBean@371a67ec
通过静态工厂方法实例化bean
在定义使用静态工厂方法创建的 bean 时,使用 class 属性来指定包含静态工厂方法的类,并使用名为 factory-method
的属性来指定工厂方法本身的名称。
定义一个类,包含一个静态工厂方法返回该类的实例
package com.crab.spring.ioc.demo01;
/**
* @author zfd
* @version v1.0
* @date 2022/1/13 13:38
* @关于我 请关注公众号 螃蟹的Java笔记 获取更多技术系列
*/
public class StaticBean {
private static StaticBean instance = new StaticBean();
private StaticBean() {
}
/**
* 静态工厂方法返回实例
*
* @return
*/
public static StaticBean factoryMethod() {
return instance;
}
}
配置文件中配置静态工厂方法实例化bean
<?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">
<!--静态工厂方法-->
<bean class="com.crab.spring.ioc.demo01.StaticBean" id="staticBean" factory-method="factoryMethod"/>
</beans>
测试类
@org.junit.Test
public void test() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("demo01/spring.xml");
ConstructorBean constructorBean = context.getBean(ConstructorBean.class);
System.out.println(constructorBean);
System.out.println("测试静态工厂方法实例化类");
StaticBean staticBean = context.getBean(StaticBean.class);
System.out.println(staticBean); // 实例地址
System.out.println(staticBean == StaticBean.factoryMethod()); // true
context.close();
}
通过实例工厂方法实例化bean
与通过静态工厂方法进行实例化类似,使用实例工厂方法进行实例化从容器中调用现有 bean 的非静态方法来创建新 bean。 要使用此机制, clas