1、Spring中用到了哪些设计模式

1.工厂模式,这个很明显,在各种BeanFactory以及ApplicationContext创建中都用到了;

2.模版模式,这个也很明显,在各种BeanFactory以及ApplicationContext实现中也都用到了;

3.代理模式,在Aop实现中用到了JDK的动态代理;

4.单例模式,这个比如在创建bean的时候。

5.Tomcat中有很多场景都使用到了外观模式,因为Tomcat中有很多不同的组件,每个组件需要相互通信,但又不能将自己内部数据过多地暴露给其他组件。用外观模式隔离数据是个很好的方法。

6.策略模式在Java中的应用,这个太明显了,因为Comparator这个接口简直就是为策略模式而生的。Comparable和Comparator的区别一文中,详细讲了Comparator的使用。比方说Collections里面有一个sort方法,因为集合里面的元素有可能是复合对象,复合对象并不像基本数据类型,可以根据大小排序,复合对象怎么排序呢?基于这个问题考虑,Java要求如果定义的复合对象要有排序的功能,就自行实现Comparable接口或Comparator接口.

7.原型模式:使用原型模式创建对象比直接new一个对象在性能上好得多,因为Object类的clone()方法是一个native方法,它直接操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。

8.迭代器模式:Iterable接口和Iterator接口 这两个都是迭代相关的接口,可以这么认为,实现了Iterable接口,则表示某个对象是可被迭代的;Iterator接口相当于是一个迭代器,实现了Iterator接口,等于具体定义了这个可被迭代的对象时如何进行迭代的

2、struts集成spring

spring导jar包还需要struts lib下的spring

配置监听器listener放到web.xml

<listener>监听服务器,一旦启动,会读取配置文件,初始化容器参考struts文档的spring plugin部分

<listener-class>

org.springframework.web.context.ContextLoaderListener

</listener-class>

</listener>

<context-param>指定配置文件位置

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INFO/applicationContext*.xml,classpath*:applicationContext-*.xml</param-value>项目路径

</context-param>

<filter>配置过滤器

<filter-name>struts2</filter-name>

<filter-class>org.apache.struts2.dispatcher.filter.strutsPrepareAndExecuteFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>struts2</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

在lib下建配置文件.xml      applicationContext.xml

<bean id="adminDao" class="com.bochy.dao.impl.AdminDaoImpl"></bean>

<bean id="adminAction" class="com.bochy.action.AdminAction">

<property name="adminDao" ref="adminDao"></property>

</bean>

配置struts.xml

class属性写成action对象在spring容器中的名字adminAction,通过spring管理action,之前是靠struts管理的

怎么实现的?在struts-spring-plugin里有配置文件,指定了struts对象的工厂是spring,这个配置覆盖了struts原有的配置

spring容器原理

参数注入,构造注入

<bean id="adminAction" class="com.bochy.bean.AdminAction">

<construtor-ary ref="adminDao"></construtor-ary>

</bean>

3、bean的生命周期

spring:web随着web启动而启动,web关闭而关闭,java project new Application启动了,需要关闭的话,注册钩子                                 Hook java的事件机制,要有事件对象,继承ApplicationEvent,要有监听器,实现ApplicationListener<T>,                                 泛型指定监听哪一种时间在配置文件里,引入监听器,需要的时候,发布事件

bean:初始化,先执行构造方法,然后setter方法,然后init-method,destroy-method

4、spring的api在类里获得容器,WebApplicationContextUtils获得容器上下文

5、spring注解

在context包下,需要引入context命名以及相应的location

@component("adminDao")在AdminDaoImpl中;@component("adminService")在AdminServiceImpl中,在setter方法中                         @Resource说明要依赖其他对象默认按名字;@Component("adminAction")@Scope("prototype")在AdminAction                         中@Required代表这个属性一定要被注入在setter方法中

Component注册成一个组件,相当于配置文件里的bean;Resource是指引用依赖对象(按名字装配)Autowired按类                             型;Scope指名作用域

@Controller("adminAction")在AdminAction中
            @Scope("prototype")
            @Autowired在setter中/@Resource

