了解基本Spring框架和总流程
我不熟悉Spring框架。请指导我对Spring的基本理解。我知道Java和JSF,但我对Struts或其他框架一无所知。我已经在互联网上搜索过,并且能够下载一个PDF文件,但是我不理解Spring流,就像我理解JSF流一样。请为我提供一些链接,让我了解Spring的流程。我也是Spring框架的新手。 到目前为止,以下文件是最基本的文件。我也在读,希望能对你有所帮助了解基本Spring框架和总流程,spring,spring-3,springsource,spring2.x,Spring,Spring 3,Springsource,Spring2.x,我不熟悉Spring框架。请指导我对Spring的基本理解。我知道Java和JSF,但我对Struts或其他框架一无所知。我已经在互联网上搜索过,并且能够下载一个PDF文件,但是我不理解Spring流,就像我理解JSF流一样。请为我提供一些链接,让我了解Spring的流程。我也是Spring框架的新手。 到目前为止,以下文件是最基本的文件。我也在读,希望能对你有所帮助 我也是春天的新手,很久以前也有类似的问题。首先,我想向你们推荐克雷格·沃尔斯的《春天在行动》一书,我发现它非常有用,也很容易理解
我也是春天的新手,很久以前也有类似的问题。首先,我想向你们推荐克雷格·沃尔斯的《春天在行动》一书,我发现它非常有用,也很容易理解 帮我弄明白了很多事情。如果我正确理解了你的问题,那么我们可以将“Spring流”划分为Spring IoC容器和Spring bean的生命周期。这里是关于Springbean生命周期的一个非常小的概述。在春天,一个bean在创建和销毁之间经历了几个步骤 容器。这些步骤是:
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;
}
}
在main类中,我们创建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.实例化
- 2.填充属性
- 3.BeanNameAware的setBeanName()
- 4.BeanFactoryAware的setBeanFactory
- 5.ApplicationContextAware的setApplicationContext()
- 6.预初始化BeanPostProcessors
- 7.初始化Bean的AfterPropertieSet()
- 8.调用自定义init方法
- 9.初始化后BeanPostProcessors
- 程序打印消息
- 10.DisponsableBean的销毁
- 11.调用自定义销毁方法
- 转换1–用户通过提交表单向服务器发送请求 单击超链接等。请求最初提供给WEB.XML
- 转换2–WEB.XML通过查找将请求路由到DispatcherServlet 在标签上李>
- 过渡3–内部DispatcherServlet, 第一个“HandlerMapping”将请求移交给合适的“控制器”
- 转换4–控制器将请求映射到适当的模型类。全部的 业务逻辑在模型类中完成李>
- 转换5–If数据库 需要操作,然后模型类将请求路由到合适的 刀。所有数据库操作都应该在DAO中执行
- 转换6–如果需要,将属性附加到请求/会话/应用程序中 范围并返回到模型
- 过渡段7–如果需要,则连接 将属性放入请求/会话/应用程序范围并返回到 控制器李>
- 转换8–控制器只需将其返回到任何视图 (JSP/HTML等)
- 转换9–JSP/Html将返回给用户查看
谢谢,我确实有那份文档,开始的时候很好,但接下来,我觉得有点不对劲,所以我想问一下,可能是我们看了三遍就能明白了,我想soo,无论如何,谢谢你,伙计。嗨,又是我。当我完全被国际奥委会和AOP这样的术语弄糊涂的时候,我发现了这个网站,它非常基本和清晰。你读对了这个问题吗?问题在于Spring流,而不是Spring MVC请求-响应流。