使用lookup-method:
一、实体类:
package cn.edu.tju.domain2;
import java.time.LocalDateTime;
import java.util.Map;
public class Command {
private Map<String, Object> state;
public Map<String, Object> getState() {
return state;
}
public void setState(Map<String, Object> state) {
this.state = state;
}
public Object execute(){
System.out.println(LocalDateTime.now().toLocalTime());
return null;
}
}
package cn.edu.tju.domain2;
import java.util.HashMap;
public abstract class CommandManager {
public Object process(Object commandState) {
// grab a new instance of the appropriate Command interface
Command command = createCommand();
System.out.println("hash: " + command.hashCode());
// set the state on the (hopefully brand new) Command instance
command.setState(new HashMap<String, Object>());
return command.execute();
}
// okay... but where is the implementation of this method?
protected abstract Command createCommand();
}
二、配置文件:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
">
<bean class="cn.edu.tju.domain2.CommandManager" id="commandManager" >
<lookup-method bean="command" name="createCommand"/>
</bean>
<bean class="cn.edu.tju.domain2.Command" id="command" scope="prototype" >
</bean>
</beans>
三、主类:
package cn.edu.tju;
import cn.edu.tju.domain2.CommandManager;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.HashMap;
public class TestDiffScope2 {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("test8.xml","test2.xml");
CommandManager commandManager = context.getBean("commandManager", CommandManager.class);
commandManager.process(new HashMap<String, Object>());
CommandManager commandManager2 = context.getBean("commandManager", CommandManager.class);
commandManager2.process(new HashMap<>());
}
}