MVC框架-mentawai(12)

控制反转

Mentawai 拥有一个与框架全面整合在一起并且功能强大的控制反转容器。因此,如果想使用控制反转和依赖注入,你不用使用任何其他的框架。 Mentawai 支持setter,构造器,小巧的auto-wiring等方式注入。下面我们来看如何容易做到这一点:

在应用管理器中创建

@Override
public void loadFilters() {

    filter(new MentaContainerFilter());
}

NOTE: Mentawai的控制反转、依赖注入和Auto-wiring能力被提取到一个叫MentaContainer的单独工程里, 它依然可以无缝整合到框架中。

创建控制反转(IOC)

@Override
public void setupIoC() {

    ioc(UserDAO.class, JdbcUserDAO.class); // 对我的UserDAO接口, 我想使用JdbcUserDAO的实现
}

进行依赖注入

既然你表明你在web应用中的JdbcUserDAO实现, 那么依赖注入就会无缝且自动进行,你无需关心任何事,例如:

public class UserAction extends BaseAction {

    private final UserDAO userDAO;

    public UserAction(UserDAO userDAO) {   // <==== 构造器注入
        this.userDAO = userDAO;
    }

    // (...)
}

如果你更喜欢setter方式注入:

public class UserAction extends BaseAction {

    private UserDAO userDAO;

    public UserAction() { 

    }

    public void setUserDAO(UserDAO userDAO) {  // <===== Setter方式注入
        this.userDAO = userDAO;
    }

    // (...)
}

自动装配(Auto-wiring)

依赖装配同样也是无缝且自动的,同样,你不用关心任何事情,下面是个例子:

@Override
public void setupIoC() {

    ioc(BeanSession.class, MySQLBeanSession.class);

    ioc(UserDAO.class, JdbcUserDAO.class);
}

看下面 JdbcUserDAO 依赖BeanSession的例子:

public class JdbcUserDAO implements UserDAO {

    private final BeanSession session;
    private final Connection conn;

    public JdbcUserDAO(BeanSession session) {
        this.session = session;
        this.conn = session.getConnection();
    }

    // (...)
}

Mentawai 将会自动检测到依赖,并且将对象组装到一起,换句话说,它将会通过BeanSession的实现(你声明MySQLBeanSession)注入到JdbcUserDao的构造器,不用做任何其他事情。

TIP: 控制反转使单元测试和功能测试更容易

你可能感兴趣的:(翻译)