Я играю с идеей использования 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>
Сканирование и инициализация пути класса выполняется пружинным модулем для Play!фреймворк, хотя работают и другие bean-компоненты, поэтому я уверен, что это не основная причина.Я использую Spring 3.0.5.
В другом коде (фактически внутри метода в bean-компоненте, который внедряется в мой контроллер с помощью Spring), я делаю это:
Artist artist = new Artist();
artist.save();
Это дает мне исключение NullPointerException при попытке доступа к artistDao в Artist.save ().
Есть идеи, что я делаю неправильно?
Martin