Spring学习总结

因为是学习总结 所以参考了很多资料做的博客 如果有侵权 请联系我。写的不对的欢迎指吐舌头


      Spring:  -开源的轻量级框架 

  Spring核心: 

     IOC(控制反转控,制反转还有一个名字叫做DI(Dependency Injection),中文意思叫依赖注入。)-------Spring IOC是Spring中最核心的部分,是以Bean的方式来组织和管理Java应用中的各种组件,提供配置层次的解耦。所有的Bean都由Spring BeanFactory根据配置文件生成管理。ApplicationContext是BeanFactory的加强版,提供了更多的功能,如自动创建,国际化等。
     AOP:   Spring AOP也是Spring的核心技术,AOP擅长处理一些具有横切性质的系统服务,如事务管理,安全检查,缓存等。Spring并没有提供完整的AOP实现,Spring侧重于AOP实现与Spring IOC容器之间的整合,因此Spring AOP通常和Spring IOC一起使用。

为什么使用Spring :

1:降低组件之间的耦合度,实现各层之间的解耦 

2:可以使用容器提供的众多服务。如: 

--事务管理服务 

--JMS

--Spring core核心服务

--持久化服务

--其他

3:提供了单例模式支持。开发人员不需要自己编写实现代码

4:提供了AOP技术。实现如:权限拦截,运行监控等功能

5:提供了众多的辅助类。如JDBC Template,HIbernate Template

6:对主流的应用框架提供了集成支持。集成Struts,JPA,Hibernate。

7:缺点:目前不支持集群


spring模块:
spring核心容器(Core): BeanFactory提供了组件生命周期的管理,组件的创建,装配,销毁等功能
SpringContext:ApplicationContext,扩展核心容器,提供事件处理、国际化等功能。它提供了一些企业级服务的功能,提供了JNDI,EJB,RMI的支持。
springAOP: 提供切面支持
SpringDAO: 提供事务支持,JDBC,DAO支持
SpringORM: 对流行的O/R Mapping封装或支持
springWeb支持struts集成
springMVC自带的mvc框架

依赖注入 IOC:开发思想--- 高内聚低耦合( 一个类中紧密相连,不同类最好不要关联紧密
IOC底层原理:
    1.xml配置文件
    2.dom4j解析xml
    3.工厂设计模式
    4.反射
一.setter注入
通过类的set方法,将xml中的参数注入到对象中,
适用于初始化,因为每次加载,都会调用ApplicationContext方法
步骤 :
1.在xml中配置方法
 
注意: set  list 都是value注入,map是entry注入
   scope="prototype"  作用范围 将单一bean的定义限制而在任意数量的对象实例
2.class对应类中,给参数设置set方法,
3.使用ApplicationContext得到的对象调用方法就可以了
 

二.构造注入

与set注入一样,xml通过构造方法给赋值对象,
set注入和构造注入的区别?
a) setter注入更加的直观,自然,方便一些
b)在参数过多的情况下,构造注入就更加的繁琐,臃肿,根据代码规范,构造参数内最好不要写逻辑代码,参数也不要超过三个
c)构造注入的好处就是: 可以在某些情况下决定参数的注入顺序
主流方式 :setter注入为主,构造注入为辅,没有依赖关系的注入就用构造注入
   而有其它依赖关系的注入,就考虑 setter注入
构造注入的步骤 :
1. 在类中添加构造方法, 注意在 4.2版本后,多个构造方法是不会出现错误的,也可以用index下标去决定使用哪一个构造方法
2. 配置 xml文件

三:基于注解的主动装配

( 2 ) @Controller:web层
( 3 ) @Service:service层
( 4 ) @Repository:Dao层
@Autowired 标注成员变量时,不需要有 set方法 
@Resource 默认按名称类匹配的,它是 JDK 提供的
注解装配在默认情况下是不开启的,为了使用注解装配,我们必须在 Spring 配置文件中配置  <context:annotation-config/> 元素。

 p命名空间和c命名空间

p是依赖于set注入的,c呢是依赖构造注入的

