Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.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应用程序中,是否将服务类(使用@Autowired)注入到主类(包含Main()方法的类)中?_Java_Spring_Frameworks_Autowired_Spring Annotations - Fatal编程技术网

Java 为什么我能';在这个Spring应用程序中,是否将服务类(使用@Autowired)注入到主类(包含Main()方法的类)中?

Java 为什么我能';在这个Spring应用程序中,是否将服务类(使用@Autowired)注入到主类(包含Main()方法的类)中?,java,spring,frameworks,autowired,spring-annotations,Java,Spring,Frameworks,Autowired,Spring Annotations,我在春天是个新手,我有以下问题 我正在实现一个Spring控制台应用程序(这不是一个web应用程序),它对数据库执行一些查询,我有以下配置: 1) 包含bean定义的beans.xml文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema

我在春天是个新手,我有以下问题

我正在实现一个Spring控制台应用程序(这不是一个web应用程序),它对数据库执行一些查询,我有以下配置:

1) 包含bean定义的beans.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"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


    <context:component-scan base-package="it.mycompany.myapp.profilatura.service" />

    <!-- bean definitions here -->
    <bean id="helloWorld" class="HelloWorld">
       <property name="message" value="Hello World!"/>
    </bean>

</beans>
如您所见,最后,它将执行以下方法调用:

utenteLoggatoService.getInfoUtenteLoggato();
这是自动连线的Utenelogatoservice类:

@Service
@Transactional(rollbackFor={Exception.class})
public class UtenteLoggatoService {

    public String getInfoUtenteLoggato() {
        return "TEST";
    }

}
@Component
public class MainApp {

    @Autowired
    private UtenteLoggatoService utenteLoggatoService;

    public static void main(String[] args) {

        ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");

        MainApp app = context.getBean(MainApp.class);

        app.start();

        //HelloWorld obj = (HelloWorld) context.getBean("helloWorld");

        //obj.getMessage();


   }  

    private void start() {
        System.out.println("APPLICATION STARTED");
        System.out.println(utenteLoggatoService.getInfoUtenteLoggato());
    }

}
问题是,当我执行此应用程序时,我在stacktrace中获得此错误消息:

Exception in thread "main" org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 8 in XML document from class path resource [Beans.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 8; columnNumber: 74; The prefix "context" for element "context:component-scan" is not bound.
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:399)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:252)
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:537)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:452)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at MainApp.main(MainApp.java:14)
Caused by: org.xml.sax.SAXParseException; lineNumber: 8; columnNumber: 74; The prefix "context" for element "context:component-scan" is not bound.
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203)
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:284)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:290)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2787)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:118)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
    at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:76)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadDocument(XmlBeanDefinitionReader.java:429)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:391)
    ... 14 more
线程“main”org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException:类路径资源[beans.xml]的xml文档中的第8行无效;嵌套异常为org.xml.sax.saxpasseeption;行号:8;栏目号:74;元素“上下文:组件扫描”的前缀“上下文”未绑定。 位于org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:399) 位于org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336) 位于org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304) 位于org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181) 位于org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217) 位于org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188) 位于org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:252) 位于org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127) 位于org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93) 位于org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129) 位于org.springframework.context.support.AbstractApplicationContext.AcquitainFreshBeanFactory(AbstractApplicationContext.java:537) 位于org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:452) 位于org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:139) 位于org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:83) 在MainApp.main(MainApp.java:14) 原因:org.xml.sax.saxpasseeption;行号:8;栏目号:74;元素“上下文:组件扫描”的前缀“上下文”未绑定。 位于com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203) 位于com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177) 在com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError上(XMLErrorReporter.java:400) 请访问com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327) 位于com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:284) 在com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement上(XMLNSDocumentScannerImpl.java:290) 位于com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2787) 位于com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606) 在com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next上(XMLNSDocumentScannerImpl.java:118) 位于com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510) 位于com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848) 位于com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777) 位于com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) 位于com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243) 在com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339) 位于org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:76) 位于org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadDocument(XmlBeanDefinitionReader.java:429) 位于org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:391) ... 14多 为什么??我错过了什么?如何解决此问题并将Utenelogatoservice用于MainApp


Tnx

我独自看着文档:

所以我有一个beans.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: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-4.1.xsd">


    <context:component-scan base-package="it.mycompany.myproject.profilatura.app" />
    <context:component-scan base-package="it.hp.miur.profilatura.service" />

    <!-- bean definitions here -->
    <bean id="helloWorld" class="it.mycompany.myproject.profilatura.app.HelloWorld">
       <property name="message" value="Hello World!"/>
    </bean>

</beans>
所以它是有效的,我认为这是最常见的解决方案


这样做,MainApp类是一个Spring组件,我将其实例化为一个Springbean,这样我就可以自动连接上下文中的另一个bean(作为Utenelogatoservice Utenelogatoservice

您收到的异常与您提出的问题无关。为什么这会解决任何问题?文档的哪一部分引导您找到这个解决方案?因为用这种方式,MainApp类是一个Spring组件,我将它实例化为一个bean,以便在上下文中自动连接另一个bean。这很好,请将这些细节添加到您的a中
<?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: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-4.1.xsd">


    <context:component-scan base-package="it.mycompany.myproject.profilatura.app" />
    <context:component-scan base-package="it.hp.miur.profilatura.service" />

    <!-- bean definitions here -->
    <bean id="helloWorld" class="it.mycompany.myproject.profilatura.app.HelloWorld">
       <property name="message" value="Hello World!"/>
    </bean>

</beans>
@Component
public class MainApp {

    @Autowired
    private UtenteLoggatoService utenteLoggatoService;

    public static void main(String[] args) {

        ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");

        MainApp app = context.getBean(MainApp.class);

        app.start();

        //HelloWorld obj = (HelloWorld) context.getBean("helloWorld");

        //obj.getMessage();


   }  

    private void start() {
        System.out.println("APPLICATION STARTED");
        System.out.println(utenteLoggatoService.getInfoUtenteLoggato());
    }

}