控制反转
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: 控制反转使单元测试和功能测试更容易