– Start
点击此处观看本系列配套视频。
如果某个对象需要通过静态工厂或实例化工厂来创建,spring 该如何配置呢?
静态工厂
首先定义一个类,需要通过静态工厂创建对象。
package shangbo.spring.core.example5;
public class OutPutService {
private static OutPutService outPutService = new OutPutService();
private OutPutService() {
}
// 静态工厂
public static OutPutService createInstance() {
return outPutService;
}
public void outPut() {
System.out.println("Hello World");
}
}
然后定义 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">
<!--
class 指定包含静态工厂的类
factory-method 指定工厂方法
-->
<bean class="shangbo.spring.core.example5.OutPutService"
factory-method="createInstance"/>
</beans>
最后是测试类。
package shangbo.spring.core.example5;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App {
public static void main(String[] args) {
// 实例化 Spring IoC 容器
ApplicationContext context = new ClassPathXmlApplicationContext("example.xml", OutPutService.class);
// 从容器中获得 Service 对象
OutPutService printer = context.getBean(OutPutService.class);
// 使用对象
printer.outPut();
}
}
实例化工厂
首先定义一个类。
package shangbo.spring.core.example6;
public class OutPutService {
public void outPut() {
System.out.println("Hello World");
}
}
然后定义一个工厂类。
package shangbo.spring.core.example6;
public class ServiceLocator {
private static OutPutService outPutService = new OutPutService();
private ServiceLocator() {
}
// 工厂方法
public OutPutService createOutPutServiceInstance() {
return outPutService;
}
}
现在看看 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">
<!-- 工厂对象 -->
<bean id="serviceLocator" class="shangbo.spring.core.example6.ServiceLocator">
</bean>
<!--
factory-bean 指定工厂对象
factory-method 指定工厂方法
-->
<bean factory-bean="serviceLocator"
factory-method="createOutPutServiceInstance"/>
</beans>
最后定义测试类。
package shangbo.spring.core.example6;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App {
public static void main(String[] args) {
// 实例化 Spring IoC 容器
ApplicationContext context = new ClassPathXmlApplicationContext("example.xml", OutPutService.class);
// 从容器中获得 OutPutService 对象
OutPutService printer = context.getBean(OutPutService.class);
// 使用对象
printer.outPut();
}
}
– 更多参见:Spring Framework 精萃
– 声 明:转载请注明出处
– Last Updated on 2017-06-17
– Written by ShangBo on 2017-05-21
– End