eclipse搭建springmvc初步解析

spring的三大特性:IOC(控制反转),DI(依赖注入),AOP(面向切面编程)

  • IOC:基于反射方式,将对象管理以bean的方式提供给spring管理,spring管理bean的基础类是BeanFactory
  • DI是可以在初始化对象的时候,操作对象的属性,方法如在bean中加init-method:来初始化一个方法;destory-method:来控制对象容器被销毁的时候,如果bean被容器管理,会调用该方法,仅在scope为单例(singleton时有效);
  • AOP:是基于动态代理方式实现,主要用于操作日志,事务等的管理

pom.xml配置:


  4.0.0
  com.scu.tgm
  dubbo
  war
  1.0
  dubbo Maven Webapp
  http://maven.apache.org
  
  
    dubbo
  

  
      4.1.6.RELEASE
  
  
  
  	 
     
         junit
         junit
         4.12
         test
     
     
	    org.springframework
	    spring-test
	    ${spring.version}
	

	  
      
        org.springframework  
        spring-webmvc  
        ${spring.version}  
      
  
  

web.xml配置:mvc需要这个配置而已,单单spring不需要


    
  Archetype Created Web Application
  
  
  
      dispatcher
      
      org.springframework.web.servlet.DispatcherServlet
        
          
             contextConfigLocation
          classpath:springContext.xml
      
      
      1
  
  
      dispatcher
      /
  

  
      org.springframework.web.context.ContextLoaderListener
  

springContext.xml配置:



    
    
    
    
    	
    
    
    
        
            /WEB-INF/views/
        
        
            .jsp
        
    

 User:

package com.scu.tgm.dubbo.entity;

public class User {
	
	private String name;
	private Integer age;
	
	public void init() {
		age=24;
	}
	public void say() {
		System.out.println("---");
		System.out.println(this.toString());
	}

省去了setter和getter
	
}

初步解析MVC原理:

eclipse搭建springmvc初步解析_第1张图片

Springmvc执行流程

   1.用户发送一个请求到DispatcherServlet;

   2.通过HanderMapping对象去查找请求地址对应的Handler(HandlerHandlerExecutionChain,HandlerExecutionChain=自己的Controller+N个拦截器interceptor)

   3.如果handler处理器存在,那么先会去查找能执行这个控制器对应HanderAdpter(处理适配器)

   4.先执行对应拦截器,并且拦截器是放行的;

   5.通过HanderAdpter(处理适配器)去调用我们控制器代码;并且接收ModelAndView

  6.通过视图解析器,根据我们提供的视图名,创建对应视图对象(forward:/WEB-INF/_01_hello.jsp,redirect:/WEB-INF/_01_hello.jsp) velocity

   7.通过视图和模型进行合成内容;

   8.返回结果给客户端;

 spring测试:
eclipse搭建springmvc初步解析_第2张图片

package dubbo;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.scu.tgm.dubbo.entity.User;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:springContext.xml" })
public class SpringTestDemo {
	@Autowired
	BeanFactory beanFactory2;
	
	@Test
	public void test() throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
		//spring管理bean是使用的反射方式,依赖注入IOC,与对象的构造方法无关因为获取的是DeclaredConstructor
		Class userClass=Class.forName("com.scu.tgm.dubbo.entity.User");
		Constructor declaredConstructor = userClass.getDeclaredConstructor();
		User user=(User)declaredConstructor.newInstance();	
		
		//这个是手动获取resource,与@Autowired一样
		Resource resource=new ClassPathResource("springContext.xml");
		BeanFactory beanFactory=new XmlBeanFactory(resource);
		
		//一般我们使用ApplicationContext,因为BeanFactory只提供管理bean功能,ApplicationContext继承BeanFactory并且
		//丰富了它的功能,使用ClassPathXmlApplicationContext来获取该对象
		ApplicationContext applicationContext=new ClassPathXmlApplicationContext("springContext.xml");
		User userBean3 = (User)applicationContext.getBean("user",User.class);
		
		User userBean2 = (User)beanFactory2.getBean("user",User.class);
		User userBean = (User)beanFactory.getBean("user",User.class);
		userBean.say();
		userBean2.say();
		userBean3.say();
	}

}

 测试的时候遇到一个错误:

@RunWith(SpringJUnit4ClassRunner.class)报错找不到SpringJUnit4ClassRunner.class,需要导入的包:

导入后依然报错,需要手动导入import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

你可能感兴趣的:(spring)