Spring框架知识点总结

2023-05-16

   学完框架有一段时间了,并且也使用Spring框架做了项目。回到头来复习,才发现自己只是学了点皮毛。啥也不是!!!突然,开始怀疑自己了,不过没事。我这不是回头复习了吗?说真的,当你刚刚开始学完并使用过后,再回去看一看收获真的很大。对我个人而言,收获还是挺多的,下面是我对Spring框架总结做的一些笔记,希望对你有帮助。

1、Spring是什么?

   Spring是一个轻量级的IOC和AOP容器框架。是为了Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。常见的配置方式有三种:基于XML的配置、基于注解的配置、基于java的配置。
优点:
    1、spring属于低侵入式设计,代码的污染极低。
    2、spring的DI机制将对象之间的依赖关系交由框架处理,减低组件的耦合性。
    3、spring提供了AOP技术,支持将一些通用任务,如安全、事务、日志、权限等进行集中式管理,从而提供更好的复用。
    4、spring对于主流的应用框架提供了集成支持。
缺点:
    1、使用大量的反射机制,反射机制非常占内存
    2、spring jsp代码过多,过于灵活缺乏一个公用的控制器
    3、spring明明是一个很轻量级的框架,却给人感觉大而全

2、Spring的三大核心

1、IOC(控制反转)
实现将组件间的关系从程序内部提到外部容器(spring容器)来管理。
2、DI(依赖注入)
   组件之间的依赖关系由容器在应用系统运行期来决定,也就是由容器动态地将某种依赖关系的目标对象实例注入到应用系统中的各个关联的组件之中。 (例如:@Repository 持久层 (dao层)、@Service 服务层 (service层)、@Controller 控制层、@component (把普通pojo实例化到spring容器中)、@Autowired(IOC自动装配,默认按照类型)、@Resource(IOC自动装配,默认按照名称,再按类型))
3、AOP(面向切面编程)
   利用一种称为“横切”的技术,部解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为“Aspect”,即切面。所谓“切面”,简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,减低模块之间的耦合度,并有利于未来的可操作性和可维护性。使用“横切”技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事物。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。
   OOP面向对象,允许开发者定义纵向的关系,但并使用于定义横向的关系,导致了大量代码的重复,而不利于各个模块的重用。

3、注入方式

1、构造器依赖注入
2、Setter方法注入
3、根据注解注入

4、Bean实例化的方式

1、使用类的无参构造创建

   <bean id="user" class="com.wm103.ioc.User"></bean>

2、使用静态工厂创建
    如果一个Bean不能通过new直接实例化,而是通过工厂类的某个静态方法创建的,需要把的class属性配置为工厂类。

     <bean id="user" class="com.gx.ioc.UserFactory" factory-method="createlnstance"></bean>

3、使用实例工厂创建
    如果一个Bean不能通过new直接实例化,而是通过工厂类的某个实例方法创建的,需要先配置工厂的标签,然后在创建的对象的bean标签的factory-bean属性配置为工厂类对象,factory-method属性配置为产生实例的方法。

     <bean id="user" class="com.gx.ioc.User"></bean>
     <bean id="user" class="com.gx.ioc.UserFactory" factory-method="createlnstance"></bean>

5、Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理

1、JDK动态代理只提供接口的代理,不支持类的代理。核心InvocationHandler接口和Proxy类,InvocationHandler通过invoke()方法反射来调用目标类 中的代码,动态地将横切逻辑和业务编织在一起;接着,Proxy利用InvocationHandler动态创建一个符合某一接口的实例,生成目标类的代理对象。
2、如果代理类没有实现InvocationHandler接口,那么Spring AOP会选择使用CGLIB来动态代理目标类。CGLIB(Code Generation Library),是一个代码生成的类库,可以在运行时动态的生成指定类的一个子类对象,并覆盖其中特定方法并添加增强代码,从而实现AOP。CGLIB是通过继承的方式做的动态代理,因此如果某个类被标记为final,那么它是无法使用CGLIB做动态代理的。
3、静态代理与动态代理区别在于生成AOP代理对象的时机不同,相对来说AspectJ的静态代理方式具有更好的性能,但是AspectJ需要特定的编译器进行处理,而Spring AOP则无需要特定的编译器处理。

6、Spring支持的几种bean的作用域

