【Spring篇】Spring的三大特性

2 篇文章 0 订阅
订阅专栏

Spring

1、概念:

是JAVAEE应用轻量级开源框架。

2、优缺点:
(1)优点:

  • 方便解耦,简化开发。

Spring提供IOC容器,将对象间的依赖关系交由Spring进行控制。

  • AOP编程的支持。

通过Spring的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。

  • 声明式事务的支持。

可以将我们从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活的进行事务的管理,提高开发效率和质 量。

  • 方便程序的测试。

集成Junit,方便测试。

  • 方便集成各种优秀框架。

可集成SpringMVC、mybatis、Struts2、hibernate等框架。

  • 减低JavaEE API的使用难度。

Spring 对 JavaEE API(如 JDBC、JavaMail、远程调用等)进行了薄薄的封装层,使这些 API 的使用难度大为降低。

(2)缺点:

  • Spring是一个轻量级的框架,却给人一种大而全的感觉。
  • Spring依赖反射,反射影响性能。
  • spring不支持分布式,不如springboot。

3、使用步骤
(1)导入maven坐标:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.0.2.RELEASE</version>
</dependency>

(2)创建Spring主配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
			xsi:schemaLocation="http://www.springframework.org/schema/beans
				http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>

(3)加载配置文件,并获取对象

ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
AccountService as  = (AccountService)ac.getBean("accountService");
AccountDao adao = ac.getBean("accountDao",AccountDao.class);

4、bean的生命周期:
(1)Bean的定义。
(2)Bean的初始化 – init。
(3)Bean的使用。
(4)Bean的销毁 – destroy。

5、体系结构
在这里插入图片描述

Spring的三大特性

1、三大特征:AOP、IOC、DI。

IOC :控制反转。
DI :依赖注入。
AOP :面向切面编程。

2、IOC:控制反转。
(1)概念:控制反转。将创建对象的权利交给Spring来进行处理。

(2)作用:解耦(减低程序间的耦合性)。

(3)优缺点:

A、优点:
解耦,降低程序间的依赖关系;
B、缺点:
使用反射生成对象,损耗效率。

(4)实现步骤:(Spring注解开发IOC)

创建Spring主配置文件,并添加约束;
在主配置文件中,使用<context:component-scan>标签,标明使用IOC的类所在的包;
使用注解标注IOC的类;
使用注解依赖注入的数据;
获取bean对象,并使用。

(5)涉及的注解:

@Component //用于标注一般类
@Controller //用于标注表现层的类
@Service //用于标注业务层的类
@Repository //用于标注持久层的类
@Autowired //自动按照类型注入
@Qualifier //在按照类中注入的基础之上, 再按照名称注入
@Resource //直接按照bean的id注入

  • 前四个注解:

(1)作用:

让Spring自动创建当前类的对象,并把对象存入spring容器中。

(2)属性:

value:
用于指定bean的id,也就是对象放入容器后,对象的名字。
当我们不写时,默认值是当前类的类名(首字母改小写)。

  • @Autowired:

①、作用:

①、自动按照类型注入。只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配,就可以注入成功。
②、如果ioc容器中没有任何bean的类型和要注入的变量类型匹配,则报错。
③、如果Ioc容器中有多个类型匹配时, 对比变量名, 自动注入和当前变量名一样的ioc容器中的对象,如果没有则报错。

②、位置:

可以是变量上,也可以是方法上。

  • @Qualifier:

①、作用:

①、在按照类中注入的基础之上, 再按照名称注入。
②、它在给类成员注入时不能单独使用。但是在给方法参数注入时可以。

②、属性:

value: 用于指定注入bean的id名称。

  • @Resource:

①、作用:

直接按照bean的id注入。它可以独立使用, 相当于Autowired和Qualifier的结合。

②、属性:

name:用于指定bean的id。

③、注意:

JDK8可以使用,JDK9不能使用。

(3)、@Autowired和@Resource区别:

(1)@Autowired:自动按照类型type注入。
(2)@Resource:自动按照bean的id注入。可以独立使用,相当于Autowired和Qualifier的结合。

