我有一些抽象工厂
public interface AbstractViewersFactory {
IAbstractShapeViewer createRectangle(BaseOperationsListener<RectangleDTO> p);
IAbstractShapeViewer createOval(BaseOperationsListener<OvalDTO> p);
IAbstractShapeViewer createTriangle(BaseOperationsListener<TriangleDTO> p);
}
Run Code Online (Sandbox Code Playgroud)
并实现了Draw2DViewersFactory.现在,我想创建一个类,负责按模型创建演示者/查看器并由Spring配置它.所以,我需要在.xml配置中描述它应该调用的方法.它可以是这样的(伪配置)
<bean creator>
<constructor-args>
<list>
<bean describe-item> <constructor-args>model=Rectangle.class, method-for-viewer-create="createRectangle"</args>
<bean describe-item> <constructor-args>model=Oval.class, method-for-viewer-create="createOval"</args>
<list>
</constructor-args>
</bean>
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?
谢谢.
不确定有什么问题......它应该工作还是可能缺少什么?以下是代码:
public class TestOracleMap implements java.io.Serializable{
static TreeMap<String, Integer> map;
static TreeMap<String, Integer> localMap = new TreeMap<String, Integer>();
public static void StoreMapInDB(TreeMap<String, Integer> map) throws
IOException, FileNotFoundException{
try {
PreparedStatement insertMap = null;
//String insertString = "INSERT INTO TESTMAP(ID, MPFIELD) VALUES (1, ?)";
Connection con=null;
con.setAutoCommit(false);
Class.forName("oracle.jdbc.driver.OracleDriver");
con=DriverManager.getConnection(
"jdbc:oracle:thin:@oXXX",
"XXX",
"XXX");
ByteArrayOutputStream bos = new ByteArrayOutputStream() ;
ObjectOutputStream out = new ObjectOutputStream(bos);
out = new ObjectOutputStream(bos) ;
out.writeObject(map);
out.close();
byte[] buf = bos.toByteArray();
PreparedStatement prepareStatement = con.prepareStatement("insert into
TESTMAP(ID,MAPFIELD)values(?,?)");
prepareStatement.setLong(1, …Run Code Online (Sandbox Code Playgroud) 为什么我们可以写
(defn factory-foo [] (fn [] (println "foo")))
(apply (factory-foo) [])
Run Code Online (Sandbox Code Playgroud)
但不是:
(defn factory-bar [] #((println "bar")))
(apply (factory-bar ) []) ;throws NPE
Run Code Online (Sandbox Code Playgroud)
这是一个错误吗?
我有可嵌入的菲利克斯.我有一些API包和Impl.API导出接口C.Impl导入该接口并在激活器中注册impl.现在我想得到C impl otside OSGi
FrameworkFactory ff = new FrameworkFactory();
...
BundleContext bc = fwk.getBundleContext();
...
final ServiceReference[] serviceReferences = bc.getServiceReferences(C.class.getName(), "(objectclass=" + C.class.getName() + ")");
for(ServiceReference serviceReference : serviceReferences){
final Object service = bc.getService(serviceReference);
...
}
Run Code Online (Sandbox Code Playgroud)
现在我想与它互动.我可以用反射来做
System.out.println(service.getClass().getMethod("some").invoke(service)); //using
Run Code Online (Sandbox Code Playgroud)
但我无法施展它
System.out.println(service instanceof C); //prints false
Run Code Online (Sandbox Code Playgroud)
我想这来自不同的ClassLoaders.但我怎么解决呢?我们如何从外部与OSGi环境相互作用?或者我们可以将它全部放入OSGi容器中?