Я пытаюсь использовать прокси-сервер по умолчанию, предоставляемый Spring, но получаю ошибку при исполнении.
Вот мой код:
Первый класс, который запускает тестовый пример.
@EnableAspectJAutoProxy()
@ComponentScan(basePackageClasses = {MyDaoRepository.class, MyService.class,MyAdvices.class})
@Configuration
public class SpringAdvices {
public static void main( String[] args ) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringAdvices.class);
service myService = ctx.getBean(MyService.class);
Person p1 = (Person) ctx.getBean("person");
myService.save(p1);
}
@Bean
public Person person(){
return Person.builder()
.name("Bagna")
.age(52)
.profession(null)
.dateOfBirth(LocalDate.of(1950,12,13))
.build();
}
}
Второй класс, который представляет мои советы:
@Aspect
@Component
public class MyAdvices {
@Before("execution(boolean *.dao.save(..))")
public void beforesavamethod(){
System.out.println("beforesavamethod");
}
@After("execution(boolean *.dao.save(..))")
public void aftersavamethod(){
System.out.println("aftersavamethod");
}
}
Мои классы обслуживания и хранилища:
@Service
public class MyService implements service {
@Autowired
MyDaoRepository myDaoRepository;
@Override
public boolean save( Person person ){
return this.myDaoRepository.save(person);
}
@Override
public boolean delete(Person person){
return this.myDaoRepository.delete(person);
}
}
public interface service {
public boolean save( Person person );
public boolean delete( Person person );
}
@Repository
public class MyDaoRepository implements dao {
List<Person> personList = new ArrayList<>();
@Override
public boolean save( Person person ){
return this.personList.add(person);
}
@Override
public boolean delete( Person person ){
return this.personList.remove(person);
}
}
public interface dao {
public boolean save( Person person );
public boolean delete( Person person );
}
Исключение, которое я получаю, касается внедрения объекта dao в объект службы.
UnsatisfiedDependencyException: Ошибка при создании бина с именем
'myService': неудовлетворенная зависимость, выраженная через поле
'MyDaoRepository'; вложенное исключение
org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean
с именем 'myDaoRepository', как ожидается, будет иметь тип
'aop.question_005.dao.MyDaoRepository', но на самом деле был типа
'Com.sun.proxy. $ Proxy22'
Я могу решить эту проблему, включив механизм GCLIB, но мне интересно, как я могу решить эту проблему, используя тот же динамический прокси JDK?