spring基础知识及基本功能的搭建

目录

一:spring介绍

二:Spring体系结构

三:Spring搭建

1.Maven 导入 spring 核心基础 jar

2.编写一个 User 实体类

3.编写 spring 配置文件

IOC(控制反转)

四:Spring Bean 管理

1:基于 xml 配置方式

2.注解方式实现

导入 Spring aop jar 包

开启注解扫描

注解创建对象

 注解方式注入属性

注解与 XML 的对比

五Spring JDBC

 六springAOP 

1.AOP的概述

2.AOP概念

3.实现

七 Spring 事物管理

1.事物的概述

2.Spring声明事务管理

3.Spring 事务传播行为


一:spring介绍

Spring 是于 2003 年兴起的一个轻量级的,IOC 和 AOP 的 Java 开发框架,它 是为了简化企业级应用开发而生的。
特点:
轻量级的
Spring 框架使用的 jar 都比较小,一般在 1M 以下或者几百 kb。Spring 核 心功能的所需的 jar 总共在 3M 左右。 Spring 框架运行占用的资源少,运行 效率高。
IOC
即 Inversion of Control,缩写为 IOC,就是由 Spring IoC 容器管理对象,而 非传统实现中由程序代码直接操控.
AOP
直译过来就是 面向切面编程。AOP 是一种编程思想,是面向对象编程(OOP) 的一种补充。面向对象编程将程序抽象成各个层次的对象,而面向切面编程是将 程序抽象成各个切面.

二:Spring体系结构

Core Container(核心容器):
Beans: 管理 Beans
Core: Spring 核心
Context: 配置文件
ExpressionLanguage: SpEL 表达式
AOP(切面编程)
AOP 框架: Aspects
Data Access(数据库整合):
JDBC, ORM, OXM, JMS, Transaction
Web(MVC Web 开发):
Web, Servlet, Portlet, Struts
Test(Junit 整合)
官网地址: https://spring.io/

三:Spring搭建

1.Maven 导入 spring 核心基础 jar

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

2.编写一个 User 实体类

public class user(){
private String name;
private int age;

public void work(){
       System.out.println("名字"+this.name);
}

}

3.编写 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">
<bean id="user" class="com.ff.spring.bean.User"> </bean>
</beans>

<bean id="user" class="com.ff.spring.bean.User"> </bean> 这段代码相当于 创建了一个user对象只不过这个对象有spring来创建和管理也就是上面所说的IOC    其中 id 为 类的名称 class为类的路径

IOC(控制反转)

       IOC 容器是具有依赖注入功能的容器,负责对象的实例化、对象的初始化,对 象和对象之间依赖关系配置、对象的销毁、对外提供对象的查找等操作,对象 的整个生命周期都是由容器来控制。我们需要使用的对象都由 ioc 容器进行管 理,不需要我们再去手动通过 new 的方式去创建对象,由 ioc 容器直接帮我 们组装好,当我们需要使用的时候直接从 ioc 容器中直接获取就可以了。

四:Spring Bean 管理

1:基于 xml 配置方式

bean 配置需要 spring 管理的类  
id 生成的对象名  
class 全类名
name 对象别名,可以为多个
singleton(默认值):在 Spring 中只存在一个 bean 实例, 单例模式.
prototype:原型 getBean()的时候都会 new Bean()
request:每次 http 请求都会创建一个 bean, 仅用于 WebApplicationContext 环境
session:同一个 http session 共享一个 Bean, 不同 Session 使用不同的 Bean, 使用环境同上

2.注解方式实现

导入 Spring aop jar 包

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>5.2.2.RELEASE</version>
</dependency>

开启注解扫描

在spring.xml中

<context:component-scan base-package="包名"> </context:component-scan> 

注解创建对象

我们可以在类上加上注解
@Component(value=“user”) 标注一个类为Spring容器的Bean 等同于 <bean id=“user” class=“”></bean>
@Service:表明此类为service服务层(注入dao)
@Repository   表明此类为dao持久层(实现dao访问)
以上注解都可以实现创建对象功能,只是为了后续扩展功能,在不同的层 使用不同的注解标记

 注解方式注入属性

