spring核心思想
第一阶段:配置阶段
1.web.xml -> J2ee规范(Servlet/Filter/Listener)->DispatcherServlet
设定init-param->设定url-pattern
2.配置Annotation.(@Controller,@Service,@Autowired,@RequestMapping)
第二阶段:初始化阶段
DispatcherServlet的init()读取web.xml信息,根据contextConfigLocation对应的值读取spring的主配置文件classpath:application.xml
1.IOC初始化-> 加载Spring的配置文件,配置各种各样的Been(beenName,beenClass)->缓存起来
Class.forName(beenClass)得到Class对象,通过反射把对象实例创建出来 ->缓存到IOC容器Map<String,Object>
2.DI(依赖注入) -> 重新迭代IOC容器中的Been,检查Been的属性,根据@Autowried自动赋值
3.MVC ->将Annotation配置的url和Controller的method建立一对一的映射关系
先判断@Controller注解-> 用反射把public方法扫描出来 -> 读取并解析@RequestMapping中配置的url -> 缓存Map<String,Method> handerMapping
第三阶段:运行阶段
doPost/doGet service() -> 拿到request(ImportStream的封装),response(OutStream的封装)对象 -> request.getRequestURL()拿到用户在浏览器地址栏输入的url -> 到handerMapping中找到url对应的method -> 用反射调用method得到返回值 -> response.Writer()输出HTML/JSON
Spring中的Been是不是线程安全的
Spring中的Been = IOC容器中的Been = 程序员自己写的Been
答案:不一定安全,Been的安全性只跟程序员自己写的Been是否线程安全有关,跟Spring无关
Spring中最重要的模块有哪些
IOC,AOP,DI,MVC