我有一个注释驱动的spring mvc项目,它是在JBoss web mvc示例之后模板化的。 (Spring,Hibernate,JPA 2.0)
我有一个实用程序包,我想为显而易见的实用程序函数添加可重用的类。 具体来说,我有一个LogonUtilities类,我想查询数据库以获取信息。
我在那里自动装备我的DAO,但是当我调试DAO时总是为null并且因为该异常而失败。
我已经阅读并尝试了很多东西 - 我知道我可能已经遇到了解决方案 - 但是错过了一些东西并继续前进并尝试了其他的东西。我可能不是谷歌搜索正确的术语,因为注释对我来说是新的。 (我已经和spring& hibernate合作多年了 - 但是用xml)
我已将此添加到我的applicationContext.xml
<context:component-scan base-package="util"/>
我认为这就是我需要做的全部。
这是我目前在LogonUtility类中所拥有的 - 但它不起作用,keywordDao始终为null。我想如果我将DAO连接到applicationContext中的LogonUtility bean(旧方法),我可能会让它工作,但我认为有更好的方法来使用注释。
@Service
public class LogonUtilities {
@Autowired private KeywordDao keywordDao;
我的应用程序不是全新的,此时我可能有十个工作控制器和十几个工作DAO,包括一个已经完成CRUD操作的关键字控制器和DAO,所以我不认为我的这些东西的设置是不正确的。 我只想从数据库中获取一些我想重用的代码。
提前致谢。
*在我的代码中,它实际上被称为&#34; TrainingKeyword&#34;不是&#34;关键字&#34; 这是nullPointer错误,因为DAO为空
10:52:07,673 ERROR [io.undertow.request] (default task-1) UT005023: Exception handling request to /Training/Home: java.lang.NullPointerException
at util.LogonUtilities.trainingOffices(LogonUtilities.java:59) [classes:]
at filter.LogonFilter.doFilter(LogonFilter.java:100) [classes:]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) [spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
这是发生错误的代码
//Set TrainingOffices
List<TrainingKeyword> kList1 = keywordDao.getAllTrainingKeywordsByName("Level 200 Training Offices");
答案 0 :(得分:1)
我通过听取你的想法并在这个问题的帮助下解决了我的问题。 JPA is not Autowiring
基本上我已经尝试了所有有效的东西 - 但从来没有一起。我不断对我的代码进行编辑,试图让它工作,并且总是丢失一些东西或者一些不好的东西。对于有类似问题的人,这里是步骤
在我的LogonFilter中,我添加了
@Autowired private LogonUtilities lu
在我的LogonUtilites课程中,我添加了
@Autowired private TrainingKeywordDao keywordDao;
没有必要将LogonUtility bean添加到我的applicationContext中 - 我把它拿出来它仍然有效。
感谢所有帮助过的人 - 你的想法一直让我重新思考我在做什么。
答案 1 :(得分:0)
您正在尝试@Autowired private KeywordDao keywordDao;
,但未收到任何自动装配错误。但@Autowired
默认为@Autowired(required=true)
,这意味着默认情况下这些依赖项是强制性的,如果不满足则抛出错误。
没有收到自动装配错误,因此得出的结论是,似乎根本没有扫描此类的自动装配。
如果它会出现错误。试着看看为什么班级没有自动装配,这里有一些常见的原因:
没有扫描放置类的包,是类包util的名称还是子包?
扫描是在错误的春天环境中进行的。大多数Spring应用程序都有两个上下文,一个根上下文和一个servlet调度程序上下文。通过将此配置行从一个XML文件复制到另一个XML文件,尝试将组件扫描<context:component-scan base-package="util"/>
从一个上下文移动到另一个上下文。
答案 2 :(得分:0)
确保base-package
是来自root用户的服务的完全限定路径,并确保KeywordDao
使用@Repository
进行注释。