Spring框架IoC和AOP原理解析

Spring框架

1.总纲(意识形态) -> 框架的意义不在于让程序员干什么,而在于不让程序员干什么。

2.核心思想 -> 关系处理

1)IoC(控制反转) DI(依赖注入) -> 对象与对象之间的关系

将依赖项的直接(new)实例化,转换为通过容器注入产生,实现依赖关系解耦。原理:Java反射。

2)AOP(面向切面编程) -> 业务与业务之间的关系

在不影响基础业务的前提下,通过容器,在特定的切点(pointcut)上织入(可拆卸)代理业务,
实现对原业务的扩展更新甚至否决。原理:动态代理 (注意:两种实现方法)

3.实现步骤

1)引入Schema(*.xsd)文件(获取文件

链接:https://pan.baidu.com/s/1EpxM0zJvQ_0JPVNEc8HIaA 提取码:afni
复制这段内容后打开百度网盘手机App,操作更方便哦

spring-aop-3.0.xsd			AOP
spring-beans-3.0.xsd		IoC DI
spring-context-3.0.xsd		@注解
spring-mvc-3.0.xsd			SpringMVC
spring-task-3.0.xsd			任务调度
spring-tx-3.0.xsd			事务管理

2)引入依赖项(*.pom)

<properties>
		<spring.version>4.3.14.RELEASE</spring.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aspects</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${spring.version}</version>
		</dependency>
	</dependencies>

3)完成容器配置(applicationContext.xml)

String configLocation = "applicationContext.xml";
ApplicationContext ctx = new ClassPathXmlApplicationContext(configLocation);

注意:

	 容器管理Bean必须保留空构造(No default constructor found) 
     依赖注入必须提供对应setter()方法(is not writable or has an invalid setter method)
	 注解环境中setter()方法可以省略

4.解析IoC配置 核心组成是DI(一个bean对应的就是一个类,ref会匹配bean(也就是类)依赖对象,完成依赖注入)

//面向接口
	<bean id="" class="">
		<property name="" value="" />
		<property name="" ref="" />	-> 依赖注入
	</bean>
	
	<bean name="{name1},{name2}" />  -> 可以通过多个命名定位 注意:无论是id还是name都必须唯一
	<bean scope="" />
			singleton	-> 单例 默认模式
			prototype	-> 非单例
			request		-> 请求作用域(web环境)
			session		-> 会话作用域(web环境)
			
	<constructor-arg index="{索引}" value="{value}"></constructor-arg>	-> 带参构造
	<constructor-arg name="{形参}" value="{value}"></constructor-arg>	-> 带参构造
	
	<property name="author">			-> 数组
		<array>
			<value>Apache3</value>
			<value>Apache4</value>
		</array>
	</property>
	<property name="history">			-> 集合
		<map>
			<entry key="2000" value="销售10000"></entry>
			<entry key="2001" value="销售20000"></entry>
			<entry key="2002" value="销售30000"></entry>
		</map>
	</property>

5.解析AOP配置

配置:

<!-- AOP配置 -->
<aop:config>
	<!-- 切点  expression表达式 匹配规则-->
	<aop:pointcut expression="execution(* com.uplooking.service..*.*(..))" id="p1"/>
	<!-- 通知 -->
	<aop:aspect ref="bookProxy">
	<!-- 前置通知 before  -->
		<aop:before method="test" pointcut-ref="p1"/>
	</aop:aspect>
</aop:config>	

处理通知的类BookServiceProxy.java

package com.uplooking.service.proxy;

public class BookServiceProxy {
    public void test(){
        System.out.println("测试AOP");
    }
}

通知:

	前置 before		-> 在业务调用之前通知 不受异常干扰
	后置 after		-> 在业务调用之后通知 不受异常干扰
	返回 return		-> 在业务调用(没有异常)完成之后通知 并获取业务返回值 并可以修改数据结果
	异常 throw		-> 在业务调用时发生异常并抛出后通知
	环绕 around		-> 在所有通知中 只有环绕通知才能根本上实现对业务的控制 动态代理本质

AOP切点表达式解析
在这里插入图片描述
cron表达式
在这里插入图片描述

Spring -> “粘合剂”:我们不生产"轮子" 我们只提供轮子良好运行"平台"

Spring注解 - 简洁明了

1)IoC

//控制反转
@Component		->通用
@Repository		->持久
@Service		->业务
@Controller		->控制

//依赖注入
@Autowired

补充:依赖注入原理
	优先通过byType查找(类型匹配) -> 如果类型匹配不只一个
	在通过byName(形参同名)查找 -> @Qualifier("bookDO")
	
注意:IoC扫描范围包含注解

2)AOP

@Aspect			->代理类
@Pointcut		->切点

@Around			->环绕通知
@Before			->前置通知
@After			->后置通知
@AfterReturning	->返回通知
@AfterThrowing	->异常通知

注意:AOP注解默认不启用 -> 自动启动
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

你不懂、、、

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

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

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

打赏作者

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

抵扣说明:

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

余额充值