Q:

Spring Expression Language: @Bean cannot find itself

Within my class SimpleBookRepository, I am trying to access an instance method from within Spring's @Cacheable annotation to determine if I should use caching or not.  When I try to run the application, it fails to start and tells me:

Description:
A component required a bean named 'SimpleBookRepository' that could not be found. 
Action:
Consider defining a bean named 'SimpleBookRepository' in your configuration. 

This is quite confusing to me because the application runs perfectly fine when I remove the condition = "@SimpleBookRepository.useCache()" bit.  I would think the condition evaluation and therefore the bean resolution would happen during runtime after the autowiring, and it would be impossible to call the getByIsbn() method without the bean existing.  Even when I do explicitly declare a bean in the configuration like:
@Bean
public SimpleBookRepository simpleBookRepository(){
    return new SimpleBookRepository();
}

I receive the same error. 
I would be very grateful if someone could explain this behavior to me. 
I have the following classes:
SimpleBookRepository.java
package com.mycompany.app;

@Component
public class SimpleBookRepository implements BookRepository{

    @Value("${cache.use}")
    private boolean useCache;

    public boolean useCache(){
        return useCache;
    }

    @Override
    @Cacheable(cacheNames="books", condition = "@SimpleBookRepository.useCache()")
    public Book getByIsbn(String isbn){
        //Get mock data
    }

}

Application.java
package com.mycompany.app;

@SpringBootApplication
@EnableCaching
public class Application {

    public static void main(String[] args){
        SpringApplication.run(Application.class, args);
    }

}

CachingConfiguration.java
package com.mycompany.app;

@EnableCaching
@EnableAutoConfiguration
@Configuration
public class CachingConfiguration {
    //Configure CacheManager bean
}

AppRunner.java
package com.mycompany.app;

@Component
public class AppRunner implements CommandLineRunner {

    private static final Logger logger = LoggerFactory.getLogger(AppRunner.class);
    private final BookService bookService;

    @Autowired
    public AppRunner(BookService bookService){
        this.bookService = bookService;
    }

    @Override
    public void run(String... args) throws Exception{
        getBooks();

    }
}

BookService.java
package com.mycompany.app;

@Service
public class BookService {

    private BookRepository bookRepository;

    @Autowired
    public BookService(BookRepository bookRepository){
        this.bookRepository = bookRepository;
    }

    public Book getByIsbn(String isbn){
        return bookRepository.getByIsbn(isbn);
    }

}

BookRepository.java
package com.mycompany.app

@Component
public interface BookRepository {

    Book getByIsbn(String isbn);

}

A:

I actually just found the proper way to do what I want in SpEL.  I changed the condition to 
condition = "#root.target.useCache()"
Thanks to everyone who answered.