I am trying to autowire an object but it gets null. I have read many questions and answers, still no chance. Here is my Spring boot configuration:
package com.alinso.fantasy;
import javax.persistence.EntityManagerFactory;
@SpringBootApplication
@ComponentScan({"com.alinso.fantasy","com.alinso.fantasy.database"})
@Configuration
public class FantasyApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(FantasyApplication.class, args);
}
@Autowired
private EntityManagerFactory entityManagerFactory;
@Bean
public SessionFactory getSessionFactory() {
if (entityManagerFactory.unwrap(SessionFactory.class) == null) {
throw new NullPointerException("factory is not a hibernate factory");
}
return entityManagerFactory.unwrap(SessionFactory.class);
}
}
Here is the class to be autowired :
package com.alinso.fantasy.database;
@Service
public class BookDAO implements IBookDAO {
@Autowired
SessionFactory sessionFactory;
public UUID save(Book book){
Session session= sessionFactory.getCurrentSession();
session.saveOrUpdate(book);
return book.getId();
}
}
Finally, here is the class where I get NPE;
package com.alinso.fantasy.resource;
@Controller
public class BookResource {
@Autowired
private IBookDAO bookDao;
public void saveBook() {
Book b = new Book();
b.setBook_name("harry potter");
b.setPrice(50.00);
bookDao.save(b); // null pointer exception here
}
}
IBookDAO
interface;
package com.alinso.fantasy.database;
public interface IBookDAO {
public UUID save(Book book);
}
edit: I am calling the controller method from a test, as below :
public class BookResourceTest {
@Test
public void saveBook() {
BookResource bookResource = new BookResource();
bookResource.saveBook();
}
}