Spring框架及AOP
Spring核心概念
Spring框架大约由20个功能模块组成,这些模块主分为六个部分:
Core Container :基础部分,提供了IoC特性.
Data Access/Integration
Web
AOP(Aspect Orient Programming)
Instrumentation
Test
Spring两大核心技术
控制反转(Inversion of Control IoC)
称之为”依赖注入”,是面向对象编程中的一个设计理念,用来降低程序代码之间的耦合度.
将组建对象的控制权从代码本身转移到外部容器.
面向切面编程(AOP:Aspect Oriented Programming)
优点
低侵入式设计
独立于各种应用服务器
依赖注入特性将组建关系透明化,降低耦合度
面向切面编程特性允许将通用任务进行集中式处理
与第三方框架的良好整合.
SPring包下载地址
https://repo.spring.io/webapp/#/home 进行搜索下载
Spring依赖注入(IoC)
实现原理
导入相应的资源文件(Maven导入 Spring Context资源)
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.13.RELEASE</version>
<scope>runtime</scope>
</dependency>
配置applicationContext.xml文件
<?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-3.0.xsd">
<!-- 通过bean标签声明Spring对象创建的实例
id指定唯一标识符,class指定声明实例对应的类
并通过id属性为该实例指定一个名称,以便于访问 -->
<bean id="one" class="cn.springdemo.HelloSpring">
<!-- property元素用来调用指定 name值得set方法进行赋值操 作.name的值为set方法的形参对象名 -->
<property name="who">
<!-- 此处将abc赋值给了who -->
<value>abc</value>
</property>
//或者
<property name="who"value="abc" />
//或者p:属性名-ref="所注如bean的ID"
//使用有参构造方法注入
<constructor-arg name="username" value="xxx">
</constructor-arg>
//或者 在bear标签内写
c:构造参数名-ref=”bean的id”构造参数名可以使用下代替,但是必须加下划线 例:c:_0,c:_1普通值直接等于即可
</bean>
<bean id="..." class="...">
<!-- 这个 bean 的合作者和配置在这里编写 -->
</bean>
<!-- 更多的 bean 定义在这里编写 -->
</beans>
在property元素中,ref属性和value属性区别
value针对常规属性赋值,如:基本数据类型,包装类,String等
ref对象赋值,赋值元素为该文件已存在的bean元素.
Bean标签常用属性
id属性:指定唯一标识符(不能包含特殊符号),根据ID值得到配置对象
class属性:创建对象所在类的全路径
name属性:功能和ID属性是一样的(可以包含特殊符号)
scope属性:singleton(默认的,单例的),prototype(多例的)
<util:constant>; 引用某个类型的 public static 域,并将其暴露为 bean
util:list; 创建一个 java.util.List 类型的 bean ,其中包含值或引用
util:map; 创建一个 java.util.Map 类型的 bean ,其中包含值或引用
util:properties; 创建一个 java.util.Properties 类型的 bean
util:property-path; 引用一个 bean 的属性(或内嵌属性),并将其暴露为 bean
util:set 创建一个 java.util.Set 类型的 bean ,其中包含值或引用
注入集合类型的属性:分别使用<list>,<set>,<map>,<props>标签来实现
注入null和空字符串:使用<null/>注入null值,使用<value></value>注入空字符串
特殊字符的处理: <![CDATA[带特殊符号的字符串]]>
Spring注解开发准备
1.导入基本的jar包
2.创建类,创建方法
3.创建Spring配置文件,引入头约束
ioc基本功能,引入约束beans
ioc注解开发,引入新的约束.(参考下图)
4.开启注解扫描(一般采用第一种,多目录录入大目录即可)
* 基于注解创建对象,创建对象的四个注解
在类开启注解过后,创建方式跟context.xml-bean 创建对象方式一样
配置对象的实例为单实例还是多实例
@Scope();默认为单例,prototype为多例
* 注解注入属性
在定义的属性上使用@Autowired注解.(使用注解不需要定义set方法),根据类型注入,找不到返回null
@Resource注解,可根据name或type注入,找不到或找到多个则跑出异常
案例参考:
配置xml文件,开启注解扫描
使用xml文件配置开启注解扫描(配置Context的头文件)
或:在指定包上添加@ComponentScan,则会开启扫描该类所在包及所有子包目录
如果JaveBean是自动创建()就则使用@Autowired进行自动获取进行注入,在参数以及方法上均可使用.
输出结果:
实际开发经验:
在xml文件中创建配置对象
使用注解插入对象
@Configuration 注解表明该类为配置类
Spring AOP原理(面向切面编程)
将复杂的需求分解出不同方面,将公共功能集中解决.
采用代理机制组装运行,在不改变原程序的基础上对代码段进行增强处理,增加新的功能.
横向抽取机制(底层使用 动态代理方式实现)
AOP操作术语
Joinpoint(连接点),类里面可以被增强的方法,在Spring中,这些方法为连接点.
Pointcut(切入点);所谓切入点是指我们实际增强的方法.
增强(Advice);实际增强的逻辑,称之为增强
- 前置增强: 在方法开始前执行
- 后置增强: 在方法结束后执行
- 异常增强: 在方法出现异常时执行
- 最终增强: 在后置之后执行
- 环绕增强: 在方法之前和之后执行
切面(Aspect); 把增强应用到具体方法上面的过程称之为切面.
目标对象(Target); 增强逻辑的织入目标类。
引介(Introduction);引介是一种特殊的增强,它为类添加一些属性和方法。
织入(Weaving); 织入是将增强添加对目标类具体连接点上的过程。
代理(Proxy);一个类被AOP织入增强后,就产出了一个结果类,它是融合了原类和增强逻辑的代理类。
Spring的AOP操作
在Spring实现Aop的操作,使用aspectj实现.
@Aspectj是一个面向切面的框架(本身不是Spring自己的框架),是一个基于Java语言的框架.
Spring2.0以后增加了对Aspectj切点表达式的支持,新版本Spring框架建议使用Aspectj方式来开发AOP.
一、基于Aspectj的xml配置
1.导入相关的jar包
2.写增强的类以及相关的方法
3.配置相关头文件
二、基于Aspectj的注解方式进行AOP操作
1.导包,配置文件引入约束,创建对象
2.在spring核心配置文件开启aop扫描
修改application.controller.xml文件
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- 开启aop扫描操作,启用对@AspectJ注解的支持 --> <aop:aspectj-autoproxy></aop:aspectj-autoproxy> </beans> |
3.在增强类上面使用注解完成aop操作
在增强类上添加@Aspect注解,定义为增强类
在增强类中的方法添加注解:
@Before(“excution表达式”) 前置增强
@AfterReturning(“excution表达式”) 后置增强
@Around(“excution表达式”) 环绕增强
@AfterThrowing(“excution表达式”) 抛出增强
@After (“excution表达式”)最终final增强,不管是否有异常,都会执行.
例:
@Before(value=”execution(public * *(..)”) 匹配所有目标类的public方法
如果都使用一个表达式,则可以进行提取使用@Pointcut注解进行设置
例:
@Pointcut(“excution表达式”)
public void pointcut(){};
提出来过后,在增强方法上添加注解则可以直接使用该方法即可
例:
@Before(“pointcut()”)
如果增强方法中有其他参数,则也需要一起注入,非抛出异常增强使用returning=”参数对象”,表达式则放在pointcut=”excution表达式”;异常增强使用throwing=”异常参数对象”
Spring框架及AOP的更多相关文章
- Spring框架的AOP技术(注解方式)
1. 步骤一:创建JavaWEB项目,引入具体的开发的jar包 * 先引入Spring框架开发的基本开发包 * 再引入Spring框架的AOP的开发包 * spring的传统AOP的开发的包 * sp ...
- 10.Spring——框架的AOP
1.Spring 框架的 AOP 2.Spring 中基于 AOP 的 XML架构 3.Spring 中基于 AOP 的 @AspectJ 1.Spring 框架的 AOP Spring 框架的一个关 ...
- Spring 框架的 AOP 简介
Spring 框架的 AOP Spring 框架的一个关键组件是面向方面的编程(AOP)(也称为面向切面编程)框架. 面向方面的编程需要把程序逻辑分解成不同的部分称为所谓的关注点. 跨一个应用程序的多 ...
- 使用spring框架进行aop编程实现方法调用前日志输出
aop编程 之使用spring框架实现方法调用前日志输出 使用spring框架实现AOP编程首先需要搭建spring框架环境: 使用Spring框架实现AOP工程编程之后,不需要我们去写代理工厂了,工 ...
- Spring框架之AOP源码完全解析
Spring框架之AOP源码完全解析 Spring可以说是Java企业开发里最重要的技术.Spring两大核心IOC(Inversion of Control控制反转)和AOP(Aspect Orie ...
- Spring框架(4)---AOP讲解铺垫
AOP讲解铺垫 不得不说,刚开始去理解这个Aop是有点难理解的,主要还是新的概念比较多,对于初学者一下子不一定马上能够快速吸收,所以我先对什么事Aop做一个解释: 首先说明:本文不是自己所写 ...
- Spring框架的AOP的底层实现
1. Srping框架的AOP技术底层也是采用的代理技术,代理的方式提供了两种 1. 基于JDK的动态代理 * 必须是面向接口的,只有实现了具体接口的类才能生成代理对象 2. 基于CGLIB动态代理 ...
- Spring 框架的AOP之注解的方式
1. 环境搭建 1.1 导入 jar 包 Spring 框架的基本开发包(6个); Spring 的传统AOP的开发包 spring-aop-4.3.10.RELEASE org.aopallianc ...
- spring框架中AOP思想与各种配置详解
Spring中提供两种AOP支持: 1.基于代理的经典AOP 2.Aspectj注解配置AOP 首先我们先了解什么是AOP,AOP(Aspect Oriented Programming ...
随机推荐
- Ubuntu 16.04使用百度云的方案
Ubuntu没有很好的解决方案,都是一些投机取巧的方案: 1.不建议安装百度云客户端,尤其对于免费用户来说,会限制速度. 2.可以使用网页版进行文件上传. 3.下载可以通过Chrome点击下载后,复制 ...
- Ubuntu 16.04安装WebStorm
前提:必须正确安装JDK. 下载: http://confluence.jetbrains.com/display/WI/WebStorm+EAP 或者下载历史版本:https://www.jetbr ...
- Hive之执行计划分析(explain)
Hive是通过把sql转换成对应mapreduce程序,然后提交到Hadoop上执行,查看具体的执行计划可以通过执行explain sql知晓 一条sql会被转化成由多个阶段组成的步骤,每个步骤有执行 ...
- mysql 排序order by可以根据权重,进行表达式计算。再排序
1.select * from tbl_actor order by (follower_count+Recommend_weight)*weight_ratio desc limit 3; 2.or ...
- mysql导入大型sql文件时注意事项
原文:http://blog.csdn.net/k21325/article/details/70808563 大型sql文件,需要在my.ini(windows)或者my.cnf(Linux)中设置 ...
- (6)文本挖掘(三)——文本特征TFIDF权重计算及文本向量空间VSM表示
建立文本数据数学描写叙述的过程分为三个步骤:文本预处理.建立向量空间模型和优化文本向量. 文本预处理主要採用分词.停用词过滤等技术将原始的文本字符串转化为词条串或者特点的符号串.文本预处理之后,每个文 ...
- echars入门篇
官网地址:echars. 官方实例:首次使用请点击. 官方文档以及第一次操作实例如下 我们生活中有很多统计图,举例一下,有:柱形图.饼图.折线图等一些可以统计数据的形式. 图有:X轴(横轴),Y轴(纵 ...
- Hdu2111
<span style="color:#6600cc;">/* J - Saving HDU Time Limit:1000MS Memory Limit:32768K ...
- [Python网络编程]浅析守护进程后台任务的设计与实现
在做基于B/S应用中.常常有须要后台执行任务的需求,最简单比方发送邮件.在一些如防火墙,WAF等项目中,前台仅仅是为了展示内容与各种參数配置.后台守护进程才是重头戏.所以在防火墙配置页面中可能会常常看 ...
- Ubuntu安装JDK及环境变量配置(sun java)
捣鼓了尽一天的时间,终于把sun的java安装上了,不是openjava了,网上试了好多的方法好多都是不可以的,所以当自己成功后就立马把方法贴出来,以方便后来者少走弯路,此文的方法绝对可行! 这里先简 ...