(4)、ApplicationContext的三个实现类:

①、顶层接口是BeanFactory。
②、三个实现类:
A、ClassPathXmlApplicationContext。
(可以加载类路径下的配置文件。要求配置文件必须是在类路径下,不在类路径下加载不了)
B、FileSystemXmlApplicationContext。
(可以加载磁盘任意路径下的配置文件,但是必须要有访问权限)
C、AnnotationConfigApplicationContext。(用于读取注解创建容器)

(5)、BeanFactory和ApplicationContext的区别:

BeanFactory:
①、 在构建核心容器时,采用延迟加载的方式创建对象。(即:什么时候根据ID获取对象了,什么时候才真正的创建对象)。
②、是Spring容器中的顶层接口。

ApplicationContext:
①、 在构建核心容器时,采用立即加载的方式创建对象。(即:只要一读取完配置文件马上就创建配置文件中配置的对象)。
②、是BeanFactory的子接口。

(6)、IOC中的bean标签:

作用:
①、用于配置对象让Spring来创建。
②、默认情况下,调用的是类中的无参构造函数。没有无参构造函数则不能创建成功。

属性:
①、id:给对象在容器中提供一个唯一标识。用于获取对象。
②、Class:指定类的全限定类名。用于反射创建对象。默认情况下调用无参构造函数。
③、scope:指定对象的作用范围。
A、singleton: 单例的(默认值)。
B、prototype:多例的。
C、request:作用于web应用的请求范围。
D、session:作用于web应用的会话范围。
E、global session:作用于集群环境的会话范围,当不是集群时,它就是session。
④、init-method:指定类中的初始化方法名称。
⑤、destroy-method:指定类中销毁方法名称。

作用范围和生命周期:
①、单例对象:scope=“singleton”
A、一个应用只有一个对象的实例。它的作用范围就是整个引用。
B、生命周期:
对象出生:当应用加载,创建容器时,对象就被创建了。
对象活着:只要容器在,对象一直活着。
对象死亡:当应用卸载,销毁容器时,对象就被销毁了。

②、多例对象:scope=“prototype”
A、每次访问对象时,都会重新创建对象实例。
B、生命周期:
对象出生:当使用对象时,创建新的对象实例。
对象活着:只要对象在使用中,就一直活着。
对象死亡:当对象长时间不用时,被 java 的垃圾回收器回收了。

3、AOP:面向切面编程。
(1)概念:
在这里插入图片描述

面向切面编程。简单描述就是:将程序重复的代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的基础上,对自己的已有方法进行增强。

(2)作用:

在程序运行期间,不修改源码对已有方法进行增强。

(3)优缺点:

减少重复代码;
提高开发效率;
维护方便。

(4)实现方式:

使用动态代理技术。

(5)两种动态代理的区别(以及使用场景):

两种动态代理分别是:
JDK实现动态代理(基于接口的动态代理)、
CGLIB实现动态代理(基于子类动态代理)。

动态代理的特点:字节码随用随加载。

动态代理的作用:不修改源码的基础上对方法增强。

