Если в обоих случаях вы печатаете свой экземпляр шаблона JDBC следующим образом
System.out.println(jdbcTemplate + "\n " + jdbcTemplate.getClass());
, то для созданного вами самостоятельно вы увидите
org.springframework.jdbc.core.JdbcTemplate@3c71cf3e
class org.springframework.jdbc.core.JdbcTemplate
, а для автоматического вводаодин вы увидите
org.springframework.jdbc.core.JdbcTemplate@8f39224
class org.springframework.jdbc.core.JdbcTemplate$$EnhancerBySpringCGLIB$$59a5407f
Найдите разницу? Для последнего Spring создает динамический прокси, если существует целевой аспект. Только при наличии динамического прокси у Spring AOP есть что зарегистрировать свои советы по аспектам.
Я не пользователь Spring, поэтому я не знаю, существует ли другой канонический способ создания шаблонов JDBC, для которого автоматическидинамический прокси создается по требованию. Поэтому, если вы не хотите вручную создать прокси (что возможно, но излишне сложно) или не найдете другого способа сделать это, просто используйте внедрение зависимостей (DI) и автоматическое подключение. Не в этом ли смысл использования Spring в первую очередь? Создание зависимостей, которые вы можете получить, является своего рода анти-шаблоном для контейнера DI, такого как Spring.
Если вы настаиваете на своем неортодоксальном и трудном для тестирования (как внедрить макет для локальной переменной, вы вызываете конструкторна подходе?), вы всегда можете использовать полный AspectJ в качестве альтернативы Spring AOP. Но я сомневаюсь, что в этой ситуации оно того стоит.