[v_notice]本文转载自http://blog.shangsu.me[/v_notice]
Sping有什么组成
- IOC 控制反转(核心)
- DAO 数据访问对象(JDBC封装)
- AOP 面向切面编程
- ORM 对象关系映射
什么是IOC
Inversion of control 控制反转
程序需要对象的时,由原来的New的方式变成了由容器来进行管理对象的创建.管理以及对象直接关系的维护
优势:可以大大降低组件直接的耦合度
Spring容器
任何java类都可以在Spring容器进行对象的创建并交给容器进行管理使用
Spring容器实现类IOC和AOP机制
Spring容器的类型有ApplicationContext和BeanFactory
Spring容器创建对象的三种方式
- 构造器方式实例化(默认调对应的无参构造)
<bean id="对象标识符" class="包名.类名"></bean>
- 静态工厂方法实例化(类型.静态方法名( ))
bean id="对象标识符" class="包名.类名" factory-method="静态方法名"></bean>
- 实例化工厂方法实例化(使用一个已经存在的对象来创建另一个对象)
<bean id="对象标识符" class="包名.类名" factory-method="静态方法名" factory-bean="工厂对象id"></bean>
Spring容器对应的作用域
Spring容器对象断作用域默认是单例的,可以通过XML中bean标记中对应点scope属性指定成非单例
scope="singleton" 单例
scope="prototype" 多例
对象的初始化和销毁
- 初始化
bean对象可以通过beans标记中的default-init-method来指定初始化方法,由于这样指定时影响范围比较大,所以一个类中如果没有对应的初始化方法也不会报错,也可以在bean标记中使用init-method来指定初始化方法,由于这样影响比较小,控制比较精准所以类型中没有对应的初始化方法程序会报错 - 销毁方法
bean对象可以通过beans标记中的default-destor-method来指定销毁方法,由于这样指定时影响范围比较大,所以一个类中如果没有对应的销毁方法也不会报错,也可以在bean标记中使用destor-method来指定销毁方法,由于这样影响比较小,控制比较精准所以类型中没有对应的销毁方法程序会报错
销毁方法只针对单例
bean对象的延迟实例化
bean对象默认是单例的,这样容器启动时就会创建对象
可以通过bean标识中的lazy-init来制定延迟创建 取值为true
什么是DI
Dependent injection 依赖注射
解决了组件的装配问题
实现DI的三种方式
- setter注入
<bean id="对象标识符" class="包名.类名">
<property name="属性名" value="属性值" />
</bean>
基于set方法的 属性名就是set方法中set去掉首字母小写,如果属性值是一个复杂的对象类型则需要ref复制 ref=”对象id”
- 构造器方式注入
<bean id="对象标识符" class="包名.类名">
<constructor-agr name="属性名" value="属性值" />
</bean>
基于构造方法的 属性名就是构造方法中,如果属性值是一个复杂的对象类型则需要ref复制 ref=”对象id” 除了使用name还可以使用index
- 自动化注入
一个bean组件可以在bean标记中使用autowire属性自动注入的方式
取值有byName byType constructor
byName参考set方法
byType按照模板对象类型加载如果有两个相同类型对象程序无法正常加载
constructor 参考是构造方法只要碰到一个不复刻条件的参数就会终止查找,但不报错,如果加载的参数有冲突就会启用名字进行匹配
参数的注入
- 注入简单类型的参数
使用value赋值
简单类型包括String、八种基本类型、八中封装类型、枚举
- 复杂对象的注入
把value换成ref即可
- 集合对象的注入
List
<list>
<value></value>
</list>
set
<set>
<value></value>
</set>
map
<map>
<entry key="" value="" ></value>
</map>
propertise
<prpos>
<prps key="">value</prps>
</prpos>
- 集合对象的单独定义
list
<util:list>
<value>
</util:list>
set
<util:set>
<value>
</util:set>
map
<util:map>
<value>
</util:map>
properties集合的单独定义时还可以关联一个配置文件
- Spring中的EL表达式
spring中支持表达式语音取值,取值的语法是之前的$换成#
什么是组件扫描
component scan 组件扫描
它是Spring提供的一套基于注解(标注)的技术
目的是简化了XML的配置
如何实现组件扫描
- 建立项目导入jar包,拷贝Spring配置文件到src下
- 定义一个类
- 开启组件扫描
<context:component-scan bean-package=”包名”/> - 在自定义的类打上对应的标注
- 创建Spring容器,从容其中获取组件
标注
- 持久层 @Respository
- 服务层 @Server
- 控制层 @Controller
- 通用层 @Component
- 和作用域相关的 @scope(singleton/prototype)
- 和初始化相关的 @postConstruct
- 和销毁相关的 @preDestror
- 和DI相关的标注
@value 用在成员变量和set方法上来解决简单值的注入,如果是负责对象则需要EL表达式 @Autowired 可以用在成员变量、set方法和构造方法上 主要解决负责对象的装配问题.优先使用类型进行匹配如果有冲突则启用名字进行匹配 @Qualifier(name) 可以指定名字进行查找但这个标注不能用在构造方法上,并且查到的组件属于强依赖(找不到会报错),可以通过@Autowired中的required=false来解除强依赖,尽量去找,找不到不生效. @Resource 可以用在成员变量和set方法上,主要解决复杂对象的装配问题,优先使用名字进行匹配,如果匹配不上则启用类型匹配,它属于JDK中的标注,无法解除强依赖.可以指定名字查找,用在set方法或成员变量名 @Resource(name="")
什么是DAO
Data access Object 数据访问对象
spring Dao为了整合JDBC提供了封装简化DAO组件的编写
Sorung Dao提供了AOP模式的事务处理,提供了基于运行时异常对JDBC的检查异常错了封装,封装成了DataAccessException,这个异常继承自RunTimeException
Spring Dap核心类
- JDBCTempplate 可以完成驱动加载、连接获取、执行环境获取、资源释放
只关心sql定义和sql的执行
- JDBCDaosupport这个类可以提供JDBCTemplate类的对象
Spring MVC
Spring提供了一个web mvc框架,便于开发MVC结构的java web程序
SpringMVC框架控制器为DispatcherSerlet,DispatchrServlet负责接收然后将请求分发到不通的处理进行业务处理,最后由控制器完成转发动作
Spring web MVC 主要实现组件
- DispatchrServlet(控制器,请求入口)
- HandlerMapping (控制器,请求派发)
- Controller (控制器,请求处理)
- ModelAndView (模型,封装处理结果和视图)
- ViewResoler (视图,视图处理器)
基本MVC步骤
- 建项目导包
- 在WEB.XML中配置DispatcherServlet并通过初始化参数ContextConfigLocation指定Spring配置文件的位置
- 在Spring配置文件中配置HandlerMapping
- 写一个java类实现Controller接口,在接口中返回对应的ModeAndView并在Spring容器中创建控制器组件
- 在Spring配置文件中配置VIewResoler的实现类,InternalResourceViewResoler指定前缀和后缀
基于标注的MVC步骤
- 建项目导包
- 在WEB.XML中配置DispatcherServlet并通过初始化参数ContextConfigLocation指定Spring配置文件的位置
3.开启标注形式的MVC Spring配置文件加上 <context:component-scan> <MVC:annotation-driven> - 写一个java类,类上打上@Controller 方法上打上@requestMapping
- 在Spring配置文件中配置VIewResoler的实现类,InternalResourceViewResoler指定前缀和后缀
Spring MVC控制如何将数据传送到页面
- 使用域对象进行传输
request(HttpServletRequest)
session(Httpsession)
application(ServletContext)
- 使用ModeAndView进行传输
mav.getModel() 这样返回一个map 调用put设置值
mav.getModelMap() 这样返回一个ModelMap这个类是String ui包中的类型 对Map进行了封装,提供了put和addAttribute
- 使用Model进行传输
只有addAtribute方法没有put方法 - 只用ModelMap进行数据传输
有put和addAttribute方法 - 让容器自动传输
容器会自动传输复杂对象放入request
Spring MVC控制器中如何获取session对象
- request对象获取
- 直接定义Httpsession参数
Spring MVC控制器中如何完成重定向
- 当控制器的方法返回String时在请求路径前加redirect: 即可
- 当控制器的方法返回ModelAndView时使用RedirectView完成重定向
中文参数乱码问题
使用Spring编码过滤器
什么是拦截器
可以理解过滤器的封装
Spring的HandleMapping处理器支持拦截器应用,当需要为某些请求提供功能时,例如用户认证,登录检查等.
拦截器对应一个接口 HandlerInterceptor
拦截器对应三个方法
- preHandle 在HandlerMapping之后控制器之前调用这个方法,这个方法返回Boolean 当返回true是代表可以进行后续逻辑的调用,如果返回false代表拦截不继续控制器的访问
- postHandle 控制器之后 视图之前返回void
- atfercompletion 视图处理器之后响应之前
拦截器的使用步骤
- 写一个拦截器,实现HandlerInterceptor
- 覆盖对应的方法 一般覆盖proHandle 完成控制逻辑
- 在Spring配置文件对拦截器进行配置
Spring MVC异常处理的三种方式
- 简单异常处理器—simpMappingExceptionResolver 处理所有Controller异常
- 自定义异常处理器—实现HandlerExceptionResolver接口 处理所有Controller异常
- @ExceptionHandler注解实现异常梳理 处理某一个Controller异常
一、如果您发现本站侵害了相关版权,请附上本站侵权链接和您的版权证明一并发送至邮箱:yehes#qq.com(#替换为@)我们将会在五天内处理并断开该文章下载地址。
二、本站所有资源来自互联网整理收集,全部内容采用撰写共用版权协议,要求署名、非商业用途和相同方式共享,如转载请也遵循撰写共用协议。
三、根据署名-非商业性使用-相同方式共享 (by-nc-sa) 许可协议规定,只要他人在以原作品为基础创作的新作品上适用同一类型的许可协议,并且在新作品发布的显著位置,注明原作者的姓名、来源及其采用的知识共享协议,与该作品在本网站的原发地址建立链接,他人就可基于非商业目的对原作品重新编排、修改、节选或者本人的作品为基础进行创作和发布。
四、基于原作品创作的所有新作品都要适用同一类型的许可协议,因此适用该项协议, 对任何以他人原作为基础创作的作品自然同样都不得商业性用途。
五、根据二〇〇二年一月一日《计算机软件保护条例》规定:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可不经软件著作权人许可,无需向其支付报酬!
六、鉴此,也望大家按此说明转载和分享资源!本站提供的所有信息、教程、软件版权归原公司所有,仅供日常使用,不得用于任何商业用途,下载试用后请24小时内删除,因下载本站资源造成的损失,全部由使用者本人承担!