Tôi đang chơi với ý tưởng sử dụng Spring @Configurable
và @Autowire
để tiêm DAO vào đối tượng miền để chúng không cần kiến thức trực tiếp về lớp kiên trì.Tự động chạy mùa xuân bằng cách sử dụng @Configurable
Tôi đang cố gắng theo dõi http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/aop.html#aop-atconfigurable, nhưng mã của tôi dường như không có hiệu lực.
Về cơ bản, tôi có:
@Configurable
public class Artist {
@Autowired
private ArtistDAO artistDao;
public void setArtistDao(ArtistDAO artistDao) {
this.artistDao = artistDao;
}
public void save() {
artistDao.save(this);
}
}
Và:
public interface ArtistDAO {
public void save(Artist artist);
}
và
@Component
public class ArtistDAOImpl implements ArtistDAO {
@Override
public void save(Artist artist) {
System.out.println("saving");
}
}
Trong ứng dụng context.xml, tôi có:
<?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>
Quét đường dẫn lớp và khởi tạo được thực hiện bởi mô đun lò xo cho Play! khuôn khổ, mặc dù đậu autowired khác làm việc, vì vậy tôi khá chắc chắn đây không phải là nguyên nhân gốc rễ. Tôi đang sử dụng Spring 3.0.5.
Trong mã khác (bên trong một phương pháp trong đậu đó là tiêm vào bộ điều khiển của tôi sử dụng Spring, trên thực tế), tôi đang làm điều này:
Artist artist = new Artist();
artist.save();
này mang lại cho tôi một NullPointerException cố gắng để truy cập artistDao trong Artist .tiết kiệm().
Bất kỳ ý tưởng nào tôi đang làm sai?
Martin
liên quan;) http://techblog.bozho.net/?p=180 – Bozho
Bạn có thể sử dụng chú thích '@ Value' trong lớp' @ Configurable' được đánh dấu là Artist không? – NightWolf