A、JDK实现动态地理:
(1)基于接口的动态代理。
(2) 涉及的类:Proxy。
(3)提供者:JDK。
(4)如何创建代理对象:使用Proxy类中的newProxyInstance方法创建代理对象。
(5)创建代理对象的要求:被代理类最少实现一个接口,才能使用代理创建代理对象。
(6)newProxyInstance方法的参数:
①、ClassLoader:类加载器。用于加载代理对象字节码,和被代理对象使用相同的类加载器。(固定写法)(代理谁写谁的classLoader:例如代理的是producer在这里插入图片描述

②、Class[]:字节码数组。用于让代理对象和被代理对象有相同的方法。(固定写法)(例如,代理的是producer在这里插入图片描述
③、InvocationHandler:用于提供增强的代码。是让我们写如何代理。我们一般都是写一个该接口的实现类,通常情况下都是匿名内部类。(此接口的实现类都是谁用谁写)。
invoke方法具有拦截的功能。作用:执行被代理对象的任何接口方法都会经过此方法。
invoke方法参数的含义:
proxy-------> 代理对象的引用。
method----> 当前执行的方法。
args--------> 当前执行方法所需的参数。
return返回值—> 和被代理对象方法有相同的返回值。
在这里插入图片描述

B、CGLIB实现动态代理:
(1)基于子类的动态代理。
(2)涉及的类:Enhancer。
(3)提供者:第三方CGLIB库。
(4)如何创建代理对象:使用Enhancer类的create方法。
(5)创建代理对象的要求:被代理类不能是最终类。(因为最终类不能创建子类)。
(6)create方法的参数:
①、Class:字节码。用于指定被代理对象的字节码。(要想代理谁,就写谁的.getClass())。
在这里插入图片描述
②、Callback:用于提供增强的代码。
intercept方法的三个参数:和基于接口的动态代理中的invoke方法的参数是一样的。
第四个参数:methodProxy—>当前执行方法的代理对象。

(6)使用动态代理实现事务控制。

(7)AOP相关术语:

①、JoinPoint(连接点):指那些被拦截到的点。(在Spring中这些点指的是方法,因为Spring只支持方法类型的连接点)。
②、PointCut(切入点):指的是要对哪些JoinPoint进行拦截的定义。
③、Advice(通知/增强):指拦截到JoinPoint之后所要做的事情。
④、Target(目标对象):代理的目标对象。
⑤、Weaving(织入):指把增强应用到目标对象来创建新的代理对象的过程。
spring采用动态代理织入;
Aspect采用编译器织入和类装载期织入。
⑥、Aspect(切面):是切入点和通知的结合。

(8)通知:

前置通知、后置通知、异常通知、最终通知、环绕通知。
前置通知:在切入点方法执行之前执行。
后置通知:在切入点方法执行之后执行。它和异常通知永远只能执行一个。
异常通知:在切入点方法执行产生异常之后执行。它和后置通知永远只能执行一个。
最终通知:无论切入点方法是否正常执行,它都会在其后面执行。

(9)涉及的注解:(Spring基于注解的AOP配置)

@Aspect:表示当前类是一个切面类。
@Before(“ptl()”):前置通知。
@AfterReturning(“ptl()”):后置通知。
@AfterThrowing(“ptl()”):异常通知。
@After(“ptl()”):最终通知。
@Around(“ptl()”):环绕通知。

4、DI:依赖注入。

(1) 作用:减低程序间的耦合。

(2)注入方式:使用构造函数注入;使用set方法注入;使用注解。

(3)能注入的数据:基本类型和string,其他bean类型(在配置文件或者注解配置过的bean),复杂类型/集合类型。

(4)构造函数注入:
①、使用的标签constructor-arg。
②、标签出现的位置:bean标签的内部。
③、标签中的属性:
type:用于指定要注入的数据类型,该数据类型也是构造函数中某个或某些参数的类型。
index:用于指定要注入的数据给构造函数中,指定索引位置的参数赋值。索引位置从0开始。
name:用于指定给构造函数中指定名称的参数赋值。
value:用于提供基本类型和string类型的数据。
ref:用于指定其他的bean类型数据。(指的是在spring的ioc核心容器中出现过的bean对象)。
④、优势:在获取bean对象时,必须要注入数据,否则对象无法创建成功。
⑤、坏处:
改变了bean对象的实例化方式,使我们在创建对象时,即使用不到这些数据,也要提供。

(5)set方法注入:(更常用的方法)
①、涉及的标签:property
②、出现的位置:bean标签的内部
③、标签的属性:
name:用于指定注入时所调用的set方法名称。
value:用于提供基本类型和string类型的数据。
ref:用于指定其他的bean类型数据,它指的就是在spring的IOC核心容器中出现过的bean对象。
④、优势:创建对象时没有明确的限制,可以直接使用默认构造函数。
⑤、坏处:如果有某个成员必须有值,则获取对象是有可能set方法没有执行。

Spring特性
Reng17的博客
12-06 444
初识Spring特性解析,两种常用注入方式
Spring基础.pdf
03-28
Spring的设计目标是简化Java应用开发,通过依赖注入和面向切面编程等特性来促进解耦和编码的可测试性。 Spring框架的主要优势包括: 1. 轻量级:Spring的核心库非常小,基本版库约为2MB。这种轻量级设计使得Spring...
菜鸟学习7-15 Spring的依赖注入 XML文件配置以及注解配置
jishenwei的博客
07-17 560
2020-7-15 三、Spring的依赖注入 依赖注入: Dependency Injection IOC的作用: 降低程序间的耦合(依赖关系) 依赖关系的管理: 以后都交给了spring来维护 在当前类中需要用到其他类的对象,由spring为我们提供,我们只需要在配置文件中说明 依赖关系的维护: 就称之为依赖注入。 依赖注入: 能注入的数据:有三类 基本类型和String 其他bean类型(在配置文件中或者注释配置过的bean) 注入的方式:有三种 第一种:使用构造函数提供 第二种:使用set方法提供
什么是Spring?它能干什么!
最新发布
L1216347491的博客
08-26 1642
降低耦合,简化开发 Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理。AOP编程的支持 Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。声明式事务的支持 只需要通过配置就可以完成对事务的管理,而无需手动编程。方便程序的测试 Spring对Junit4支持,可以通过注解方便的测试Spring程序。
关于Spring三大特性
银狼KIng的博客
11-08 5935
一、控制反转 IOC控制反转,Spring反向控制应用程序所需要使用的外部资源,实现高内聚,低耦合。 传统模式中,资源的主控权在类中,类需要哪一项资源直接就自己new出来。但是在IOC模式下,类所需要的资源统一由Spring提供,主动变被动。 Spring框架控制的资源全部放置在Spring底层的容器中,该容器成为IOC容器 <beans> <!--bean标签定义spring中的资源,受此标签定义的资源将受到spring控制--> <bean></bean&g
Spring框架三大特性详解(依赖注入、控制反转、面向切面)
m0_73051910的博客
10-28 2154
Spring三大特性:控制反转、依赖注入、面向切面
全面解析Spring Security 过滤器链的机制和特性
08-18
Spring Security 过滤器链机制和特性详解 Spring Security 过滤器链是 Spring Security 框架中的一种核心机制...希望读者能够通过这文章,深入了解 Spring Security 过滤器链的机制和特性,并在实际应用中加以应用。
Spring4新特性(8)注解脚本任务MVC等其他特性改进
11-25
将重点探讨Spring4中的注解脚本任务、MVC以及其他特性改进,这些都是Java开发者应当掌握的关键知识点。 首先,注解脚本任务是Spring4的一个亮点,它提供了更加简便的方式来处理定时任务。Spring4引入了`@...
Spring的特点是什么
weixin_42579969的博客
02-16 1142
Spring是一个开源的应用程序框架,主要用于开发 Java 应用程序。Spring 的特点包括: 依赖注入(DI):Spring 支持依赖注入,使得组件之间的依赖关系可以通过配置文件来声明和解决,而不是在代码中直接依赖。这使得组件可以更加松散耦合,并且可以更加灵活地组合在一起。 面向切面编程(AOP):Spring 支持面向切面编程,可以用来实现功能的横切,比如日志记录、性能统计、安全检查等...
Spring的几个特点
03-11 1722
Spring作为实现J2EE的一个全方位应用程序框架,为我们开发企业级应用提供了一个健壮、高效的解决方案。所谓全方位,不得不说以下几个特点:       1 、非侵入式:对于写代码从来不考虑复用和移植的程序员来说,这一点根本就没有吸引力,那么请跳过。所谓非侵入式是指Spring框架的API不会在业务逻辑上出现,也就是说我们的业务逻辑应该是纯净的,不能出现与业务逻辑无关的代码。首先针对应用而言,
Spring有哪些特征?
跟着BOSS有肉吃
01-15 3602
1、轻量——从大小与开销两方面而言Spring都是轻量的 2、控制反转——Spring通过一种称作控制反转IOC的技术促进了低耦合。 3、面向切面——Spring提供了面向切面编程的支持。 4、容器——Spring包含并管理应用对象的配置的生命周期 5、框架——Spring可以将简单的组件配置、组合成为复杂的应用。 6、MVC——Spring的作用是整合,但不仅仅限于整合,Spring框...
java--spring框架
weixin_51468784的博客
03-13 606
Java之Spring框架的刨析 spring概述: Spring提供的软件半成品, Spring提供了软件中常见组件, 利用Spring框架可以快速开发软件. Spring两大核心功能: IoC/DI 控制反转/依赖注入,AOP 面向切面(儿)编程 Spring 特点 ①、方便解耦,简化开发 通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于
Spring的特点
鸟哥的博客
09-10 608
支持AOP,方便进行面向切面的编程 方便解耦,简化开发,通过Spring提供的IoC容器(控制反转),利用依赖关系注入的方式,实现对象之间的解耦。 支持声明式事务处理,只需要通过配置就可以完成对事物的管理,而无须手动编程 方便程序的测试. Spring提供了对Junit4的支持,可以通过注解方便的测试Spring程序。 方便集成各种优秀框架. Spring不排斥各种优秀的开源框架,其内部提供了对...
Spring特征
不玩CSDN了,写博客太多bug
06-16 750
◆轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并 且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。 ◆控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦 合。当应用了IoC,一个对象依赖的其
写文章

热门文章

  • 【Spring篇】Spring的三大特性 20343
  • 【SSH拉取代码】使用SSH克隆代码那些事 4937
  • 【gradle篇】gradle出错解决 1099
  • 【idea专题】idea开发工具 1046
  • 【JVM篇】判断对象是否可回收 1018

分类专栏

  • 反射 1篇
  • idea 2篇
  • Spring 2篇
  • RabbitMQ 4篇
  • SpringCloud 3篇
  • mybatis 2篇
  • 设计模式 1篇
  • java 2篇
  • 面试 2篇
  • JDBC
  • 笔记
  • 其他 1篇
  • 异常 1篇
  • 线程
  • 跳板机
  • git 1篇
  • gradle 1篇
  • redis 1篇

最新评论

  • 【Spring篇】Spring的三大特性

    平淡啊张: 可以的啊,很细。

  • 【volatile】volatile关键字的认识

    it噩梦: 总结的很好,加油

最新文章

  • 【mysql篇-进阶篇】锁
  • 【mysql篇-进阶篇】SQL优化
  • 【mysql篇-进阶篇】索引
2022年12篇
2021年18篇
2020年25篇
2019年1篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家玻璃钢雕塑如何仿汉白玉虹口区进口玻璃钢雕塑推荐汕尾玻璃钢卡通雕塑分类安宁玻璃钢雕塑精准推荐青岛玻璃钢雕塑摆件售价重庆玻璃钢雕塑摆件湘潭玻璃钢抽象雕塑北京公园玻璃钢花盆上海装饰商场美陈厂家直销江苏玻璃钢动物雕塑成都卡通人玻璃钢花盆江苏走廊商场美陈供应送儿当红军玻璃钢群雕塑多少钱大理玻璃钢雕塑生产制造河北公园玻璃钢雕塑多少钱玻璃钢雕塑能用几年寿命玻璃钢异形雕塑订制玻璃钢雕塑定做工厂吉林人物玻璃钢雕塑厂家上海玻璃钢雕塑雕塑公司漯河公园不锈钢玻璃钢景观雕塑镇江玻璃钢仿铜雕塑定制怀化玻璃钢花盆花器杭州梅州玻璃钢卡通雕塑上海常用商场美陈研发公司湖北公园玻璃钢雕塑销售电话福建喷泉雕塑玻璃钢网格玻璃钢雕塑福建玻璃钢花盆厂成都抽象玻璃钢雕塑价位香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化