1

我使用 STS 创建了一个新的 MVC 模板项目,并添加了所有依赖项以支持 Hibernate。

这是我的 root-context.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<!-- Root Context: defines shared resources visible to all other web components -->

<jdbc:embedded-database id="dataSource" type="H2"> 
    <jdbc:script location="classpath:schema.sql"/> 
    <jdbc:script location="classpath:test-data.sql"/> 
</jdbc:embedded-database>   

<bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="contactDao" class="com.server.dao.impl.ContactDaoImpl">
    <property name="sessionFactory" ref="sessionFactory"></property>
</bean>

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan" value="com.server.model" />
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop>
            <prop key="hibernate.max_fetch_depth">3</prop>
            <prop key="hibernate.jdbc.fetch_size">50</prop>
            <prop key="hibernate.jdbc.batch_size">10</prop>
            <prop key="hibernate.show_sql">true</prop>
        </props>
    </property>
</bean>  

STS 自动创建一个名为 HomeController.java 的示例控制器:

@Controller
public class HomeController {

private static final Logger logger = LoggerFactory.getLogger(HomeController.class);

/**
 * Simply selects the home view to render by returning its name.
 */
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
    Date date = new Date();
    DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);

    String formattedDate = dateFormat.format(date);

    model.addAttribute("serverTime", formattedDate );

    return "home";
 }

我想当 Web 应用程序在服务器上启动时,在 root-context.xml 中声明的 bean 会由框架自动实例化。

我的问题是:如何获得对 ContactDao 对象实例的引用?那就是:如何对我的数据库执行操作?

有人可以帮助我吗?

谢谢

4

1 回答 1

2

您需要ContactDao使用注释注入控制器:

@Autowired 
public void setContactDao(ContactDao contactDao) {
    ...
}

使用接口(我猜它是 ContactDao),这样您就可以更改实现(可能对测试有用)。

现在您可以使用您的联系人 DAO 方法使用contactDao对象。

有关自动装配的更多信息,请参阅http://static.springsource.org/spring/docs/current/spring-framework-reference/htmlsingle/#beans-factory-autowire

于 2013-01-11T14:15:02.473 回答