2009-10-08 211 views
1

我試圖訪問@Service定義的類無法訪問註釋春季服務

接口定義,這裏是一個實現

@Service 
    public class TypeServiceImpl implements TypeService { 

     @Autowired 
     TypeDAO dao; 

     public List<DocType> findAll() { 
    System.out.println("accessing findAll"); //have no appearence 
    return dao.findAll(); 
} 

公共TypeDAOImpl(){ 的System.out.println (「構造TypeDAOImpl」); }用於DAO

... 

} 

代碼:

@Repository 
public class TypeDAOImpl extends BaseDAO<Type, Long> implements TypeDAO{ 

} 

BaseDAO:

public class BaseDAO<T, ID extends Serializable> extends GenericDAOImpl<T, ID> { 

    @Autowired 
    @Override 
    public void setSessionFactory(SessionFactory sessionFactory) { 
     super.setSessionFactory(sessionFactory); 
    } 
} 

使用generic dao 配置應用程序加載罰款(沒有警告或錯誤),但是當我試圖使用服務:

@Autowired 
private TypeService TypeService; 
public void init() { 

     try { 
      for (Type d : TypeService.findAll()) { 
       System.out.println(d.getType()); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
} 

中的applicationContext:

<!-- Use annotations (@Autowired) for property injection --> 
    <context:annotation-config /> 

在日誌: 信息:預實例獨身org.s[email protected]14db0e3:... typeDAOImpl,appMain,typeServiceImpl

我的web.xml

<context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>classpath:/config/application-context.xml,classpath:/config/datasource-context.xml</param-value> 
    </context-param> 
    <context-param> 
     <description> 
    Vaadin production mode</description> 
     <param-name>productionMode</param-name> 
     <param-value>false</param-value> 
    </context-param> 
    <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>My Application</servlet-name> 
     <servlet-class>com.vaadin.terminal.gwt.server.ApplicationServlet</servlet-class> 
     <init-param> 
      <description> 
     Vaadin application class to start</description> 
      <param-name>application</param-name> 
      <param-value>myapp.main.MainApp</param-value> 
     </init-param> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>My Application</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 
... 

堆棧跟蹤是 「非常信息」(我用vaadin作爲Web框架)

java.lang.NullPointerException at main.AppMain.init(AppMain.java:26) at com.vaadin.Application.start(Application.java:497) at com.vaadin.terminal.gwt.server.AbstractApplicationServlet .startApplication(AbstractApplicationServlet.java:1001) at com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:411) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve .invoke(StandardWrapperValve.java:233) 在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 在org.apache.catalina.valves。 ErrorReportValve.invoke(ErrorReportValve.java:102) 在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 在org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) 在org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:583) 在org.apache.tomcat。 util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:454) at java.lang.Thread.run(Unknown Source)

有什麼建議嗎?

我添加構造函數GenericDAOHibernate和TypeDAOImpl,所以據我所知,這些bean被初始化 ... 12.10.2009 12時57分48秒org.hibernate.impl.SessionFactoryImpl 信息:建立會話工廠 12.10。 2009年12點57分48秒org.hibernate.impl.SessionFactoryObjectFactory addInstance 信息:沒有約束力工廠JNDI,沒有JNDI名稱配置 構建通用的DAO 構建TypeDAOImpl 12.10.2009 12時57分48秒org.springframework.web .context.ContextLoader initWebApplicationContext ...

我不明白,因爲這個配置與ZK一起工作..

+0

只是一個猜測,但是你有適當的命名空間添加到您的Spring應用程序上下文嗎? – duffymo 2009-10-08 23:24:15

+0

你可以添加stackstrace嗎? – 2009-10-09 11:42:38

+0

我在下面的評論中詢問過,基於上面的堆棧跟蹤,我會再次問 - AppMain(這大概是從上一個代碼示例的哪個位置定義的 - 具有init()方法的位置)定義的作爲你的上下文中的bean?因爲如果不是,你如何期望自動佈線爲它工作? – ChssPly76 2009-10-10 02:33:29

回答

0

你發佈的代碼是相當不一致的。

findAll()方法沒有在任何地方聲明;加上服務實現Service,但你試圖將它自動裝入TypeService這是不行的。

如果第一個代碼片段,而不是寫成:

@Service 
public class TypeServiceImpl implements TypeService { 

,它是在你的應用程序上下文中的唯一TypeService執行,自動裝配會工作。

+0

的findAll()在TypeServiceImpl宣稱: 公共列表的findAll(){ \t \t的System.out.println( 「訪問的findAll」); //不出現! \t \t return dao.findAll(); \t} dao基於GenericDAOImpl – ziftech 2009-10-09 06:31:28

+0

您嘗試使用服務的代碼(您的最後一個代碼片段) - 來自哪裏?它是否也是在** ** **上下文中聲明的bean的一部分? – ChssPly76 2009-10-09 18:42:02