我是Spring开发的新手。现在,我真的面临着一个问题。这里有一些代码片段,让你清楚地意识到我的问题............
下面是我的DAO类:
public class LoginDaoImpl {
private DataSource dataSource;
private JdbcTemplate jdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public int checkLoginDetails(LoginVo loginVo){
String sql = "select count(*) from empsctygrp where username=? and password=?";
jdbcTemplate = new JdbcTemplate(dataSource);
int count = jdbcTemplate.queryForObject(sql,new Object[]{loginVo.getUserName(),loginVo.getPassword()},Integer.class);
return count;
}
}
下面是我的业务对象(BO)类:
public class LoginBo {
LoginDaoImpl loginDaoImpl = new LoginDaoImpl();
public int checkLoginDetails(LoginVo loginVo){
return loginDaoImpl.checkLoginDetails(loginVo);
}
}
下面是我的dispatcher-servlet xml代码:
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@117.194.83.9:1521:XE"/>
<property name="username" value="system"/>
<property name="password" value="password1$"/>
</bean>
<bean id="loginDaoImpl" class="com.abhinabyte.dao.LoginDaoImpl">
<property name="dataSource" ref="dataSource" />
</bean>
现在每当我试图在服务器上运行这个程序时,都会出现以下异常:
SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/A] threw exception [Request processing failed; nested exception is java.lang.IllegalArgumentException: Property 'dataSource' is required] with root cause
java. lang.非法参数异常:属性"dataSource"是必需的
请帮我解决这个问题..........:(
3条答案
按热度按时间myzjeezk1#
在LoginBo类中尝试以下操作:
代替
第一个月
问题在于您手动示例化LoginDaoImpl。
u1ehiz5o2#
我也有同样的问题,在网上找不到一个全面的答案,所以我决定在这里张贴一个给其他人,或未来的我。
我还在学习中,所以如果你认为我在下面犯了错误,请随时编辑。
摘要:
<integration:annotation-config/> <context:component-scan base-package="myproject"/>
以获取注解@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("file:WEB-INF/FinanceImportTool-servlet.xml")
配置JUnit测试dataSource
或jdbcTemplate
字段已由父类(例如StoredProcedure
)提供,则不要自动关联这些字段new()
,因为这会初始化applicationContext外部的类我原来的类(现在更改):
MyProject-servlet.xml文件(仅包括相关位):
错误:需要属性“dataSource”,或出现NullPointerException(1)
其他答案是确保已经将
dataSource
作为servlet中bean的<property>
传递,等等。我认为@Abhinabyte the OP需要用
@Annotation
注解他的setDataSource()
方法,并在他的servlet中使用<integration:annotation-config/> <context:component-scan base-package="myproject"/>
,以成功地将dataSource
作为对LoginDaoImpl
的依赖项传入。在我的例子中,我尝试将“dataSource”添加为属性并自动绑定它,“dataSource是必需的”错误消息变成了NullPointerException错误。
过了很长时间,我才意识到
MyDAOImpl
扩展了StoredProcedure
。dataSource
已经是StoredProcedure
的属性。由于MyDAOImpl
具有dataSource
属性,因此自动装配不会拾取和设置StoredProcedure
的dataSource
属性,从而使StoredProcedure
的dataSource
保留为空。当我测试
MyDAOImpl.dataSource
的值时,没有发现这个问题,当然,到目前为止,我已经添加了一个MyDAOImpl.dataSource字段,该字段已经成功地自动连接,但是从StoredProcedure
继承的compile()
方法使用了StoredProcedure.dataSource
。因此,我不需要
MyDAOImpl
类中的public DataSource dataSource;
属性。我只需要在MyDAOImpl
的构造函数中使用StoredProcedure
构造函数和super(dataSource, sql);
。我也不需要
MyDAOImpl.jdbcTemplate
属性,它是使用StoredProcedure(dataSource, sql)
构造函数自动设置的。错误:空指针异常(2)
我一直在使用这个构造函数:
这导致了
NullPointerException
,因为SPROC_NAME
在构造函数中使用之前没有初始化(是的,我知道,新手错误)。为了解决这个问题,我在servlet中传入了sql
作为构造函数参数。错误:[更改文件名时出现相同的错误消息]
applicationContext引用了我的bean和类的bin/示例,我不得不删除bin/并重新构建项目。
我的新班级:
新的MyProject-servlet.xml文件(仅包括相关位):
有用的地方:
如果你能克服愤怒,Spring论坛上的this answer可能也会有所帮助
This answer全面介绍了Spring配置
This answer有简单但有用的建议
of1yzvn43#
你应该注解那些会遭受IoC的bean。比如
您在Spring上下文中设置了这个bean,但是,您没有使用它们。
组织分解结构:
当我使用JDBCTemplate时,我配置JDBC的de IoC如下
那么...毕竟
公共类登录DAOImpl {
}