Java 使用spring来实例化静态工厂方法?
我正在使用spring3。我有以下课程 Transport.java java java SpringService.java config.xmlJava 使用spring来实例化静态工厂方法?,java,spring,Java,Spring,我正在使用spring3。我有以下课程 Transport.java java java SpringService.java config.xml 现在我的问题是spring是否管理正在使用SpringService.java类实例化的Car和Bus实例?因为我必须用@Transactional注释Car和Bus类。可能吗?Spring将管理您的汽车和总线实例,因为它们是应用程序上下文的一部分。您所做的与SpringFactoryBean正常情况下所做的基本相同,但您现在正在使用自己的机制
现在我的问题是spring是否管理正在使用SpringService.java类实例化的Car和Bus实例?因为我必须用@Transactional注释Car和Bus类。可能吗?Spring将管理您的
汽车
和总线
实例,因为它们是应用程序上下文
的一部分。您所做的与SpringFactoryBean
正常情况下所做的基本相同,但您现在正在使用自己的机制
然而,在您当前的设置中,Car
和Bus
bean是单例的,因为它们将被创建一次,不确定这是否是您想要的
如果要将值传递给构造函数,只需修改工厂方法
public Transport createCarInstance(String name){
return new Car(name);
}
您的bean定义应该告诉您它是一个原型范围的bean
<bean id="springServiceCarInstance" factory-bean="springServiceStaticFactory" factory-method="createCarInstance" scope="prototype" />
上面的代码应该给你一个全新的
汽车
实例,名字是梅赛德斯。为什么一辆公共汽车会说它是汽车运输类型?Denium,非常感谢你的回答。spring如何管理Car和Bus,因为它们没有在spring配置文件中声明?是的,它们是通过工厂方法声明的。有趣的是,假设这个场景@M.Deinum,如果Car有一些自动关联的依赖项,当您用新的,新创建的实例将自动连接所需的依赖项?我认为不是,但如果我错了,请纠正我。我的观点是工厂是由Spring管理的,但工厂提供的对象不是,听起来只是创建实例,但这些bean的生命周期不是由Spring管理的,你有什么链接可以分享给我吗,很好。根据他的当前配置,生成的bean由Spring管理,因为它们是单例的。它与普通SpringFactoryBean
没有任何不同。工厂bean的结果被视为任何其他Springbean。
package com.net.core.ioc;
public class Bus implements Transport {
public void getTransport() {
System.out.println("Transport type is Car");
}
package com.net.core.ioc;
public class SpringService {
private static SpringService service = new SpringService();
//Static factory method
public static SpringService createService(){
return service;
}
//Instance factory methods
public Transport createCarInstance(){
return new Car();
}
public Transport createBusInstance(){
return new Bus();
}
}
}
<context:component-scan base-package="javabeat.net.core.ioc"/>
<bean id="springServiceStaticFactory" factory-method="createService"/>
<bean id="springServiceCarInstance" factory-bean="springServiceStaticFactory" factory-method="createCarInstance"/>
<bean id="springServiceBusInstance" factory-bean="springServiceStaticFactory" factory-method="createBusInstance"/>
</beans>
public Transport createCarInstance(String name){
return new Car(name);
}
<bean id="springServiceCarInstance" factory-bean="springServiceStaticFactory" factory-method="createCarInstance" scope="prototype" />
@Autowired
private ApplicationContext ctx;
public void myMethod() {
Car car = ctx.getBean(Car.class, "Mercedes");
}