Я играю с идеей использования Spring @Configurable
и @Autowire
для ввода DAO в объекты домена, чтобы они не нуждались в непосредственном знании уровня персистентности.
Я пытаюсь следовать http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/aop.html#aop-atconfigurable, но мой код, похоже, не имеет эффекта.
В принципе, у меня есть:
@Configurable
public class Artist {
@Autowired
private ArtistDAO artistDao;
public void setArtistDao(ArtistDAO artistDao) {
this.artistDao = artistDao;
}
public void save() {
artistDao.save(this);
}
}
и
public interface ArtistDAO {
public void save(Artist artist);
}
и
@Component
public class ArtistDAOImpl implements ArtistDAO {
@Override
public void save(Artist artist) {
System.out.println("saving");
}
}
В application-context.xml у меня есть:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springsource.org/dtd/spring-beans-2.0.dtd">
<beans>
<bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator" />
<bean class="org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect" factory-method="aspectOf"/>
</beans>
Сканирование и инициализация маршрута класса выполняется модулем Spring для Play! хотя, несмотря на то, что другие работающие в режиме beans работают, поэтому я уверен, что это не основная причина. Я использую Spring 3.0.5.
В другом коде (внутри метода в bean, который был введен в мой контроллер с помощью Spring), я делаю это:
Artist artist = new Artist();
artist.save();
Это дает мне исключение NullPointerException, пытающееся получить доступ к ArtistDao в Artist.save().
Любая идея, что я делаю неправильно?
Martin