context指WebApplicationContext记得学spring大家都在写xml, 那个烦, 真是网上copy一份复制粘贴改改类名就用了.
echo-ssm 几种配置方式
web.xml限定
下面来自官网, 亲自未实践.
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/dispatcher-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
spi限定
还记得spi吗? 我们也可以使用spi的方式加载.
public class MyWebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext container) {
XmlWebApplicationContext appContext = new XmlWebApplicationContext();
appContext.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");
ServletRegistration.Dynamic dispatcher =
container.addServlet("dispatcher", new DispatcherServlet(appContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
}
关键是到底配置了什么?
context环境支撑了bean. ioc容器中管理的对象在这一层被配置.
echo项目中使用简单几行配置可以将kvpair注入, 下面出自spring-core文档
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<bean id="kv" class="beer.zeer.KVPair">
<property name="key" value="ping" />
<property name="val" value="pong" />
</bean>
相比之下, 注解也可以使用, 之前说这其实就是运行时的一种方式.
@Component
public class KVPair {
@Value("ping")
private String key;
@Value("pong")
private String val;
}
这属于field注入, 相似的还有构造器, setter注入方式. 这不属于讨论的范围.
这里context是一个ioc容器, 但在mvc的流程中, 还有很长一段路需要走.
下面来谈谈context配置主要方式, 长话短说spring默认提供了三种方式, echo中用到的是2注解.
- xml
- 注解
- 脚本
这是spring实现的几种方式, 接下来谈谈原理, 理解之后, 你可以自定义实现db注入, txt注入.
原理已经看懂了, 太长, 写不下, 看的人慢慢琢磨吧.