@Service("adminService")在AdminServiceImpl中
            @Autowired在setter中/@Resource

@Repository("adminDao")在AdminDaoImpl中

6、Spring的Aop:面向切面的编程(相当于代理)

切面:代理类就是切面

目标(对象):被切入的类

代理:切面和目标共同构成的

切点:是连接点的抽象,所有的连接点都是切点,代表所有连接点

连接点:每一条线上切面和目标的焦点

通知:是切面的内容

7、Aop的使用基于代理

引入jar包bean,context,core,expression,Commons,Aop,aspect(web),aopallionce,aspectjwewer

注解:引入命名空间xmlns:aop加catalog

<aop:aspectj-autoproxy/>

写切面类@component@Aspect(相当代理类)方法实际切入内容@before在某一个目标之前执行(相当于invoke()                                          @before("execution(public * com.bochy.dao.impl.*.*(...))")前置通知 确定位置 加入这个方法 就是切点

@after后置通知(value="....")                                                                                                                                                              @AfterReturning(pointcut=execution("    ",returning="retVal")返回值通知                                                                                          @AfterThrowing(pointcut="   ",throwing="te")抛出异常                                                                                                                      @Around("      ")环绕通知

简化:@pointCut("exection(      )")                                                                                                                                                               public void pointCut(){}

@Before("pointCut")

@order()通过它可以规定切面的先后顺序

配置.xml

<bean id="logAspect" class="com.bochy.aop.logAspect"></bean>

<aop:config> and not execution("   ")不包含哪个

<aop:pointcut express="  " id="daoPt"/>声明切点

<aop:aspect ref="logAspect" order="1">定义切面

<aop:before methed="beforelog" pointcutref=" "/>

</aop:aspect>

<aop:config>

8、spring集成hibernate(ORM)用spring管理SessionFactory

(1)、引入jar包,连接池的jar

(2)、配置数据源dataSource

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destory-methed="close">

<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>

<property name="url" value="jdbc.oracle.thin:@localhost:1521/orcl"/>

<property name="username" value="scott">

<property name="passworld" value="tiger">

<property name="maxActive" value="15">最大连接数

<property name="maxIdle" value="10">最大空闲数

<property name="minIdle" value="5">

</bean>

(3)、让hibernate使用数据源引入hibernate jar包(orm,jdbc),指定映射类配hibernate信息

<bean id="sessionFactory" class="org.springframework.orm.hibernatr4.locatSessionFactoryBean">

<property name="dataSource" ref="dataSource"/>

<property name="packagesToScan">

<list>指定映射类所在的包

<value>com.bochy.bean</value>

</list>

</property>

</bean>

<property name="mappingResources">指定映射文件(可省略)

<list>

<value>com/bochy/bean/Admin.hbm.xml<value>

</list>

</property>

<property name="hibernateProperties">

<props>

<prop key="hibernate.dialect">org.hiberbate.dialect.OracleDialect</prop>

<prop key="hiberbate.show_sql">true</prop>

<prop key="hibernate.hbm2ddl.auto">update</prop>

<prop key="hibernate.current_session_context_class">thread</prop>

</props>

</property>

(4)、在dao的impl中,注入SessionFactory加入setter、getter

(5)、<context:property-placeholder location="classpath:dbcp.properties"/>占位符,取代  (2)配置需要的值,从其                               他文件读

建dbcp.properties文件(国际化)jdbc.driverClassName=oracle.jdbc.driver.OracleDriver等

在Spring配置文件中改为<property name="driverClassName" value="${jdbc.driverClassName}"/>

(6)、注解:保持(3)(4)(5)不变

<context:annotation-config/>开启注解

<context:component-scan base-package="com.bochy...指定扫描包"/>

<aop:aspectj-autoproxy/>针对Aop注解

9、事务

1)<bean id="txmanger" class="org.springframework.orm.hibernate.HibernateTransaction"></bean>

2)<tx:annotation-driven/>开启事务注解

3)@Transactional在service方法中加入(value=txmanger)

属性:事务的传播行为

