Spring(IOC+AOP)

Spring

一、概述

1.什么是spring?

是一个轻量级的IOC和AOP容器的开源框架。

框架:完成一定功能的半成品

轻量级:一般就是非侵入性的、所依赖的东西非常少、占用资源非常少
2.Spring的核心

IOC:控制反转,把创建对象过程交给Spring进行管理。

AOP:面向切面编程,不修改源码进行功能增强。

3.Spring的模块

Spring的模块

Web:spring对web的支持(SpringMVC)

AOP:切面

Aspects:配合AOP完成切面

Insteumentation:拦截器里的一个东西

Core Container:核心;(bean,上下文,核心功能,表达式语言)

Test:单元测试

二、IOC

1.IOC概念

控制反转;

把对象的创建和对象之间的调用,交给Spring管理

使用目的:为了降低耦合度;

控制反转IoC(Inversion of Control),是一种设计思想,
DI(依赖注入)是实现IOC的一种方法

控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。
在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入DI。
  • 控制 : 谁来控制对象的创建 , 传统应用程序的对象是由程序本身控制创建的 , 使用Spring后 , 对象是由Spring来创建的
  • 反转 : 程序本身不创建对象 , 而变成被动的接收对象
2.DI概念

依赖注入

简单的说,就是坐等框架把持久层对象传入业务层,而不用我们自己去获取。

3.实现IOC
原理:

xml解析;工厂模式;反射

过程:

可以使用XML配置,也可以使用注解

被注解标注的地方会先进行反射,

3.1.XML配置
3.1.1.通过 bean 的 set()方法赋值

bean.xml代码

使用property完成属性注入

<bean id="user" class="com.xinzhi.spring.User" > 
	<property name="age" value="13"> </property>
	// name:类里面的属性名称;value:向属性注入的值;
</bean>

test类代码

ApplicationContext  a =  new  ClassPathXmlApplicationContext(“bean.xml”) 
 //可以看作spring容器的实例

User  b = (User)a .  getBean( "user",User.class);  
//在spring容器 a 中寻找类的实例
3.1.2.通过 bean 的构造器赋值

使用constructor-arg完成属性注入

name:类里面的属性名称;value:向属性注入的值;

<constructor-arg value= “值” name = “age"/>

3.1.3.p名称空间

为了简化 XML 文件的配置。引入了一个新的 p 命名空间,可以通过元素属性的方式配置 Bean的属性。

使用 p 命名空间后,基于 XML 的配置方式将进一步简化。

<bean  id="studentSuper"   class="com.xinzhi.Student"  
       p:studentId="2002"  p:age="18" />
3.2.注解

baen.xml代码

// 1.在spring配置文件中引入context文件头
xmlns:context="http://www.springframework.org/schema/context"
// 2.开启属性注解支持!
<context:annotation-config/>
// 3.指定注解扫描包
<context:component-scan base-package="com.xinzhi.pojo"/></context:component-scan>

要注入的类

// 1.在指定包下编写类,增加注解
@Component("user") 
// 相当于配置文件中 <bean id="user" class="当前注解的类"/>
public class User{
}
总结:
1.注解标识组件 
 1) 普通组件:@Component 
 2) 持久化层(dao)组件:@Repository 
 3) 业务逻辑层组件:@Service 
 4) 表述层控制器组件:@Controller 

2.注解注入属性
 1) @Autowired	根据属性类型进行自动装配
 2) @Qualifier	根据名称进行注入
 3) @Resource   既可以通过属性类型也可以通过名称
3.3.XML与注解比较
  • XML可以适用任何场景 ,结构清晰,维护方便
  • 注解不是自己提供的类使用不了,开发简单方便

三、AOP

面向切面编程

作用:不修改源码,在主干功能里添加新功能;不修改源码的基础上对方法增强 (某个方法执行前做什么,执行后做什么)

1.AOP术语
切面(Aspect) :是动作;把‘通知’应用到‘切入点’的过程

连接点(Joinpoint) :连接‘切面’和‘运行方法’;

通知(Advice) :什么时候要执行‘切面’ 

切入点(Pointcut) :实际被真正增强的方法,称为切入点。

目标对象(Target Object):被切入的对象

AOP代理(AOP proxy):Spring AOP有两种代理方式,JDK代理和CGLIB代理
2.不同类型的通知

​ 在增强类里,在作为通知方法上面添加通知类型注解,使用切入点表达式

① @Before:前置通知,在方法执行之前执行 

② @After:后置通知,在方法执行之后执行 

③ @AfterRunning:返回通知,在方法返回结果 之后执行 

④ @AfterThrowing:异常通知,在方法抛出异常之后执行 

⑤ @Around:环绕通知,围绕着方法执行
3.实现AOP
3.1.xml实现

bean.xml代码

// 1.引入AOP相关依赖
xmlns:aop="http://www.springframework.org/schema/aop"
// 2.开启注解扫描
<context:component-scan  base-package=“包路径名”>
</context:component-scan>
// 3.组件化两个类,增强类和被增强类,创建方法
<bean id="" class= "增强类" ></ bean>
<bean id="" class= "被增强类" ></ bean>
// 4.配置切入点
<aop:config >
	// 切入点
	<aop:pointcut id="A" expression ="切入点表达式" />
	// 切面
	<aop:aspect  ref="增强类bean">
		<aop:通知类型 method = " "  pointcut-ref="A" />
	</aop:aspect >	
</aop:config >

切入点表达式

作用:知道对哪个类的哪个方法进行增强

execution( [ 权限修饰符] [返回类型] [类全路径] [方法名称] ( [ 参数列表] ) )

3.2.注解方式实现
  1. bean.xml代码
// 1.开启注解扫描
<context:component-scan  base-package=“包路径名”></  context:component-scan>
// 2.开启生成代理对象
<aop:aspectj-autoproxy ></aop:aspectj-autoproxy >
  1. 创建类、增强类,类里面定义方法

  2. 使用注解组件化 类和增强类 @Component

  3. 在增强类的上面添加注解 @Aspect

  4. 设置切点,调用切点

// 设置切点
@Pointcut(value=“切入点表达式”)  // 切入点
	public void 方法(){ }       // 方法签名:用来接收切点
// 调用切点
	@Bedore(value=“方法()”)   // 调用

**注:**若多个类对同一个方法增强,设置增强类的优先级

​ 在增强类上添加@Order(int A) A越小优先级越高

四、事务

事务就是一组数据要么都执行,要么都不执行

1.特点(ACID)

A 原子性:一个事务是不可再分割的整体,要么都执行要么都不执行

C 一致性:一个事务可以使数据从一个一致状态切换到另外一个一致的状态

I 隔离性:一个事务不受其他事务的干扰,多个事务互相隔离的

D 持久性:一个事务一旦提交了,它对数据库的改变是永久的。

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值