1.@Autowired 是 Spring 提供的注解,可以写在字段和 setter 方法上。如果写在 字段上,那么就不需要再写 setter 方法。默认情况下它要求依赖对象必须存在, 如果允许 null 值,可以设置它的 required 属性为 false

2.byType 自动注入 该注解默认使用按类型自动装配 Bean 的方式。

3.byName 自动注入 按照名称(byName)来装配,
4.JDK 注解@Resource 自动注入 Spring 提供了对 jdk 中@Resource 注解的支持。@Resource 注解既可以按名称匹配 Bean,也可以按类型匹配 Bean。默认按照 ByName 自动注入
5. byName 注入引用类型属性@Resource 注解指定其 name 属性,则 name 的值即为按照名称进行匹配的 Bean 的 id。

注解与 XML 的对比

注解优点: 方便,直观,高效(代码少,没有配置文件的书写那么复杂)。
注解缺点: 以硬编码的方式写入到 Java 代码中,修改是需要重新编译代码的。
xml 优点是: 配置和代码是分离的,在 xml 中做修改,无需编译代码,只需重 启服务器即可将新的配置加载。
xml 的缺点是: 编写麻烦,效率低,大型项目过于复杂。

Spring JDBC

1.加入相应jar包

<!-- spring-jdbc -->
< dependency >
< groupId >org.springframework</ groupId >
< artifactId >spring-jdbc</ artifactId >
< version >5.2.2.RELEASE</ version >
</ dependency >
<!-- 阿里数据源 -->
< dependency >
< groupId >com.alibaba</ groupId >
< artifactId >druid</ artifactId >
< version >1.1.10</ version >
</ dependency >
导入属性文件
<context:property-placeholder location="config.properties"/>

 管理数据源对象

spring 管理与数据库链接 (数据源)
< bean id ="dataSource"class="com.alibaba.druid.pool.DruidDataSource">
< propertyname ="driverClassName" value="${driverClassName}"></ property >
< property name ="url" value ="${url}" ></ property >
< property name ="username" value ="${uname}" ></ property >
< property name ="password" value ="${pwd}" ></ property >
< property name ="initialSize" value ="10" ></ property >
< property name ="minIdle" value ="5" ></ property >
< property name ="maxActive" value ="20" ></ property >
</ bean >

在配置文件中创建 JdbcTemplate 

< bean id ="jdbcTemplate" class ="org.springframework.jdbc.core.JdbcTemplate" >
< property name ="dataSource" ref ="dataSource" ></ property >
</ bean >

在类中获得 JdbcTemplate 对象,就可以直接使用。

 @Autowired
JdbcTemplate jdbcTemplate
JdbcTemplate 中常用的方法
execute:无返回值,可执行 ddl,增删改语句
update:执行新增、修改、删除语句;
queryForXXX:执行查询相关语句;

springAOP 

1.AOP的概述

意为:面向切面编程,通过 预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP  是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的 某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果 就是把业务代码提取出来 放到一个类中 在需要的大方加入即可

2.AOP概念

连接点(Joinpoint): 类中可以被增强的方法,这个方法就被称为连接点 这里的增强就是 可以添加功能的方法
切入点(pointcut): 类中有很多方法可以被增强,但实际中只有 add 和 update 可被增强,那么 add 和 update 方法就被称为切入点(实际实现的连接点)
通知(Advice): 通知是指一个切面在特定的连接点要做的事情(增强的功能)。通 知分为方法执行前通知,方法执行后通知,环绕通知等.
切面(Aspect): 把通知添加到切入点的整个过程称为切面.
目标(Target): 代理的目标对象(连接点,切入点所在类)
代理(Proxy): 向目标对象应用通知时创建的代理对象

3.实现

加入AOP相关的jar包

< dependency >
< groupId >org.springframework</ groupId >
< artifactId >spring-aspects</ artifactId >
< version >5.2.2.RELEASE</ version >
</ dependency >

