我是 Spring 框架的新手。请指导我对Spring的基本了解。我知道 Java 和 JSF,但我对 Struts 或其他框架一无所知。我已经在互联网上搜索并能够下载PDF,但是我不了解Spring流程,就像我了解JSF流程一样。请为我提供了解 Spring 流程的简单方法的链接。
3 回答
- 过渡 1 – 用户通过提交表单/单击超链接等方式向服务器发送请求。请求最初被提供给 WEB.XML。
- 过渡 2 – WEB.XML 通过查看标记将请求路由到 DispatcherServlet。
- 过渡 3 - 在 DispatcherServlet 内部,首先“HandlerMapping”将请求移交给合适的“控制器”。
- 过渡 4 - 控制器将请求映射到适当的模型类。所有业务逻辑都在 Model 类中完成。
- 过渡 5 – 如果需要数据库操作,那么 Model 类会将请求路由到合适的 DAO。所有的数据库操作都应该在 DAO 中进行。
- Transition6 – 如果需要,则将属性附加到请求/会话/应用程序范围并返回给模型。
- 过渡 7 - 如果需要,则将属性附加到请求/会话/应用程序范围并返回给控制器。
- 过渡 8 - 控制器简单地将其返回给任何视图(JSP/HTML 等)。
- 过渡 9 – JSP/Html 被查看回给用户。
我也是 Spring 框架的新手。到目前为止,下面的文档是最基本的文档。我也在读,希望对你有帮助。
我也是 Spring 新手,前段时间也有类似的问题。首先,我想向您推荐 Craig Walls 的“Spring in Action”一书,我发现它非常有用且易于理解,而且 http://www.tutorialspoint.com/spring/帮助我解决了很多问题。如果我对您的问题的理解正确,那么我们可以将“Spring 的流程”分为 Spring IoC 容器和 Spring bean 的生命周期。这是关于 Spring bean 生命周期的示例的非常小的概述。一个 bean 在 Spring 容器中经历了创建和销毁之间的几个步骤。这些步骤是:
- 实例化
- 填充属性
- BeanNameAware 的 setBeanName()
- BeanFactoryAware 的 setBeanFactory
- ApplicationContextAware 的 setApplicationContext()
- 预初始化 BeanPostProcessors
- InitializingBean 的 afterPropertiesSet()
- 调用自定义初始化方法
- 初始化后的 BeanPostProcessors
- DisponsableBean 的销毁
- 调用自定义销毁方法
每个步骤都提供了自己的定制机会。下面是一些简单地“追踪” bean 生命的代码:
对于豆类A:
public class ClassA implements InitializingBean, DisposableBean, BeanNameAware, BeanFactoryAware, ApplicationContextAware{
private String messageA;
public ClassA() {
System.out.println("ClassA: default constructor called.");
}
public void customInitMethod(){
System.out.println("ClassA: customInitMethod() method called.");
}
public void customDestroyMethod(){
System.out.println("ClassA: customDestroyMethod() method called.");
}
public String getMessageA() {
System.out.println("ClassA: message get method called.");
return messageA;
}
public void setMessageA(String message) {
System.out.println("ClassA: message set method called.");
this.messageA = message;
}
public void afterPropertiesSet() throws Exception {
System.out.println("ClassA: afterPropertiesSet() called because InitializingBean interface.");
}
public void destroy() throws Exception {
System.out.println("ClassA: destroy() called because DisposableBean interface.");
}
public void setApplicationContext(ApplicationContext arg0)
throws BeansException {
System.out.println("ClassA: application context set: " + arg0.getApplicationName());
}
public void setBeanFactory(BeanFactory arg0) throws BeansException {
System.out.println("ClassA: beanFacrory set.");
}
public void setBeanName(String arg0) {
System.out.println("ClassA: bean name set: " + arg0);
}
}public class ClassA implements InitializingBean, DisposableBean, BeanNameAware, BeanFactoryAware, ApplicationContextAware{
private String messageA;
public ClassA() {
System.out.println("ClassA: default constructor called.");
}
public void customInitMethod(){
System.out.println("ClassA: customInitMethod() method called.");
}
public void customDestroyMethod(){
System.out.println("ClassA: customDestroyMethod() method called.");
}
public String getMessageA() {
System.out.println("ClassA: message get method called.");
return messageA;
}
public void setMessageA(String message) {
System.out.println("ClassA: message set method called.");
this.messageA = message;
}
public void afterPropertiesSet() throws Exception {
System.out.println("ClassA: afterPropertiesSet() called because InitializingBean interface.");
}
public void destroy() throws Exception {
System.out.println("ClassA: destroy() called because DisposableBean interface.");
}
public void setApplicationContext(ApplicationContext arg0)
throws BeansException {
System.out.println("ClassA: application context set: " + arg0.getApplicationName());
}
public void setBeanFactory(BeanFactory arg0) throws BeansException {
System.out.println("ClassA: beanFacrory set.");
}
public void setBeanName(String arg0) {
System.out.println("ClassA: bean name set: " + arg0);
}
}
对于 CustomPostProcessor:
public class CustomPostProcessor implements BeanPostProcessor {
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("CustomPostProcessor: beforeInitialization on: "
+ beanName);
return bean;
}
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("CustomPostProcessor: afterInitialization on: "
+ beanName);
return bean;
}
}
在主类中,我们创建 ApplicationContext,获取 bean 并打印消息:
public static void main(String[] args) {
AbstractApplicationContext context = new ClassPathXmlApplicationContext(
"META_INF/spring/app-context.xml");
ClassA objA = (ClassA) context.getBean("classA");
System.out.println(objA.getMessageA());
context.registerShutdownHook();
}
在 app-context.xml 我们有:
<bean id="classA" class="ClassA" init-method="customInitMethod"
destroy-method="customDestroyMethod">
<property name="messageA" value="messagA: Hello Spring!" />
</bean>
<bean class="CustomPostProcessor" />
据我了解,输出线以这种方式对应于生命周期阶段:
- 1.实例化
ClassA:调用的默认构造函数。
- 2.填充属性
ClassA:被调用的消息集方法。
- 3.BeanNameAware的setBeanName()
ClassA:bean名称集:classA
- 4.BeanFactoryAware的setBeanFactory
ClassA:beanFacrory 集。
- 5.ApplicationContextAware的setApplicationContext()
ClassA:应用上下文集:
- 6.预初始化BeanPostProcessors
CustomPostProcessor: beforeInitialization on: classA
- 7.InitializingBean 的 afterPropertiesSet()
ClassA:afterPropertiesSet() 调用是因为 InitializingBean 接口。
- 8.调用自定义init-method
ClassA:调用 customInitMethod() 方法。
- 9.Post-initialization BeanPostProcessors
CustomPostProcessor:在初始化后:classA
- 程序打印消息
ClassA:被调用的消息获取方法。messageA:春天你好!
- 10.DisponsableBean的销毁
ClassA:destroy() 调用是因为 DisposableBean 接口。
- 11.调用自定义销毁方法
ClassA:调用 customDestroyMethod() 方法。