Java 奇怪的Spring上下文组件扫描
我已经从stackoverflow找到了很多解决方案,这是我第一次在这里问问题,我真的不知道这有什么问题。实际上,我正在尝试按类型自动关联我的一个类,但无法做到这一点。下面是按顺序排列的源代码 Spring上下文 我使用搜索管理器并测试FileUploadDao对象的代码是否为null Web.xmlJava 奇怪的Spring上下文组件扫描,java,spring,Java,Spring,我已经从stackoverflow找到了很多解决方案,这是我第一次在这里问问题,我真的不知道这有什么问题。实际上,我正在尝试按类型自动关联我的一个类,但无法做到这一点。下面是按顺序排列的源代码 Spring上下文 我使用搜索管理器并测试FileUploadDao对象的代码是否为null Web.xml http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd“> SearchServlet com.bakaenterprise.server.Searc
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd“>
SearchServlet
com.bakaenterprise.server.SearchServlet
SearchServlet
/servlet/SearchServlet
30
index.jsp
/jstl/core\u rt
/WEB-INF/tld/c.tld
/jstl/xml\u rt
/WEB-INF/tld/x_rt.tld
/jstl/fn\u rt
/WEB-INF/tld/fn.tld
/jstl/fmt\rt
/WEB-INF/tld/fmt.tld
演出
com.bakaenterprise.util.PerformanceLog
演出
/*
上下文配置位置
/WEB-INF/springContext.xml
org.springframework.web.context.ContextLoaderListener
现在文件Dao总是空的,虽然基本包是正确的,但我认为它没有扫描组件。任何帮助或建议都将受到高度重视和赞赏。我知道这种类型的问题被问了很多次,所以很抱歉再次问这个问题,这些答案对我不起作用
我相信您必须在applicationContext中为要自动连线的bean显式声明这一点
<bean id="searchManager" class="com.bakaenterprise.bl.SearchManager" autowire="byType"/>
另一种选择是autowire
byName
,它也应该在您的情况下工作(因为成员变量fileDao
与bean IDfileDao
具有相同的名称)。我相信您必须在applicationContext中为要自动wire的bean明确声明这一点
<bean id="searchManager" class="com.bakaenterprise.bl.SearchManager" autowire="byType"/>
另一种方法是autowire
byName
,这也适用于您的情况(因为成员变量fileDao
与bean IDfileDao
具有相同的名称)。SearchManager
也应该为组件扫描期间注入的IFileUploadDao
实现bean添加注释
@Component
public class SearchManager {
另外,您正在手动初始化SearchManager
,这将导致其依赖项没有被注入-bean需要由Spring
管理。由于没有直接的方法将Spring bean注入Java Servlet,因此您可以使用Spring框架HttpRequestHandler
public class AnnotatedHttpServletRequestHandler implements HttpRequestHandler {
@Autowired
private SearchManager searchManager;
...
}
具体细节在
SearchManager
中进行了描述,还应为组件扫描期间注入的IFileupLoadAO
实现bean添加注释
@Component
public class SearchManager {
另外,您正在手动初始化SearchManager
,这将导致其依赖项没有被注入-bean需要由Spring
管理。由于没有直接的方法将Spring bean注入Java Servlet,因此您可以使用Spring框架HttpRequestHandler
public class AnnotatedHttpServletRequestHandler implements HttpRequestHandler {
@Autowired
private SearchManager searchManager;
...
}
具体细节在中描述。请尝试在spring上下文配置中添加dependens-depend属性:
<bean id="searchManager" class="com.bakaenterprise.bl.SearchManager"
depends-on="fileDao" />
所以,您只需创建一个bean的两个副本!我认为这是一个问题
编辑-2
尝试删除此XML定义:
<bean id="searchManager" class="com.bakaenterprise.bl.SearchManager" />
<bean id="fileDao" class="com.bakaenterprise.dal.impl.FileUploadDao" />
尝试在spring上下文配置中添加dependens-depen属性:
<bean id="searchManager" class="com.bakaenterprise.bl.SearchManager"
depends-on="fileDao" />
所以,您只需创建一个bean的两个副本!我认为这是一个问题
编辑-2
尝试删除此XML定义:
<bean id="searchManager" class="com.bakaenterprise.bl.SearchManager" />
<bean id="fileDao" class="com.bakaenterprise.dal.impl.FileUploadDao" />
您在这里有一些选项,您可以用以下内容注释您的类
SearchManager
:
@组件
“@Configurable”用于标记符合Spring依赖注入条件的类。当您不能或无意将您的类用作SpringBean时,应使用它(从Spring 2.0开始提供)@Configurable
<bean id="searchManager" class="com.bakaenterprise.bl.SearchManager" />
您在这里有一些选项,您可以用以下内容注释您的类
SearchManager
:
@组件
“@Configurable”用于标记符合Spring依赖注入条件的类。当您不能或无意将您的类用作SpringBean时,应使用它(从Spring 2.0开始提供)@Configurable
<bean id="searchManager" class="com.bakaenterprise.bl.SearchManager" />
仅用xml定义bean或使用@Component就足够了。我尝试了您建议的添加Dependes-on属性的解决方案,但没有成功。我仅使用@Component尝试了事件,但使用了相同的方法results@AliAdnan:尝试不在内部使用bean定义XML@seralex.vi我从XML中删除了这两个对象,但仍然是相同的l、 我还用组件注释对SearchManager和FileUploadDao类进行了注释。@AliAdnan:你能在使用SearchManager的地方添加你的web.xml和代码吗?你如何检查fileDao是否为空?只需在xml中定义bean或使用@Component就足够了。我尝试了你建议的添加依赖于属性的解决方案,但没有成功rk.I事件仅使用@Component进行了尝试,但相同results@AliAdnan:尝试不在内部使用bean定义XML@seralex.vi我从XML中删除了这两个类,但仍然是相同的。fileDao对象为null。我还用组件注释注释了SearchManager和FileUploadDao类。@AliAdnan:您能在使用SearchMa的地方添加web.XML和代码吗nager?如何检查fileDao是否为空?但SearchManager已经存在
<bean id="searchManager" class="com.bakaenterprise.bl.SearchManager" />
<bean id="fileDao" class="com.bakaenterprise.dal.impl.FileUploadDao" />
public SearchServlet extends HttpServlet {
@Autowired
private SearchManager searchManager;
public void init(ServletConfig config) {
super.init(config);
SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,
config.getServletContext());
}
}
<bean id="searchManager" class="com.bakaenterprise.bl.SearchManager" />