1、singleton:默认每一个容器中只有一个bean的实例,单列的模式有BeanFactory自身来维护。
2、prototype:为每一个bean请求提供一个实例。
3、request:为每一个网络请求创建一个实例,在请求完成以后,bean会实效并被垃圾回收器回收。
4、session:与request范围类似,确保每一个session中有一个bean的实例,在session过期后,bean会随之失效。
5、global-session:全局作用域,global-session和Portlet应用相关。当你在应用部署在Portlet容器中工作是,它包含很多portlet。如果你想要声明让所有的portlet公用全局的存储变量的话,那么这全局变量需要存储在global-sess中。全局作用域与Servlet中的session作用域效果相同。

7、Spring框架中都用到了那些设计模式

1、工厂模式:BeanFactory就是简单的工厂模式的体现,用来创建对象的实例。
2、单列模式:Bean默认为单列模式。
3、代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术。
4、模板方法:用来解决代码重复的问题。比如。RestTemplate,JmsTemplate,JpaTemplate
5、观察这模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变是,所有依赖于它的对象都会得到通知被制动更新,如Spring中listener的实现----ApplicationListener。

8、Spring事务的种类以及实现原理

1、Spring事务的种类:
1)、编程式事务管理使用TransactionTemplate.
2)、声明式事务管理建立在AOP之上的。其本质是通过AOP功能,对方法前后进行拦截,将事务处理的功能编织到拦截的方法中,也就是在目标方法开始之前加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。
2、实现原理
    声明式事务最大的优点就是不需要在业务逻辑代码中掺杂事务管理的代码,只需要在配置文件中做相关的事务规则声明或通过@Transactional注解的方式,便可以将事务规则应用到业务逻辑中。
    声明式事务管理要优于编程式事务管理,这正是spring倡导的非侵入式的开发方式,使业务代码不受污染,只要加上注解就可以获取到完全的事务支持。唯一不足的地方是最细粒度只能作用到方法级别,无法做到编程式事务那样作用到代码块级别。

9、Spring AOP里面的几个名词

1、切面(Aspect):被抽取的公共模块,可能会横切多个对象。在Spring AOP中,切面可以使用通用类(基于模式的风格)或者在普通类中以@AspectJ注解实现。
2、连接点(Join point):指方法,在Spring AOP中,一个连接点总是代表一个方法的执行。
3、通知(Advice):在切面的某个特定的连接(Join point)上执行的动作。通知有各种类型,其中包括"around"、"before"和"after"等通知。许多AOP框架,包括Spring,都是以拦截器做通知模型,并维护一个以连接点为中心的拦截器链。
4、切入点(Pointcut):切入点是指我们要对那些Join point进行拦截的定义。通过切入点表达式,指定拦截的方法,比如指定拦截add*、search*.
5、引入(Introduction):(也称为内部类型声明(inter-type declaration))。声明额外的方法或者某个类型的字段。Spring允许引入新接口(以及一个对应的实现)到任何被代理的对象。例如,你可以使用一个引入来使bean实现IsModified接口,以便简化缓存机制。
6、目标对象(Target Object):被一个或者多个切面(aspect)所通知(advise)的对象。也有人把它叫做被通知(adviced)对象。既然Spring AOP是通过运行时代理实现的,这个对象永远是一个被代理(proxied)对象。
7、织入(weaving):指把增强应用到目标对象来创建新的代理对象的过程。Spring是在运行时完成织入。切入点(pointcut)和连接点(join point)匹配的概念是AOP的关键,这使得AOP不同于其他仅仅提供拦截功能的旧技术。切入点使得定位通知(advice)可独立于OO层次,例如,一个提供声明时事务管理的around通知可以被应用到一组横跨多个对象中的方法上(例如服务层的所有业务操作)。

10、Spring的自动装配

   在spring中,对象无需自己查找或创建与其关联的其他对象,由容器负责把需要相互协作的对象引用赋予各个对象,使用autowire来配置自动装卸模式。
在Spring框架xml配置中共有5种自动装配
1、no:默认的方式是不进行自动装配的,通过手工设置ref属性来进行装配bean。
2、byName:通过bean的名称进行自动装配,如果一个bean的property与另一个的name相同,就进行自动装配。
3、byType:通过参数的数据类型进行自动装配。
4、constructor:利用构造器函数进行装配,并且构造函数的参数通过byType进行装配。
5、autodetect:自动探测,如果有构造方法,通过construct的方式自动装配,否则使用byType的方式自动配置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring框架知识点总结 的相关文章

随机推荐