我有点困惑,在我的servlet-context.xml中我有:
<context:component-scan base-package="com.myapp" />
和
<mvc:annotation-driven />
所以上面似乎自动连接我的控制器,服务类等。
我正在使用hibernate,我仍然需要为我拥有的每个实体编写一个新的xml条目,这是正确的吗?
<hibernate-configuration>
<session-factory>
<mapping package="com.myapp.core.model"/>
<mapping class="com.myapp.core.model.User"/>
<mapping class="com.myapp.core.model.Product"/>
</session-factory>
</hibernate-configuration>
对于像UserDao这样的每个EntityDao类,我都需要添加:
<bean id="userDao" class="com.myapp.core.doa.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
上述2(entity和entityDao)是否可以自动连接,因此我不必触摸xml文件?
另外,我正在关注maven / pom项目的示例,我在我的pom.xml中有这个,这是否意味着spring将使用javax.inject作为其依赖注入引擎?
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
更新
我的UserDaoImpl看起来像:
@Repository
public class UserDaoImpl extends GenericDaoImpl<User, Integer> implements UserDao {
@Resource
SessionFactory sessionFactory;
我也尝试了这个并得到了相同的结果:
@Resource
private SessionFactory sessionFactory;
答案 0 :(得分:2)
可以指示Spring使用注释。您可以再次使用@Autowired
等原生注释或@Resource
和@Inject
等标准注释。以下是您可以做的事情:
@Repository
class UserDaoImpl {
@Resource
private SessionFactory sessionFactory;
//...
}
事实上,还没有发布Spring 3.1,你可以编写整个Spring / MVC / Hibernate应用程序,甚至没有一行XML。在这里查看我的小showcase。
您可以使用annotations并指示Spring / Hibernate选择它们。 Hibernate具有本机注释,但首先尝试使用标准JPA。
再一个简单的例子:
@Entity
class User {
@Id
private String name;
@OneToMany
private Set<Product> products;
}