propagation=Propagation.REQUIRE只有一个事务用的都是一个

Propagation.REQUIRE_NEW新开启一个,第一个挂起

Propagation.Nested第一个新开一个,嵌在第一个内

isolation隔离级别.READ_COMMITTED

readOnly=true只读,提高效率

Spring事务有哪些:

https://blog.csdn.net/chinacr07/article/details/78817449

https://zhanghteye.iteye.com/blog/2371572

10、Spring IOC如何实现

https://www.cnblogs.com/best/p/5727935.html

11、Struts:

有一组相互协作的类(组件),Servlet以及jsptaglib组成,基于struts架构的web应用程序基本上符合JSPModel2的设计标准,可以说是mvc设计模式的一种变化类型,struts有其自己的控制器(controller),同时整合了其他的一些技术去实现模型层(M)和视图层(V),struts可以很容易的与数据访问技术相结合,包括EJB,JDBC和Object Delation Bridge,在视图层JSP,Velocity Templates XSL这些组件结合

12、MVC:

model:应用程序核心(比如数据库列表),应用程序中用于处理应用程序数据逻辑部分,通常模型对象负责存取数据

view:显示数据(比如数据库记录),应用程序中处理数据显示部分,通常视图是依据模型数据创建的

controller:处理输入(写入数据库记录),应用程序中处理用户交互,通常控制负责从视图读取数据,控制用户输入并向模型发送

mvc模式同事提供了对HTML、CSS和JavaScript的完全控制,最经典的mvc就是JSP+Servlet+javabean的模式

13、SpringMVC流程:

1)、用户发送请求至前端控制器DispatcherServlet

2)、DispatcherServlet收到请求调用HandlerMapping处理映射器

3)、处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理拦截器一并返回给DispatcherServlet

4)、DispatcherServlet调用HandlerAdapter处理适配器

5)、HandlerAdapter经过适配器调用具体的处理器Controller,也叫后端控制器

6)、Controller执行完成返回ModelAndView

7)、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet

8)、DispatcherServlet将ModelAndView传给ViewReslover视图解析器

9)、ViewReslover解析后返回具体View

10)、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)

11)、DispatcherServlet相应客户

14、组件说明:

DispatcherServlet:作为前端控制器,整个流程控制的中心,控制其他组件执行,同一调度,降低组件之间的耦合性,提高每个组件的扩展性

HandlerMapping:通过扩展处理器实现不同的映射方式,例如:配置文件方式、实现接口方式、注解方式

HandlerAdapter:通过扩展处理器适配器,支持更多类型的处理器

ViewResolver:通过扩展视图解析器,支持更多的视图解析,例如:jsp、freemaker、pdf、excel等

前端控制器DispatcherServlet(不开发)

处理映射器HanlerMapping(不开发)

处理适配器HandlerAdapter(不开发)

处理器Handler(开发)

视图解析器(不开发)

视图View(开发)

15、SpringMVC常用注解:

@Controller:把用户请求的数据经过业务处理之后封装成一个Model,然后再返给View进行展示

@RequestMapping:处理请求地址的注解,value(实际地址),method(Get、POST、PUT、delete),consumes(处理请求的提交内容类型Content-Type,application/json,text/html),produces(指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回),params(指定request中必须包含某些参数值时,才让该方法处理),headers(指定request中必须包含某些指定的header值,才能让该方法处理请求)

@Resource和@Autowired

@ModelAttribute和@SessionAttributes

@PathVariable用于将请求url中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数

@RequestParam获取参数,相当于request.getParameter(“name”)

@ResponseBody返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用

@Component当不知道一些类归到那层时使用

@Repository:dao层,在daoimpl上面注解

16、SpringMVC是什么:

springmvc是一个MVC的开源框架,springMVC=struts2+spring,springMVC就相当于是struts2加上spring的整合

springMVC是spring的后续产品,其实就是spring在原有基础上,又提供了web应用的MVC模块,可以简单的把springMVC理解为是spring的一个模块,springMVC和spring无缝集成,其实springMVC就是spring的一个子模块,所以根本不需要同spring进行整合

