2011-11-08 102 views
2

我正在开发某种应由外部java应用程序调用的插件。 我的插件使用春天,因为我试图简化我的,因为我可以:如何在Spring应用程序上下文外创建Spring Bean

让我们考虑这是3D派对应用程序,它的主要功能调用我的插件。

public class ThirdPartyClass { 

    public static void main(String[] args) { 
     GeneralPlugin plugin = new MyPlugin(); 
     plugin.init(); 
     //calling ext. plugin functionality. 
     plugin.method1(); 
    } 
} 

现在,这是我的插件

package com.vanilla.spring; 

@Component 
    public class MyPlugin implements GeneralPlugin{ 

     @Autowired 
     Dao mydao; 

     public void init(){ 
      //some initiation logic goes here... 
     } 

     public void method1(){ 
      dao.delete(); 
     } 
    } 

现在我的道

package com.vanilla.spring; 

Component(value="dao") 
public class MyDao { 

    public void delete(){ 
//SOME DATABASE LOGIC GOES HERE!!! 
} 
} 

现在我的XML:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:p="http://www.springframework.org/schema/p" 
xmlns:context="http://www.springframework.org/schema/context" 
xsi:schemaLocation=" 
http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd 
<context:annotation-config /> 
<context:component-scan base-package="com.vanilla.spring"></context:component-scan> 
</beans> 

我的问题是,我道是空和我访问dao时会得到NullPointerException对象。

我 米相信它是因为我萌生出豆应用程序上下文和我的自动装配不正常的结果。

是否有任何其他方法,使自动装配工作?

+3

你的代码需要初始化Spring上下文 - 除非你告诉它春天不会初始化。 –

回答

3

“春豆” 只是:的Java bean。除了通过继承或对象实例赋予它们之外,它们没有内在的能力。

Spring应用程序上下文负责创建bean并“连线”它,这是在上下文中创建其他bean的过程,并使用结果调用bean的setter(和构造函数)来配置它们。要做到这一点,使用XML配置文件和注释来决定要创建什么以及在哪里放置它。

如果你不打算使用的实际应用上下文的,那么你必须做所有的工作自己,手动。也就是说,用适当的数据源创建DAO,创建插件bean,并在插件bean上设置DAO。

在这个特定的例子中,由于第三方应用程序控制插件bean的实例化,您可能必须a)在插件构造函数中创建DAO(这是您在Spring中使用以避免或者b)在插件构造函数中创建一个Application Context,并通过查询上下文来引用插件所需的bean。这不像让上下文做所有事情一样有用,但至少你不需要手动配置应用程序使用的其余bean(包括用户名,连接URL等)。

如果你去那么你就需要在Spring配置文件中的某处类路径或者以某种方式以其他方式能够在第二条路线由插件豆引用。

+0

我认为OP意味着使用上下文,只是没有初始化它。 –

+1

他的插件正在被第三方应用程序实例化,他认为注释会以某种方式启动并填充DAO。 –

+0

这就是为什么他需要初始化他的应用程序上下文。 –

相关问题