Spring 回顾<一>

spring

核心: Ioc 控制反转

提供了一下7个功能:

1.核心容器
2.spring context
3.spring aop
4.spring dao
5.spring orm
6.spring web
7.spring mvc


1.其实我认为spring的注入就是将程序属性的set方法交给spring容器调用来注入值,而改变传统的开发者写程序调用set方法
,并且不需要改变程序而只有通过更改配置就可以改变输出结果

2.Ioc 可以解决代码重用性,以及需求的变动性
  Ioc 就是通过接口编程,将控制关系交给容器
3.DI 依赖注入让组件依赖于抽象,其实就是将依赖关系对象交给di
   三种方式来实现(接口注入,set注入,构造方法注入)
  接口注入:定义一个接口,各种数据库的定义将通过接口进行,任何想要使用改功能的类都必须
            实现这个接口。
 
  set 注入:在接受注入的类中定义个set 方法,并在参数中定义需要注入的元素
  构造注入:在接受注入的类中定义一个构造方法,并在参数中定义需要注入的元素

  在配置时,如果用构造方法注入的话xml 文件应该用<constructor-arg> 标签
  如果在开发时想让一些属性变成只读或私有的话可以选择构造方法,因为set方法不能
  保证相关的数据成员货资源在执行时不会被更改设定

====================spring核心容器===============================================================


 什么是侵入式框架:在开发程序的同时要继承框架提供的实体类货的实现框架提供的接口,如struts1
                   为了实现一种无侵入式框架spring采用了反射机制(org.springframework.beans,org.springframework.context)
                   这两个包中比较重要的类:BeanFactory,AppcicationContext
                   

bean : 是描述java的软件组件模型,通过bean可以无限扩展java程序的功能

一个bean 对应一个id,如果有超过一个id那么另外的那些id用分号隔开并且认为是bean的别名。
在spring中,bean可以被定义为两种部署模式中的一种(singleton,prototype),spring默认
为单例模式

bean 的depends-on 属性用于在初始化bean之前强制执行多个bean

spring 配置文件可以用<null/> 或 <value>null</value>处理空值

bean 的生命周期 : bean的定义-->bean初始化-->bean 的使用-->bean的销毁
bean的初始化可以采用 bean 的init-method 属性来指定一个方法 或者让类去实现spring 的 initalizingBean接口
bean的使用:beanwrapper 接口和beanFactory 和ApplicationContext


例如 beanwrapper
Helloworld helloworld = new HelloWorld();
BeanWrapper bw = new BeanWrapperImpl(helloworld);
bw.setPropertyValues("msg","HelloWorld");
System.out.println(bw.getPropertyValue("msg"));


使用BeanFactory
InputStream is = new FileInputStream("config.xml");
XmlBeanFactory factory = new XmlBeanFactory(is);
HelloWorld helloworld = (HelloWorld)factory.getBean("HelloWorld");
System.out.println(helloWorld.getMsg());

使用ApplicationContext
ApplicationContext actx = new FileSystemXmlApplicationContext("config.xml");
HelloWorld helloworld = (HelloWorld)actx.getBean("HelloWorld");
System.out.println(HelloWorld.getMsg());

bean 的销毁
可以在配置文件中通过指定destroy-method 属性来完成,或者用类去实现spring 的
 DisposableBean 接口



用ref 属性知道依赖的3种模式(lacal,bean,parent)
local:如果一个bean与被参考的bean 在同一个xml 文件中而且被参考引用的bean 是用
id 来命名的,那么就可以使用ref的local属性。这样会让xml 解析器更早地在xml文档解析
时验证bean 的id.

bean :和local的主要区别就是它可以不在同一个xml文件并且也可以与被参考引用的bean 的name
属性相同。

parent : 允许引用当前的BeanFactory 或ApplicationContext 的父BeanFactory 或ApplicationContext
中的bean.parent属性的值可以与被参考引用的bean的id属性相同,也可以与被参考引用bean的
name 属性相同。




Bean自动装配的5种模式
  byName,byType,constructor,autodetect,no 通过bean的autowire 属性指定
  byName: 通过属性名称来赋值
  byType: 如果XML中正好有一个同属性类型一样的bean 就自动装配这个属性
  constructor: 通过构造函数赋值
  autodetect: 通过对bean 检查类的内部来选择constructor 或byType 如果先找到
  constructor就用constructor 否则用byType
  no : 模式指的就是不使用自动装配。

Bean依赖检查的4中模式
   bean 属性的 dependency-check 的simple,object,all,none
   simple 模式指的是对基本类型,字符串,集合进行依赖检查
   object 对依赖的对象进行依赖检查
   all 模式指的是对全部属性进行依赖检查
   none 模式指的是不进行依赖检查


