[英]Hibernate and Spring transactions - using private constructors/static factory methods
[英]Using spring to instantiate with static factory methods?
我正在使用spring3。 我有以下课程。
package com.net.core.ioc;
public interface Transport {
public void getTransport();
}
package com.net.core.ioc;
public class Car implements Transport{
public void getTransport(){
System.out.println("Transport type is Car");
}
}
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>
现在我的问题是spring是否管理使用SpringService.java类实例化的Car和Bus实例?因为我必须使用@Transactional注释对Car和Bus类进行注释。 可能吗?
Spring将管理您的Car
和Bus
实例,因为它们是ApplicationContext
一部分。 您所做的基本上与使用Spring FactoryBean
的操作相同,但是现在您正在使用自己的机制。
但是,在当前设置中, 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" />
现在,您可以在代码中进行查找,并将参数传递给lookup方法(请参阅javadoc )。
@Autowired
private ApplicationContext ctx;
public void myMethod() {
Car car = ctx.getBean(Car.class, "Mercedes");
}
上面的代码应为您提供一个名为Mercedes的新Car
实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.