use*_*829 5 java spring spring-3
我正在使用 spring3。我有以下课程。
package com.net.core.ioc;
public interface Transport {
public void doSave();
}
Run Code Online (Sandbox Code Playgroud)
package com.net.core.ioc;
public class Car implements Transport{
String name;
public Car(String name){
this.name=name;
}
public void doSave(){
//saving logic using name
}
}
Run Code Online (Sandbox Code Playgroud)
package com.net.core.ioc;
public class Bus implements Transport {
String id;
public Bus(String id){
this.id=id;
}
public void doSave() {
//saving logic using id
}
Run Code Online (Sandbox Code Playgroud)
package com.net.core.ioc;
public class ServiceLocator {
private static ServiceLocator service = new ServiceLocator ();
//Static factory method
public static ServiceLocator createService(){
return service;
}
//Instance factory methods
public Transport createCarInstance(String name){
return new Car(name);
}
public Transport createBusInstance(String id){
return new Bus(id);
}
}
}
Run Code Online (Sandbox Code Playgroud)
<context:component-scan base-package="com.net.core.ioc"/>
<bean id="serviceLocator" class="com.net.core.ioc.ServiceLocator"factory-method="createService"/>
<bean id="springServiceCarInstance" factory-bean="serviceLocator" factory-method="createCarInstance" scope="prototype"/>
<bean id="springServiceBusInstance" factory-bean="serviceLocator" factory-method="createBusInstance" scope="prototype"/>
</beans>
Run Code Online (Sandbox Code Playgroud)
现在我得到的豆子如下:
Transport request = (Transport)applicationContext.getBean("springServiceCarInstance","someName");
request.doSave();
Run Code Online (Sandbox Code Playgroud)
现在我可以在这里使用 spring 事务吗?我的意思是我可以使用 @Transactional 注释 Car 和 Bus 类吗?
不会。由于汽车和公共汽车不是由 spring 工厂创建的,因此您获得的实例将不是事务编织代理,因此注释毫无意义。
您想使用initializeBean或createBean通过spring上下文创建它。有关更多详细信息,请参阅AutoWireCapableBeanFactory上的 java 文档。
或者,您可以使用 spring 上下文将 Can 和 Bus 注册为原型 bean,并且只需使用 getBean( "beanName", BeanType.class ) 并且 spring 将始终返回它们的新实例。
@Component
@Scope("singleton")
public class CarFactory {
@Autowired
private AutowireCapableBeanFactory autowireCapableBeanFactory;
public Car create( Make make, Model model, Year year ) {
Car car = new Car( make, model, year );
// this will apply the post processors including ones that might wrap the original bean
// such as transaction interceptors etc.
Car carProxy = Car.class.cast(autowireCapableBeanFactory.configureBean(car, "carBean"));
return carProxy;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2629 次 |
| 最近记录: |