使用@Configurable进行弹簧自动布线
我正在玩使用Spring的想法,并将DAO注入领域对象,这样它们就不需要直接了解持久层。@Configurable
@Autowire
我试图遵循 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");
}
}
在应用程序上下文中.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。
在其他代码中(实际上,在使用Spring注入到我的控制器中的bean方法中),我正在这样做:
Artist artist = new Artist();
artist.save();
这给了我一个NullPointerException,试图访问Artist.save()中的artistDao。
知道我做错了什么吗?
马丁