集合的注入
 List,Set,Map,Properties
 <list><value></list> ,<set><value><set>标签
 <map><entry><value></entry></map>
 <property><props><prop key=""></prop></props></property>
 


ApplicationContext   国际化支持
 MessageResource接口

<bean id="messageSource" class="org.springframework.context.support.ResourceBoundleMessage-Source">
   <property name="basename">
      <value>messages</value>
   </property>
</bean>
如上面value=messages 对于的资源文件是 messages.properties 或message.calss
ApplicationContext 对资源文件的存取在设定资源文件的路径有3种方式
 1. 通过虚拟路径在存取。如在classpath 下
  ApplicationContext actx = new FileSystemXmlApplicationContext("config.xml");
  Resource resource = actx.getResource("classpath:messages.properties");
  注:classpath: 是spring 约定的URL虚拟路径。
 
 2.通过实际路径来存取。指定标准的URL
      Resource resource = actx.getResource("file:d/eclipse/workspace/myApp/web-inf/src/messages.properties");
 
 3.通过相对路径存取
      Resource resource = actx.getResource("web-inf/src/messages.properties");
     
ApplicationContext 时间传递
ApplicationEvent 类和ApplicationListener接口 提供的。通过ApplicationContext 的
publishEvent() 方法来通知ApplicationListener
注:id 必须是 "messageSource"
    如果出现中文乱码则用native2ascii messages.properties messages 进行中文转码




=================================Spring 的Aop====================================

  aop 是为了解决将业务系统有关的代码和业务系统关系不大的代码进行分开(如:日志,权限,异常处理,事物处理)
   从而达到易于维护和重用的目的。  



   aop 的3个关键点 pointcut , advice, advisor   
       join point : 是程序中运行的某个阶段点,比如方法调用、异常抛出等
       pointcut(切入点) : 是join point 的集合
       advice(通知) : 是某个连接点所采用的处理逻辑,也是向连接点注入的代码
       advisor: 是pointcut和advice 的配置器,它包括pointcut 和 advice ,是将
                advice 注入程序中pointcut 位置的代码
      


   spring 主要提供3中切入点:
            静态,动态,自定义 切入点
      RegexpMethodPointcut 可以实现静态切入点
     

     spring提供了5种类型的通知
       Interception Around,Before,After Returning,Throw,Introduction


     正则表达式匹配
            "." 可以用来匹配任何一个字符
            "[]" 指定的字符才能匹配
            "*" 匹配的此时,可以任意次数
            "?" 匹配0或1次
            "\" 正则表达式的连接符


 Aop 中的两种代理方式
      java 动态代理(spring 默认使用)
      cglib 代理(使用cglib的好处就是不再像java 动态代理那样去实现特定的接口)



spring 中的自动代理(DefaultAdvisorAutoProxyCreator)


=============Spring 的事物处理=========================================
spring 提供2种事物(声明式和编程式)
       事物共性acid(原子性,一致性,隔离性,持久性)
   事物处理的3种方式:1.关系形数据库的事物处理 2.传统JDBC事物处理 3.分布式事物处理(对多个数据库操作)
 
  关系形数据库的事物处理:
      事物之间隔离程度采用隔离级别:read uncommitted,read committed,repeatable read
      repeatable read:只能看到事物开始时刻的数据库的一个快照,事物开始后的记录不管是否
                      被提交都无法看到。
       

  传统JDBC事物处理:jdbc,ado 都提供了基于数据连接进行事物处理的功能。
 

  分布式事物:就是事物分布在多个资源上、由多个组件共享的事物。
            分布式事物特征:
                  1.组件要在同一原子操作中与多个资源通信
                  2.多个组件要在同一原子操作中操作
                  3.分布式事物需要多个不同的事物管理器的合作

spring 中的事物默认使用java 动态代理机制,因为java 动态代理机制要求其代理的对象必须实现一个
接口,并且在该接口中定义标准进行代理的方法,对于没有实现任何接口的javabean,spring
   是通过CGLIB来实现的




================7.spring 的持久层封装 ==========================================
通过XML 实现DataSource 注入3种方式

 1.使用spring自带的DriverManagerDataSource
 2.使用DBCP 连接池
 3.使用Tomcat 提供的JNDI

1.使用JdbcTemplate 访问数据库
2.使用ORM工具访问数据


=========================spring mvc==============================================

Controller
MultiActionController
     多动作控制器2种:
           1.继承MultiActionController
           2.配置文档中定义一个代理Bean

分发器:DispatcherServlet
拦截器:HandlerInterceptor
数据绑定(分离业务逻辑和数据验证)的2种方法
   1.自定义标签
   2.使用Validator

本地化支持
   实现本地化支持的3中方式:
      1.在头信息中包含客户端的本地化信息
      2.根据cookie获取本地化信息
      3.从会话中获取本地化信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值