Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用spring来实例化静态工厂方法?_Java_Spring - Fatal编程技术网

Java 使用spring来实例化静态工厂方法?

Java 使用spring来实例化静态工厂方法?,java,spring,Java,Spring,我正在使用spring3。我有以下课程 Transport.java java java SpringService.java config.xml 现在我的问题是spring是否管理正在使用SpringService.java类实例化的Car和Bus实例?因为我必须用@Transactional注释Car和Bus类。可能吗?Spring将管理您的汽车和总线实例,因为它们是应用程序上下文的一部分。您所做的与SpringFactoryBean正常情况下所做的基本相同,但您现在正在使用自己的机制

我正在使用spring3。我有以下课程

Transport.java java java SpringService.java config.xml


现在我的问题是spring是否管理正在使用SpringService.java类实例化的Car和Bus实例?因为我必须用@Transactional注释Car和Bus类。可能吗?

Spring将管理您的
汽车
总线
实例,因为它们是
应用程序上下文
的一部分。您所做的与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" />

上面的代码应该给你一个全新的
汽车
实例,名字是梅赛德斯。

为什么一辆公共汽车会说它是汽车运输类型?Denium,非常感谢你的回答。spring如何管理Car和Bus,因为它们没有在spring配置文件中声明?是的,它们是通过工厂方法声明的。有趣的是,假设这个场景@M.Deinum,如果Car有一些自动关联的依赖项,当您用新的,新创建的实例将自动连接所需的依赖项?我认为不是,但如果我错了,请纠正我。我的观点是工厂是由Spring管理的,但工厂提供的对象不是,听起来只是创建实例,但这些bean的生命周期不是由Spring管理的,你有什么链接可以分享给我吗,很好。根据他的当前配置,生成的bean由Spring管理,因为它们是单例的。它与普通Spring
FactoryBean
没有任何不同。工厂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"); 
}