Spring JDBCTemplate. Null Pointer Exceptio

Estou tentando configurar um site SpringMVC do zero, mas cheguei a um beco sem saída.

Estou usando a fiação automática para instanciar JdbcTemplate com um DataSource, mas de alguma forma estou recebendo uma exceção de ponteiro Nulo. Agradeço sua ajuda com isso.

My AppConfig é o próximo:

@Configuration
@ComponentScan
public class AppConfig {
    @Bean
    public DriverManagerDataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/onlinelibrary");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        return dataSource;
    }

    @Bean
    public JdbcTemplate jdbcTemplate(DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
    /*Deleted this code, still doesn't work
    @Bean
    public Book Book() {
        return new Book();
    }
    */
}

classe @My Book é a seguinte:

@Component
public class Book {
    private JdbcTemplate jdbcTemplate;
    private String title;
    private String author;
    private String isbn;

    public Book() {

    }

    @Autowired
    public Book(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public ModelMap getBooks() {
        ModelMap model = new ModelMap();
        String sql = "SELECT * FROM Books";
        model.put("data", jdbcTemplate.queryForList(sql));
        return model;
    }
}

E esta é a infame exceção NullPointer:

Qualquer ajuda seria muito apreciada. Provavelmente, esqueci-me de fazer algo, mas não consigo resolvê-lo, e também não consigo encontrar nada no StackOverflow que me ajude (embora já tenha lido muitos artigos agora).

UPDATE COM MAIS DADOS:

estrutura do meu projeto é a seguinte:

E eu estou usando o objeto Book neste controlador:

@Controller
public class BookController {
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String getBookData(Book book, ModelMap model) {
        model.put("data", book.getBooks());
        return "BookView";
    }
}

questionAnswers(1)

yourAnswerToTheQuestion