【发布时间】:2023-03-25 07:50:02
【问题描述】:
控制器
@Controller
public class AccountController {
@Autowired
AccountService accountService;
服务
@Service
public class AccountServiceImpl implements AccountService {
@Autowired
AccountDAO accountDao;
//since we have added support for transaction manager
//@Transactional is use to automatically begin and end transaction
@Override
@Transactional
public boolean saveAccount(Account account) {
return accountDao.saveAccount(account);
//return false;
// TODO Auto-generated method stub
//return accountDao.saveAccount(account);
}
DAO
@Repository
public class AccountDAOImpl implements AccountDAO {
//we r @Autowiring sessionFactory cuz hibernate use sessionFactory for db connectivity
@Autowired
private SessionFactory sessionFactory;
@Override
public boolean saveAccount(Account account) {
boolean saveFlag = true;
AccountEntity accountEntity = new AccountEntity();
accountEntity.setAccountNo(account.getAccountNo());
accountEntity.setAccountHolderName(account.getAccountHolderName());
accountEntity.setAccountType(account.getAccountType());
accountEntity.setAccountBalance(account.getAccountBalance());
accountEntity.setDateOfBirth(account.getDateOfBirth());
accountEntity.setPsCode(account.getPsCode());
try {
Session currentSession = sessionFactory.getCurrentSession();
currentSession.save(accountEntity);
} catch (Exception e) {
e.printStackTrace();
saveFlag = false;
}
return saveFlag;
}
.xml
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/psbankdb?useSSL=false" />
<property name="user" value="psbankdb" />
<property name="password" value="123" />
</bean>
<!-- sessionFactory is used to connect with db using above dataSource(ref="dataSource)" -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" ref="com.ps.springmvc.psbankApp" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<!-- to display sql property on the console while execution -->
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<!-- TransactionManager it uses session factory as ref -->
<bean id="myTransactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- it allow us to use annotation to eliminate manual coding to start and stop transaction -->
<tx:annotation-driven transaction-manager="myTransactionManager" />
低于错误
org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为“accountController”的bean时出错:通过字段“accountService”表示不满足的依赖关系;嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为“accountServiceImpl”的 bean 时出错:通过字段“accountDao”表示的依赖关系不满足;嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为 'accountDAOImpl' 的 bean 时出错:通过字段 'sessionFactory' 表达的依赖关系不满足;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建 ServletContext 资源 [/WEB-INF/bankAppContext.xml] 中定义的名称为“sessionFactory”的 bean 时出错:无法解析对 bean 'com.ps.springmvc.psbankApp' 的引用同时设置 bean 属性“packagesToScan”;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'com.ps.springmvc.psbankApp' available org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643) org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:130) org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1422) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
【问题讨论】:
-
什么是 com.ps.springmvc.psbankApp?
-
包含控制器、服务、模型、DAO 等的包
-
您正在使用
<property name="packagesToScan" ref="com.ps.springmvc.psbankApp" />,我非常怀疑您的上下文中有一个名为com.ps.springmvc.psbankApp类型为String的bean。将ref更改为value。
标签: java spring spring-mvc