1、环境搭建:

1)引入jar包,aop/beans/context/core/expression/web/webmvc/comms-logging

2)在web.xml中配置DispatcherServlet是spring mvc的入口

<servlet>

<servlet-name>DispatcherServlet</servlet>

<servlet-class>org.springframework.web.servlet.DispacherServlet<servlet-class>

<init-param>

<param-name>contextconfigLocation</param-name>上写文引导路径(容器)

<param-value>寻找配置文件</param-value>

</init-param>

<load-on-startup>1</load-on-startup>在程序启动时就对它进行加载

</servlet>

<servlet-mapping>

<servlet-name>DispatcherServlet</servlet-name>

<url-pattern>/</url-pattern>

</servlet-mapping>

3)建立springmvc-servlet.xml

xmlns:mvc 在spring文档中,命名空间,

<context:component-scan base_package="com.bochy.handler">负责转发的类AdminHandler请求

4)在AdminHandler上加@controller  写handler类,请求路径和方法关联

在方法上加入@RequestMapping("/login")在表单里的请求路径向方法关联

在方法中加入(Admin asmin)参数传递(使用封装对象方法的参数是对象,表单的name是对象的属性值)

return"login_success";jsp页面的名字,返回页面在配置文件中配置InternalResourceViewResolver

<bean id="viewResolver" class="org.springframework.web.servlet.view....">在配置文件中写入sping搜索                                                     InternalResourceViewResolver

<property name="prefix" value="/WEB-INFO/jsp/">前缀

<property naem="suffix" value=".jsp">后缀

</bean>

访问作用域(Admin asmin,Map<String,Object> map)  map.put("login",admin);把对象放入作用域中

5)解决乱码搜CharacterEncodingFilter类,在web.xml中写过滤器

<filter>

<filter-name>CharacterEncodingFilter</filter-name>

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>utf-8</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>characterEncodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

2、整合增删改查Spring+SpringMVC+Mybatis

1)引入jar包(16个)

2)在web.xml配spring-mvc的入口,集成springmvc

配置listener启动struts容器

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

解决乱码,配置过滤器

处理请求,也通过过滤器解决

<filter>

<filter-name>httpMethedFilter<filter-name>

<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>

</filter>

3)写mybatis的配置文件spring-mybatis.xml

<bean id="dataSource" desting-method="close" class="...BasicDataSource">

<property name="driverClassName" value="${jdbc.driverClassName}"/>

<property name="url" value="${jdbc.url}"> jdbc:oracle:thin:@localhost:1521/orcl

<property name="username" value="${jdbc.username}">

<property name="password" value="${jdbc.password}">

</bean>

<bean id="sqlSessionFactory" class="org...SqlSessionFactoryBean">

<property name="dataDource" ref="dataSource"/>

</bean>

<bean id="mapperScannerConfigurer" class="org....MapperScannerConfigurer">

<property name="basePackage" value="com.bochy.dao"/>

</bean>扫描配置mapper,指明扫描哪个Admindao

