Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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应用程序上下文之外创建Springbean_Java_Spring_Jakarta Ee - Fatal编程技术网

Java 如何在Spring应用程序上下文之外创建Springbean

Java 如何在Spring应用程序上下文之外创建Springbean,java,spring,jakarta-ee,Java,Spring,Jakarta Ee,我正在开发某种插件,应该由外部java应用程序调用。 我的插件使用Spring,当然,我尽量简化了我的插件: 让我们考虑这是3D派对应用程序,它调用我的插件在它的主要功能。< /P> public class ThirdPartyClass { public static void main(String[] args) { GeneralPlugin plugin = new MyPlugin(); plugin.init(); //

我正在开发某种插件,应该由外部java应用程序调用。 我的插件使用Spring,当然,我尽量简化了我的插件:

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

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>

“Springbeans”就是:Java bean。除了通过继承或对象实例化赋予他们的能力之外,他们没有任何内在的能力

Spring应用程序上下文负责创建bean并“连接”它,这是在上下文中创建其他bean并使用结果调用bean的setter(和构造函数)来配置它们的过程。为此,is使用XML配置文件和注释来决定创建什么以及将其放置在何处

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

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


如果您选择第二种方法,那么您将需要类路径中的某个位置的Spring配置文件,或者插件bean能够以其他方式引用该文件。

您的代码需要初始化Spring上下文——除非您告诉Spring,否则Spring不会自动初始化。我认为OP的意思是使用上下文,只是还没有初始化。他的插件正在被第三方应用程序实例化,他希望注释会以某种方式进入并填充DAO,我想。这就是为什么他需要初始化他的应用程序上下文。这就是我在回答中所说的。:-)我说的是,如果他不打算使用实际的上下文,那么他必须手动创建bean。不管怎样,我认为他并不完全理解自动布线的工作原理,也不完全理解注释的作用(或不作用)。