p约束:
配置 :
<bean id="user" class="xxx.Studentr" p:age="23" p:username="张三"  p:email=" zhangsan@pbdevj.com " />
<bean id="userBiz" class="biz.impl.UserBiz" p:dao-ref="userDao" />

c约束:
<bean id="magician" class="xxx.Student"
        c:age="11"
        c:username="李四"
        c:email=" magicWand@163.com " />



AOP:

什么是aop?

AOP(Aspect Oriented Programming) 面向切面编程
通过预编译方式和运行动态代理实现程序功能的统一维护
作用:能够无入侵性完成代码

切面:指在执行某些方法时,进入断点(切面)模式,在之前,之后或出现异常等做一些处理,
为什么会出现aop?
Aop和ioc都是解决代码的耦合性,可以增强代码的扩展性和可维护性
AOP实现可分为两类:

  1. 预编译方式 :在编译的时候已经做好了aop处理

  2. 运行期方式 :在运行时做aop处理

那么什么是Aspectj ?

Aspectj 是一个面向切面的框架,Aspectj定义了AOP语法,Spring AOP底层也是使用了Aspectj的框架来实现操作的。

Spring AOP 和Aspectj的关系?

二者都是AOP技术
二者处理方式不一样:
Aspectj:在编译java代码时,(依赖ajc编译器)编译时增强,编译时增强。( 属于静态织入) ;
Spring AOP:在运行时动态修改类(动态代理),生成新类,称为运行时增强(动态织入)
使用静态织入的方式性能要比动态高,但是动态织入更加方便
Spring AOP原理: 采用动态代理模式。
  Spring AOP采用动态代理的过程:
(1) 将切面使用动态代理的方式动态织入到目标对象(被代理类),形成一个代理对象;
(2) 目标对象如果没有实现代理接口,那么Spring会采用CGLib来生成代理对象,该代理对象是目标对象的子类;(3) 目标对象如果是final类,并且也没实现代理接口,就不能运用AOP。

AOP操作术语

Joinpoint(连接点): 类里面可以被增强的方法,这些方法称为连接点
Pointcut(切入点):所谓切入点是指我们要对哪些Joinpoint进行拦截的定义.
Advice(通知/增强):所谓通知是指拦截到Joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)
Aspect(切面): 是切入点和通知(引介)的结合
Introduction(引介):引介是一种特殊的通知在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法或Field.
Target(目标对象):代理的目标对象(要增强的类)
Weaving(织入):是把增强应用到目标的过程.
把advice 应用到 target的过程
Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类

Spring容器中的Bean

对于开发者来说,开发者使用Spring框架主要是做两件事:①开发Bean;②配置Bean。对于Spring框架来说,它要做的就是根据配置文件来创建Bean实例,并调用Bean实例的方法完成"依赖注入"——这就是所谓IoC的本质。

Spring的生命周期 

bean的实例化: 
1:当作用域范围为singleton时,在初始化Spring容易的时候实例化bean实例。 
---1:如果lazy-init的值为true,则为延迟bean的实例化,即在Spring容器启动时不实例化bean的对象 
2:当作用域范围为prototype时,在调用Spring的getBean的方法时实例化bean对象
注入依赖对象可以采用手工装配或者自动装配,在实际应用中建议采用手工装配。因为自动装配会产生未知情况,开发人员无法预见最终的装配结果。

bean的属性
id                       命名bean,id属性值,不能包含特殊符号
class                  创建对象所在类的全路径
name                功能与id一样,但是name可以包含特殊符号
scope                指定bean的作用域
        1.singleton:默认单例模式
        2.prototype:多例
        3.request:创建对象放入request作用域
        4.session:同上
        5. global session :同上


事物拦截器的实现原理。

spring中的事务管理是通过AOP代理来实现的,对被代理对象的每个方法进行拦截,
在方法执行前启动事务,方法执行完后根据是否有异常和异常的种类进行提交或回滚。


事务的四大特性:ACID

    原子性(Atomicity)事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用 
    一致性(Consistency) 一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏
     隔离性(Isolation) 可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏 
    持久性(Durability) 一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持久化存储器中





评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值