基于 aspectj 的 xml 配置方式实现 

<bean id="aopdemo" class="com.ff.spring.aop.AopDemo"></bean>
<aop:config>

<!-- 配置切入点 -->
<aop:pointcut expression="execution(* com.ff.spring.service.UserService.adduser(..))"id="adduser"/>
<aop:pointcut expression="execution(* com.ff.spring.service.UserService.*(..))" id="allmethod"/>

<!-- 配置通知和切入点 -->
<aop:aspect ref="aopdemo">
<aop:before method="savelog" pointcut-ref="adduser"/>
<aop:after method="savelog" pointcut-ref="adduser"/>
<aop:around method="aroundAdvice" pointcut-ref="adduser"/>
<aop:after-throwing method="exceptionAdvice" pointcut-ref="allmethod" throwing="e" />
</aop:aspect>
</aop:config>
基于 注解方式实现 
AspectJ 中常用的通知有五种类型:
前置通知:在执行被增强方法前执行  @Before ( "execution(*com.ff.spring.demo1.dao.UserDao.*(..))" )
后置通知:在执行被增强方法后执行  @After ( "execution(* com.ff.spring.demo1.dao.UserDao.*(..))" )
异常通知:再出现异常时执行 
@AfterThrowing (value = "execution(* com.ff.spring.demo1.dao.UserDao.*(..))" ,throwing = "e" )
,最终通知:和后置通知一样在方法后执行 不同的是如果方法出现异常 则后置通知不会执行而最终通知照样执行
@AfterReturning ( "execution(* com.ff.spring.demo1.dao.UserDao.*(..))" )
环绕通知:兼备以上四种功能
@Around ( "execution(* com.ff.spring.demo1.dao.UserDao.*(..))" ) 

七 Spring 事物管理

1.事物的概述

       事物可以看做是由对数据库若干操作组成的一个单元。 我们在开发企业应用时,对于业务人员的一个操作实际是对数据读写的多步操作 的结合。由于数据操作在顺序执行的过程中,任何一步操作都有可能发生异常, 异常会导致后续操作无法完成,此时由于业务逻辑并未正确的完成,之前成功操 作数据的并不可靠,需要在这种情况下进行回退。 事务的作用就是为了保证用户的每一个操作都是可靠的,事务中的每一步操作都 必须成功执行,只要有发生异常就回退到事务开始未进行操作的状态,这些操作 要么都完成,要么都取消,从而保证数据满足一致性的要求

2.Spring声明事务管理

注解方式
@Transactional
<!-- 开启注解事务管理 -->
< tx :annotation-driven transaction-manager ="transactionManager" />

开启注解事务管理后 只需要在类上加上标签 @Transactional 就可以为该类开启事务

声明式事务不生效的场景
1.@Transactional 应用在非 public 修饰的方法上
2.类中异常被catch捕获后导致失效
3.出现编译期异常
4. @Transactional 事务传播行为设置错误
5.数据库引擎不支持事务
6.同一个类中,使用非代理对象调用一个有事务的方法,导致事务错误

3.Spring 事务传播行为

1.事务传播概述
       即然是传播,那么至少有两个东西,才可以发生传播。单体不存在传播这个行为。 事务传播行为(propagation behavior)指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行。事务传播行为是 Spring 框架独有 的事务增强特性,他不属于的事务实际提供方数据库行为.
例如:methodA 事务方法调用 methodB 事务方法时,methodB 是继续在调 用者 methodA 的事务中运行呢,还是为自己开启一个新事务运行,这就是由 methodB 的事务传播行为决定的。
Spring 定义了七种传播行为:
事务传播行为类型
说明
PROPAGATION_REQUIRED
如果当前没有事务,就新建一个事务,如果已经存在一个事务中, 加入到这个事务中。这是最常见的选择。
PROPAGATION_SUPPORTS
支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY
使用当前的事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW
新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED
以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER
以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,
则执行与 PROPAGATION_REQUIRED 类似的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值