简体   繁体   English

Spring不会读取applicationContext.xml文件

[英]applicationContext.xml file not being read in by Spring

I've been reading a ton of examples in StackOverflow on the subject of ApplicationContextProvider, but I can't find a single one that addresses my problem. 我已经在StackOverflow上阅读了有关ApplicationContextProvider的大量示例,但是找不到一个可以解决我的问题的示例。 I have an xml file that I don't believe is being read in and initializing the beans that I note in it. 我有一个不相信正在读取的xml文件并初始化了我在其中记下的bean。 I have the following class: 我有以下课程:

package com.tacticalenterprisesltd.spring;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@Component
public class ApplicationContextProvider implements ApplicationContextAware
{
    @Autowired
    private static ApplicationContext context;

    public ApplicationContext getApplicationContext()
    {
        return context;
    }

    @Override
    public void setApplicationContext(ApplicationContext ac) throws BeansException {
        System.out.println("ApplicationContext Initialized");
        context = ac;
    }       
}

My applicationContext.xml file: 我的applicationContext.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:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:task="http://www.springframework.org/schema/task" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd">

    <mvc:annotation-driven />
    <tx:annotation-driven />
    <context:component-scan base-package="com.tacticalenterprisesltd" />
    <bean id="applicationContextProvider" class="com.tacticalenterprisesltd.spring.ApplicationContextProvider" />
    <bean id="springDatabase" class="com.tacticalenterprisesltd.spring.SpringDatabase" />

</beans>

JedSpringTestApplication: JedSpringTestApplication:

package com.tacticalenterprisesltd.jedspringtest;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@ComponentScan(basePackages = {"com.tacticalenterprisesltd"})
public class JedSpringTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(JedSpringTestApplication.class, args);

    }
}

and finally, PersonelSearch class: 最后,PersonelSearch类:

package com.tacticalenterprisesltd.jedspringtest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.tacticalenterprisesltd.Field;
import com.tacticalenterprisesltd.Query;
import com.tacticalenterprisesltd.WhereCondition;
import com.tacticalenterprisesltd.spring.ApplicationContextProvider;
import com.tacticalenterprisesltd.spring.SpringDatabase;

@Controller
public class PersonnelSearch 
{
    @Autowired
    ApplicationContextProvider applicationContextProvider ;

    @RequestMapping("/search")
    public String search(@RequestParam(value="lastname", required=true) String lastname, Model model) {
        model.addAttribute("lastname", lastname);
        SpringDatabase sd = (SpringDatabase)applicationContextProvider .getApplicationContext().getBean("springDatabase", com.tacticalenterprisesltd.spring.SpringDatabase.class);
        Query query = new Query(Query.Type.SELECT, "employees");
        Field field1 = new Field("employees", "id", Field.Type.INT);
        Field field2 = new Field("employees", "first_name", Field.Type.STRING);
        Field field3 = new Field("employees", "last_name", Field.Type.INT);
        Field field4 = new Field("employees", "email", Field.Type.INT);
        Field[] fields = new Field[4];
        fields[0] = field1;
        fields[1] = field2;
        fields[2] = field3;
        fields[3] = field4;
        query.setFields(fields);
        WhereCondition where = new WhereCondition(field3, lastname, "=");
        WhereCondition[] conditions = new WhereCondition[1];
        conditions[0] = where;
        query.setWhereConditions(conditions);
        sd.setQuery(query);
        String[][] strData = sd.executeSelect();
        String out = "";
        for(int i = 0; i < strData.length; i++)
        {
            out += " | ";
            for(int j = 0; j < strData[0].length; j++)
            {
                out += strData[i][j] + " | ";
            }
            out += "\n";
        }
        System.out.println("Table Results:\n" + out);
        return out;
    }
}

When I run this as a Spring Boot application I get: 当我将其作为Spring Boot应用程序运行时,我得到:

Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'personnelSearch': Unsatisfied dependency expressed through field 'applicationContextProvider'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.tacticalenterprisesltd.spring.ApplicationContextProvider' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
***************************
APPLICATION FAILED TO START
***************************

    Description:

Field applicationContextProvider in com.tacticalenterprisesltd.jedspringtest.PersonnelSearch required a bean of type 'com.tacticalenterprisesltd.spring.ApplicationContextProvider' that could not be found.


Action:

Consider defining a bean of type 'com.tacticalenterprisesltd.spring.ApplicationContextProvider' in your configuration.

I'm thinking that the applicationContext.xml file is not being read in, otherwise the beans that are noted inside it would be available when the application loads. 我正在考虑未读入applicationContext.xml文件,否则在加载应用程序时将可以使用其中指出的bean。 Please advise. 请指教。

You haven't @Autowired your Application context. 您尚未@Autowired应用程序上下文。

You need to do it like this: 您需要这样做:

@Component
public class ApplicationContextProvider
{
    @Autowired
    private ApplicationContext context;

    public ApplicationContext getApplicationContext()
    {
        return context;
    }

} }

Either change the name of the variable from acp to applicationContextProvider in the PersonnelSearch class OR add @Qualifier("applicationContextProvider") after @Autowired in PersonnelSearch for acp variable. PersonnelSearch类中将变量的名称从acpapplicationContextProvider ,或者在PersonnelSearch中的@Autowired之后为acp变量添加@Qualifier("applicationContextProvider")

eg 例如

@Controller
public class PersonnelSearch 
{
    @Autowired
    ApplicationContextProvider applicationContextProvider;

OR 要么

@Controller
public class PersonnelSearch 
    {
        @Autowired
        @Qualifier("applicationContextProvider")
        ApplicationContextProvider acp;

Also, add @ComponentScan(basePackages = {"com.tacticalenterprisesltd"}) on JedSpringTestApplication as: 此外,添加@ComponentScan(basePackages = {"com.tacticalenterprisesltd"})JedSpringTestApplication为:

package com.tacticalenterprisesltd.jedspringtest;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@ComponentScan(basePackages = {"com.tacticalenterprisesltd"})
public class JedSpringTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(JedSpringTestApplication.class, args);

    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM