对于Linux:Spring容器的介绍总结

首页 » 网络资源 » Linux » 正文

[v_notice]本文转载自http://blog.shangsu.me[/v_notice]

对于Linux:Spring容器的介绍总结

Sping有什么组成

  1. IOC 控制反转(核心)
  2. DAO 数据访问对象(JDBC封装)
  3. AOP 面向切面编程
  4. 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的配置

如何实现组件扫描

  1. 建立项目导入jar包,拷贝Spring配置文件到src下
  2. 定义一个类
  3. 开启组件扫描
    <context:component-scan bean-package=”包名”/>
  4. 在自定义的类打上对应的标注
  5. 创建Spring容器,从容其中获取组件

标注

  1. 持久层 @Respository
  2. 服务层 @Server
  3. 控制层 @Controller
  4. 通用层 @Component
  5. 和作用域相关的 @scope(singleton/prototype)
  6. 和初始化相关的 @postConstruct
  7. 和销毁相关的 @preDestror
  8. 和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步骤

  1. 建项目导包
  2. 在WEB.XML中配置DispatcherServlet并通过初始化参数ContextConfigLocation指定Spring配置文件的位置
  3. 在Spring配置文件中配置HandlerMapping
  4. 写一个java类实现Controller接口,在接口中返回对应的ModeAndView并在Spring容器中创建控制器组件
  5. 在Spring配置文件中配置VIewResoler的实现类,InternalResourceViewResoler指定前缀和后缀

基于标注的MVC步骤

  1. 建项目导包
  2. 在WEB.XML中配置DispatcherServlet并通过初始化参数ContextConfigLocation指定Spring配置文件的位置
    3.开启标注形式的MVC Spring配置文件加上 <context:component-scan> <MVC:annotation-driven>
  3. 写一个java类,类上打上@Controller 方法上打上@requestMapping
  4. 在Spring配置文件中配置VIewResoler的实现类,InternalResourceViewResoler指定前缀和后缀

Spring MVC控制如何将数据传送到页面

  1. 使用域对象进行传输
    request(HttpServletRequest)

session(Httpsession)
application(ServletContext)

  1. 使用ModeAndView进行传输
    mav.getModel() 这样返回一个map 调用put设置值

mav.getModelMap() 这样返回一个ModelMap这个类是String ui包中的类型 对Map进行了封装,提供了put和addAttribute

  1. 使用Model进行传输
    只有addAtribute方法没有put方法
  2. 只用ModelMap进行数据传输
    有put和addAttribute方法
  3. 让容器自动传输
    容器会自动传输复杂对象放入request

Spring MVC控制器中如何获取session对象

  1. request对象获取
  2. 直接定义Httpsession参数

Spring MVC控制器中如何完成重定向

  1. 当控制器的方法返回String时在请求路径前加redirect: 即可
  2. 当控制器的方法返回ModelAndView时使用RedirectView完成重定向

中文参数乱码问题

使用Spring编码过滤器

什么是拦截器

可以理解过滤器的封装

Spring的HandleMapping处理器支持拦截器应用,当需要为某些请求提供功能时,例如用户认证,登录检查等.

拦截器对应一个接口 HandlerInterceptor
拦截器对应三个方法

  1. preHandle 在HandlerMapping之后控制器之前调用这个方法,这个方法返回Boolean 当返回true是代表可以进行后续逻辑的调用,如果返回false代表拦截不继续控制器的访问
  2. postHandle 控制器之后 视图之前返回void
  3. atfercompletion 视图处理器之后响应之前

拦截器的使用步骤

  1. 写一个拦截器,实现HandlerInterceptor
  2. 覆盖对应的方法 一般覆盖proHandle 完成控制逻辑
  3. 在Spring配置文件对拦截器进行配置

Spring MVC异常处理的三种方式

  1. 简单异常处理器—simpMappingExceptionResolver 处理所有Controller异常
  2. 自定义异常处理器—实现HandlerExceptionResolver接口 处理所有Controller异常
  3. @ExceptionHandler注解实现异常梳理 处理某一个Controller异常

未经允许不得转载:作者:admin, 转载或复制请以 超链接形式 并注明出处 夜河资源网
原文地址:《对于Linux:Spring容器的介绍总结》 发布于2019-11-22

分享到:
赞(0) 打赏

评论 抢沙发

2 + 1 =


撰写不易~如果您觉得文章对您有帮助的话可以打赏我哦~谢谢亲亲~

支付宝扫一扫打赏

微信扫一扫打赏

外服网游加速器破解版
包含腾讯网游加速器、海豚网游加速器等八款知名加速器,可加速外服游戏,永久包售后包更新,不定时添加新款破解版加速器!
切换注册

登录

忘记密码 ?

切换登录

注册