Spring、SpringMVC相关推荐

  1. 框架:spring、springmvc、springboot

    先来说说spring.springmvc.springboot的关系. spring boot只是一个配置工具,整合工具,辅助工具. springmvc是框架,项目中实际运行的代码 Spring 框架 ...

  2. 配置spring、SpringMVC,mybatis进行整合

    springframwork的官网 spring-projects/spring-mvc-showcase https://github.com/spring-projects/spring-mvc- ...

  3. Spring、SpringMVC、SpringBoot、SpringCloud的关系分享

    最近在做一些技术架构原型,发现Spring已经跟三四年前发生了很多的区别,技术的迭代日新月异,再不学习就赶不上时代的脚步 ,以下是最近关于Spring.SpringMVC.SpringBoot.Spr ...

  4. Spring、SpringMVC和Springboot的区别

    Spring.SpringMVC和Springboot的区别(网摘) spring boot就是一个大框架里面包含了许许多多的东西,其中spring就是最核心的内容之一,当然就包含spring mvc ...

  5. SSM框架终极篇——Spring、SpringMVC、MyBatis整合练习(超级详细)

    SSM框架终极篇--Spring.SpringMVC.MyBatis整合练习 一.准备工作 环境: 新版IDEA MySQL 5.7 Tomcat 9.0.2 Maven 要求: 熟练掌握MySQL数 ...

  6. 超级详细!!!Spring、SpringMVC、Mybatis知识点完整版更新!IOD、DI依赖注入、Mybatis配置、SQL、MVC拦截器、Web开发、SSM整合案例。

    Spring Spring框架知识点完整版 上篇,SSM三部曲之一 知识点涵盖:Spring简介IOC控制反转DI依赖注入LombokSPEL配置文件低频知识点注解开发Spring常用注解 链接:ht ...

  7. 基于 Spring、SpringMVC、MyBatis 的熊猫书屋系统

    开源项目:book-house-ssm 开发时间:2022.04.21 - 2022.05.13 文章目录 一.快速开始 二.背景调查 三.功能描述 3.1 用户功能 3.2 管理员功能 四.功能演示 ...

  8. Spring、SpringMVC、SpringBoot、SpringCloud的联系和区别

    一. 上一篇文章刚刚简单介绍了spring框架,下面我将介绍一下Spring,SpringMVC,SpringBoot,SpringCloud的联系和区别. 首先先简单介绍一下各个框架. Spring ...

  9. 框架:springboot组合spring、springmvc、mybatis的一个小demo

    Spring+SpringMVC+Mybatis就是大名顶顶的SSM了. 这里我们使用IDEA的SpringBoot和版本控制器MAVEN构建一个SSM的demo. 介绍: 在搭建过程中spring整 ...

  10. spring、springMvc、springBoot和springCloud的联系与区别

    作者:尘光掠影  来源:CSDN  原文:https://blog.csdn.net/alan_liuyue/article/details/80656687  spring和springMvc: 1 ...

最新文章

  1. 张家口zec挖矿软件哪里下载_AMTO软件下载-AMTO挖矿官网版v1.1
  2. [转]Velocity脚本摘要
  3. 去掉input密码框自动补全功能
  4. 提高篇 第五部分 动态规划 第4章 状态压缩类动态规划
  5. 5 万条微信语音升入太空;阿里京东否认停止社招;雷军开怼华为 | 极客头条...
  6. C1083: 无法打开包括文件: “stdafx.h”: No such file or directory
  7. selenium webdriver实战宝典 pdf_Selenium+webdriver爬虫技术实战之沃运维报表提取
  8. uni-app开发环境搭建创建uni-app项目
  9. cmd命令行乱码 oracle_Oracle查询中文乱码问题
  10. 怎么把ide改成ahci_怎么改硬盘模式IDE,AHCI
  11. Ubuntu14.04安装wineqq国际版
  12. OpenCV总结:绘制朱利亚(Julia)集合图形
  13. 使用3g模块SIM5360E收发短信
  14. 简单教会按关键字搜索商品
  15. EXCEL表单元格内特定内容的提取
  16. java获取当前日,当前月的开始时间和结束时间,当前季度的开始时间和结束时间
  17. WEB端显示三维地形模型
  18. ChatGPT初体验-帮我写一本奇幻冒险小说(Aethia的勇士)
  19. 爱尔兰卫生部遭Conti勒索软件攻击说明与建议
  20. 用3D全息投影打造一场婚礼有什么优势?

热门文章

  1. Sign in With Apple (苹果授权登录)
  2. ksps什么单位_采样频率Hz 采样率KSPS或MSPS,两种单位的换算关系
  3. 高等教育心理学:学习心理(重要)
  4. 电容的字母型规格型号标号材料容差总结
  5. 安卓逆向——Xposed插件常用HOOK方法
  6. Java方法 的学习
  7. php ci log,PHP框架CI CodeIgniter 的log_message开启日志记录方法
  8. Python爬取招聘网站
  9. 网站建设SEO推广说明
  10. Win11的几个实用技巧系列之不能玩植物大战僵尸、如何彻底删除360所有文件