Spring4.3.7注解 @Autowired java.lang.NullPointerException
问题描述
UserAction中通过@Autowired注入UserServiceImpl无效,得到对象为空UserAction.java
@Namespace('/')@ParentPackage('struts-default')@Controllerpublic class UserAction extends ActionSupport implements ModelDriven<User> { private User user = new User(); public User getModel() {return this.user; } // ***************************** @Autowired private UserService userService; @Action(value = 'userAction_add', results = { @Result(name = 'add', location = '/success.jsp') }) public String add() {this.userService.saveUser(user);return 'add'; }}
UserServiceImpl.java
@Servicepublic class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Transactional public void saveUser(User user) {this.userDao.save(user); } @Transactional public void updateUser(User user) {this.userDao.update(user); } @Transactional public void deleteUser(User user) {this.userDao.delete(user); } @Transactional(readOnly = true) public User findUserById(Integer id) {return this.userDao.findById(id); } @Transactional(readOnly = true) public List<User> findAllUser() {return this.userDao.findAll(); }}
配置文件
<?xml version='1.0' encoding='UTF-8'?><beans xmlns='http://www.springframework.org/schema/beans' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:context='http://www.springframework.org/schema/context' xmlns:tx='http://www.springframework.org/schema/tx' xmlns:aop='http://www.springframework.org/schema/aop' xsi:schemaLocation='http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd'> <!-- 扫描 com包--> <context:component-scan base-package='com'></context:component-scan> <context:annotation-config/> <!-- <context:property-placeholder location='classpath:redis.properties'/> <bean class='redis.clients.jedis.JedisPoolConfig'> <property name='maxIdle' value='${redis.pool.maxIdle}' /> <property name='maxTotal' value='${redis.pool.maxActive}' /> <property name='maxWaitMillis' value='${redis.pool.maxWaitMillis}' /> <property name='testOnBorrow' value='${redis.pool.testOnBorrow}' /> <property name='testOnReturn' value='${redis.pool.testOnReturn}' /> </bean> --><!-- 加载c3p0-db.properties --> <context:property-placeholder location='classpath:c3p0-db.properties' /> <!-- 配置dataSource数据源 --> <bean class='com.mchange.v2.c3p0.ComboPooledDataSource'><property name='driverClass' value='${jdbc.driverClass}'></property><property name='jdbcUrl' value='${jdbc.jdbcUrl}'></property><property name='user' value='${jdbc.user}'></property><property name='password' value='${jdbc.password}'></property> </bean><!-- 1 配置SessionFactory --> <bean class='org.springframework.orm.hibernate5.LocalSessionFactoryBean'><!-- 1.1 配置数据源 --><property name='dataSource' ref='dataSource'></property><!-- 1.2 其他配置项 ,要使用hibernate全属性名,如果hibernate.不要省略 --><property name='hibernateProperties'> <props><prop key='hibernate.dialect'> org.hibernate.dialect.MySQL5Dialect </prop><prop key='hibernate.show_sql'>true</prop><prop key='hibernate.format_sql'>true</prop><prop key='hibernate.hbm2ddl.auto'>update</prop><prop key='javax.persistence.validation.mode'>none</prop><prop key='hibernate.current_session_context_class'>thread</prop><prop key=''></prop> </props></property><!-- 配置实体类 --><property name='packagesToScan'> <list><value>com.entity</value> </list></property> </bean> <!-- 配置hibernate模板,必须使用模板 --> <bean class='org.springframework.orm.hibernate5.HibernateTemplate'><!-- 通过工厂获得session,操作PO类 --><property name='sessionFactory' ref='sessionFactory'></property> </bean> <!-- 事务管理 --> <!-- 事务管理器,就是平台,spring工具产生, 依赖于使用 持久方案(hibernate、jdbc等) --> <bean class='org.springframework.orm.hibernate5.HibernateTransactionManager'><property name='sessionFactory' ref='sessionFactory'></property> </bean> <!-- 将事务管理注册spring * proxy-target-class='true': 使用cglib * proxy-target-class='false':有接口将使用 jdk --> <tx:annotation-driven transaction-manager='txManager' /></beans>
问题解答
回答1:请保证UserServiceImpl在被扫描的包内。
回答2:注解的扫描有问题
回答3:我建议你看看UserDao是否正确注入,这条链子上有一个注入失败了就会导致整体创建失败
相关文章: