2、创建服务

[1]创建一个新的ManagerTest

[2]创建一个新的Manager来调用DAO,处理业务逻辑

[3]Spring中配置服务和事物管理

[4]运行服务测试

 

在上面我们已经创建了PersonPersonDAO,现在我们需要在test/service/**/service目录下创建ManagerTestPersonManagerTest扩展BaseManagerTestCase类,在这个基类中实现了Spring配置文件的载入。

PersonManagerTest代码如下:


package org.appfuse.service;

import org.appfuse.model.Person;
import org.springframework.dao.DataAccessException;

public class PersonManagerTest extends BaseManagerTestCase {

    private Person person = null;
    private PersonManager mgr = null;

    protected void setUp() throws Exception {
        super.setUp();
        mgr = (PersonManager) ctx.getBean("personManager");
    }

    protected void tearDown() throws Exception {
        super.tearDown();
        mgr = null;
    }
}

然后加入具体的测试方法到PersonManagerTest类中:


    public void testGetPerson() throws Exception {
        person = mgr.getPerson("1");

        assertNotNull(person.getFirstName());
    }

    public void testSavePerson() throws Exception {
        person = mgr.getPerson("1");
        person.setFirstName("test");

        mgr.savePerson(person);
        assertEquals(person.getFirstName(), "test");
    }

    public void testAddAndRemovePerson() throws Exception {
        person = new Person();
        person = (Person) populate(person);

        mgr.savePerson(person);
        assertEquals(person.getFirstName(), "Bill");
        assertNotNull(person.getId());

        log.debug("removing person, personId: " + person.getId());

        mgr.removePerson(person.getId().toString());

        try {
            person = mgr.getPerson(person.getId().toString());
            fail("Person found in database");
        catch (DataAccessException dae) {
            log.debug("Expected exception: " + dae.getMessage());
            assertNotNull(dae);
        }
    }

下面创建一个PersonManager接口到src/service/**/service目录下。


package org.appfuse.service;

import org.appfuse.model.Person;

public interface PersonManager {
    public Person getPerson(String id);
    public void savePerson(Person person);
    public void removePerson(String id);
}

接着创建一个PersonManager的实现类PersonManagerImplsrc/service/**/service/impl目录下:


package org.appfuse.service.impl;

import org.appfuse.model.Person;
import org.appfuse.dao.PersonDAO;
import org.appfuse.service.PersonManager;

public class PersonManagerImpl extends BaseManager implements PersonManager {
    private PersonDAO dao;

    public void setPersonDAO(PersonDAO dao) {
        this.dao = dao;
    }

    public Person getPerson(String id) {
        return dao.getPerson(Long.valueOf(id));
    }

    public Person savePerson(Person person) {
        dao.savePerson(person);
    }

    public void removePerson(String id) {
        dao.removePerson(Long.valueOf(id));
    }
}

在上面代码中PersonDAO通过Spring框架中的配置来实例化。现在可以使用ant compile-service命令来编译服务对象。

 

Spring中配置服务和事务管理

src/service/**/service/applicationContext-service.xml文件中加入以下代码来注册服务:


    <bean id="personManager" parent="txProxyTemplate">
        <property name="target">
            <bean class="org.appfuse.service.impl.PersonManagerImpl" autowire="byName"/>
        </property>
    </bean>

Parent属性的定义参考TransactionProxyFactoryBean

 

现在运行测试,看到测试结果。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-06-01
  • 2021-04-23
  • 2021-11-26
  • 2022-02-08
  • 2022-12-23
  • 2021-07-02
猜你喜欢
  • 2021-08-18
  • 2022-12-23
  • 2021-11-16
  • 2021-10-29
  • 2022-12-23
  • 2021-12-22
  • 2021-11-18
相关资源
相似解决方案