2013-07-10 49 views
1

這是一個棘手 - 我在least.Component掃描似乎並沒有工作爲什麼我的@components在spring中未被檢測到?

這裏是web.xml中

<!DOCTYPE web-app PUBLIC 
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-app_2_3.dtd" > 
<web-app> 
    <display-name>Geomajas GWT face example application</display-name> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      classpath:org/geomajas/spring/geomajasContext.xml 
      classpath:org/geomajas/plugin/rasterizing/DefaultRasterizedPipelines.xml 
      WEB-INF/applicationContext.xml 
<!--   WEB-INF/applicationContext2.xml --> 
<!--   WEB-INF/layer*.xml --> 
<!--   WEB-INF/map*.xml --> 
      WEB-INF/layerOsm.xml 
      WEB-INF/mapOsm.xml 
<!--   WEB-INF/applicationContext2.xml --> 

     </param-value> 
    </context-param> 



    <filter> 
     <filter-name>CacheFilter</filter-name> 
     <filter-class>org.geomajas.servlet.CacheFilter</filter-class> 
    </filter> 

    <filter-mapping> 
     <filter-name>CacheFilter</filter-name> 
     <url-pattern>*</url-pattern> 
    </filter-mapping> 

    <listener> 
     <listener-class>org.geomajas.servlet.PrepareScanningContextListener</listener-class> 
    </listener> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
    <listener> 
     <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> 
    </listener> 

    <servlet> 
     <servlet-name>GeomajasServiceServlet</servlet-name> 
     <servlet-class>org.geomajas.gwt.server.GeomajasServiceImpl</servlet-class> 
    </servlet> 

    <servlet> 
     <servlet-name>dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>classpath*:META-INF/geomajasWebContext.xml</param-value> 
      <description>Spring Web-MVC specific (additional) context files.</description> 
     </init-param> 
     <load-on-startup>3</load-on-startup> 
    </servlet> 

<!-- SpringGwt remote service servlet --> 
    <servlet> 
     <servlet-name>springGwtRemoteServiceServlet</servlet-name> 
     <servlet-class>org.spring4gwt.server.SpringGwtRemoteServiceServlet</servlet-class> 
     <init-param> 
     <param-name>contexConfigLocation</param-name> 
     <param-value>WEB-INF/applicationContext2.xml</param-value> 
     <description>j</description> 
     </init-param> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>GeomajasServiceServlet</servlet-name> 
     <url-pattern>/showcase/geomajasService</url-pattern> 
    </servlet-mapping> 

    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>/d/*</url-pattern> 
    </servlet-mapping> 



    <servlet-mapping> 
     <servlet-name>springGwtRemoteServiceServlet</servlet-name> 
     <url-pattern>/showcase/springGwtServices/test</url-pattern> 

    </servlet-mapping> 


    <welcome-file-list> 
     <welcome-file>index.html</welcome-file> 
    </welcome-file-list> 

</web-app> 

我的服務:

@Service("test") 
public class ProjServiceImpl extends RemoteServiceServlet implements ProjService { 
    private static final Log LOG = LogFactory.getLog(ProjServiceImpl.class); 



    @Autowired 
    PoiCategDAO poiCategDAO; 

    public String greetServer(String input) throws IllegalArgumentException { 
     // Verify that the input is valid. 
     if (!FieldVerifier.isValidName(input)) { 
      // If the input is not valid, throw an IllegalArgumentException back to 
      // the client. 
      throw new IllegalArgumentException(
        "Name must be at least 4 characters long"); 
     } 
     //RequestContextUtils.getWebApplicationContext(request); 
//  String serverInfo = getServletContext().getServerInfo(); 
//  String userAgent = getThreadLocalRequest().getHeader("User-Agent"); 



     return "Hello, " + input + "!<br><br>I am running .<br><br>It looks like you are using:<br>"; 
     } 

    @Override 
    //@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 
    public void testdao(Integer id) throws IllegalArgumentException { 
     // TODO Auto-generated method stub 
     PoiCateg X=poiCategDAO.findById(id);  
    PoiCateg z=poiCategDAO.findById(id); 
    } 

} 

而且applicaationContext2。 xml

<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:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation=" 
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
       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 
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> 

    <context:annotation-config /> 

<tx:annotation-driven transaction-manager="transactionManager" /> 
<context:component-scan base-package="ne.projl.*" /> 
<!-- <context:component-scan base-package="FULLY QUALIFIED" /> --> 

<bean class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean" id="entityManagerFactory"> 
     <property name="persistenceUnitName" value="MyPUnit" /> 
    </bean> 

    <bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager"> 
     <property name="entityManagerFactory" ref="entityManagerFactory" /> 
    </bean> 


</beans> 

請注意,如果我把上下文:component-s可以在applicationContext.xml(不是applicatinContext2.xml中檢測到我的服務bean。 )。如果還有其他信息我應該提供。

+0

我不明白你最後一句話的意思:你引用的源代碼是applicationContext2.xml,它包含組件掃描。你說applicationContext.xml包含組件掃描,但不包含applicationContext2.xml。更麻煩的是,你的web.xml指的是application.xml。你能先簡化和清理你的問題嗎? –

+0

你用什麼方法來確定你的bean是否被掃描? – gerrytan

+0

等待,最後一句實際上是否:如果我將context:component-scan放入applicationContext.xml(不是applicationContext2.xml),我的服務bean被檢測到。 ??如果是這樣,那很明顯:在Spring中不使用applicationContext2.xml。你沒有在web.xml的contextConfigLocation –

回答

1

可能有很多原因,一個常見的原因是你在錯誤的包裝下創建了你的@Component類。

當你的背景掃描配置設置的類必須是這個包

<context:component-scan base-package="ne.projl.*" /> 
+0

中包含ne.projl是我的基礎包。剛剛檢查拼寫錯誤,我所有的課程都在ne.projl.someothername – Medial

2

下,如果我沒有記錯,基本包在組件掃描只需要一個包名。然後將包括所有基礎子包。

因此,正確的設置應該是

<context:component-scan base-package="ne.projl" /> 
+0

我試過沒有*也沒有工作 – Medial

+1

1.您的應用程序上下文xml真的加載? 2.你的服務真的在ne.projl下嗎? 3.它應該沒有'。*',但不是沒有'*'。 4.您是否嘗試過只使用一個主類,一個服務類並在主方法中加載應用程序上下文的最簡單項目?在引用大量不相關的信息之前,請確保您確實知道如何使用它 –

0

發佈除外(如果有的話)將在這裏爲大家提供對這個問題更深入的瞭解。在我看來就像一個可見性問題。 如果您正在引用applicationContext2中掃描的組件,那麼在通過contextConfigLocation加載的其中一個組件中,顯然它不會是可見的。 。 check this link for more info on visibility of application context 。我不能添加到我已經張貼了我的意見作爲回答question..so評論...對不起,那個

0

我不知道,但沒有你的web.xml說,這

<!--   WEB-INF/applicationContext2.xml --> 

是NT註釋掉了?

你是否在applicationContext.xml文件中執行applicationContext2的導入資源?

相關問題