Spring学习

什么是Spring

Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架

Spring的优点:

1、非侵入式设计
Spring是一种非侵入式(non-invasive)框架,它可以使应用程序代码对框架的依赖最小化。

2、方便解耦、简化开发
Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护工作都交给Spring容器的管理,大大的降低了组件之间的耦合性。

3、支持AOP
Spring提供了对AOP的支持,它允许将一些通用任务,如安全、事物、日志等进行集中式处理,从而提高了程序的复用性。

4、支持声明式事务处理

只需要通过配置就可以完成对事物的管理,而无须手动编程。

5、方便程序的测试
Spring提供了对Junit4的支持,可以通过注解方便的测试Spring程序。

6、方便集成各种优秀框架
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如Struts、Hibernate、MyBatis、Quartz等)的直接支持。

7、降低Jave EE API的使用难度。
Spring对Java EE开发中非常难用的一些API(如JDBC、JavaMail等),都提供了封装,使这些API应用难度大大降低

Spring学习

程序的耦合:
耦合:程序之间的依赖关系。
包括类之间的依赖,方法之间的依赖
解耦:降低程序之间的依赖关系
实际开发中要做到编译期不依赖,运行时才依赖
解耦的思路:
第一步:使用反射来创建关键字,避免使用new关键字
第二步:通过读取配置文件来获取要创建的对象全限定类名

三层业务逻辑:表现层调用业务层,业务层调用持久层

IOC容器:IOC—Inversion of Control,即“控制反转”,就是具有依赖注入功能的容器,是可以创建对象的容器,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。为何是反转,哪些方面反转了:有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;

IoC很好的体现了面向对象设计法则之一—— 好莱坞法则:“别找我们,我们找你”;即由
IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。

DI:Dependency Injection,即“依赖注入”:是组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。

理解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”,

Sping中的RowMapper可以将数据中的每一行数据封装成用户定义的类.
此处有一个小栗子:https://blog.csdn.net/yajunren/article/details/10103035

Spring注解

用于创建对象的
他们的作用就和在XML配置文件中编写一个标签实现的功能是一样的

Component:
作用,用于把当前类对象存入spring容器中
属性:value:用于指定bean的id,当我们不写时,它的默认值是当前类名,且首字母要小写

Controller:一般用在表现层

Service:一般用在业务层

Repository:一般用在持久层

       以上三个注解的作用和Component一样
        他们三个是spring框架为我们提供明确的三层使用的注解,使我们的三层对象更加清晰

用于注入数据的
他们的作用就和在XML配置文件标签中编写一个实现的功能是一样的

Autowired:
作用:
自动按照类型注入,只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配,就可以注入成功
如果ioc中没有任何bean类型的和要注入的变量类型匹配,则报错
如果ioc中有多个类型匹配时,则必须标明注入的变量名
出现位置:可以是变量上,也可以是方法上

Qualifier:
作用:在按照类中注入的基础之上再按照名称注入,它在给类成员注入时不能单独使用,要和@Autowired一起使用,但是在给方法参数注入时可以
属性:
value:用于指定注入bean的id

Resource:
作用:直接按照bean的id注入,可以独立使用
属性:永固指定bean的id
以上三个注入都只能注入其他bean类型的数据,而基本类型和String类型无法使用上述注解实现
另外,集合类型的注入只能通过XML来实现

Value
作用:用于注入基本类型和String类型的数据
属性:
value:用于指定数据的值,它可以使用spring中SpEL(也就是spring的el表达式)
SpEL的写法:${表达式}

用于改变作用范围的
他们的作用就和在XML配置文件标签中使用scope实现的功能是一样的

Scope
作用:用于指定bean的作用范围
属性:
value:指定范围的取值,常用取值:singleton,prototype
和生命周期相关
他们的作用就和在XML配置文件标签中使用init-method和destroy-method实现的功能是一样的

PreDestroy
作用:用于指定销毁方法

PostConstruct
作用:用于指定初始化方法

https://gitee.com/SHUANGYANPI/My.git 中的SpringIoc中有简单案例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃小巴掌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值