Spring 学习笔记(一)

Spring 学习笔记(一)

Spring特性:AOP和IOC

AOP

横切关注点:软件开发中散布于应用中多处的功能
连接点:应用执行过程中能够插入切面的一个点
切点:匹配通知所要织入的一个或多个连接点
切面:通知和切点共同定义了切面的全部内容–它是什么,在
何时及何处完成其功能
引入:允许向现有的类添加新方法或属性
织入:将切面应用到目标对象并创建新的代理对象的过程,在
目标对象的生命周期里面有多个点可以进行织入

  1. 编译期:切面在目标类编译时被织入。这种方式需要特殊的编译器。举例:AspectJ的织入编译器
  2. 类加载期:切面在目标类加载到JVM时被织入。这种方式需要特殊的类加载器,它可以在目标类被引入应用之前增强该目标类的字节码。AspectJ 5的加载时织入(load-time weaving,LTW)就支持以这种方式织入切面。
  3. 运行期:切面在应用运行的某个时刻被织入。一般情况下,在织入切面时,AOP容器会为目标对象动态地创建一个代理对象。举例:Spring AOP
通过切点来选择连接点

Spring借助AspectJ的切点表达式语言来定义Spring切面
注意:Spring只支持AspectJ切点指示器的一个子类,在Spring中尝试使用AspectJ的其他指示器时会抛出IllegalArgument-Exception异常。
//图片转自https://www.cnblogs.com/LiveYourLife/p/9029199.htm
在这里插入图片描述
AOP指的是面向切面编程,不同于C++和java的面向对象和面向过程,Spring提出了面向切面编程,举个例子,也是我在Spring实战这本书里面看到的一个,吟游诗人和骑士,吟游诗人的工作就是在骑士每次出征的时候吟唱为骑士祝福,骑士回来以后为他们祝贺,那么在吟游诗人这个类中应该有两个方法,我们记为before和after,骑士则是应该最少有一个方法,出发,我们记为gogogo。

public class poemer {
public void before {
System.out .println("gogogo");
}
public void after {
System.out .println("Congratulations!);
}
} 

那么骑士的类应该为

public class knight {
public void gogogo 
{
System.out.println("gogogo");
}
}

也就是说,每一次调用gogogo的时候,我们需要在之前调用一次before,在其后调用一次after,

Spring Expression Language

Ternary 和 Elvis 运算符

ternary运算符类似于c++和java中的三目运算符,下面的例子判断scoreboard.score是否大于1000,若大于则计算结果为string类型的“winner”,否则计算结果为“loser”。

//ternary 运算符
#{scoreboard.score>1000 ? "winner!" : "loser!"}

三目运算符的一个常见场景就是检查属性值是否为null,并提供一个默认值替代null值,下面的表达式会判断disc.title是否为null,如果是则计算结果为“Rattle and Hum".

//elvis运算符
#{disc.title ?: "Rattle and Hum"}

查询运算符

Spring提供了三种查询运算符,分别为(. ? [ ]),(. ^ [ ])和(. $ [ ]).
分别查询集合的一个子集,第一个满足判断条件的元素以及最后一个满足条件的元素。

//查询一个子集
#{jukebox.songs.?[artist eq 'Aerosmith']}
//查询第一个满足条件的元素
#{jukebox.songs.^[artist eq 'Aerosmith']}
//查询最后一个满足条件的元素
#{jukebix.songs.$[artist eq 'Aerosmith']}

此外,spring还提供了投影运算符(. ! [ ]),其作用是从集合的每个成员中选择特定的属性放入另一个集合。例如,我们只想要歌曲名称的集合,而不要歌曲对象的集合,就可以使用如下表达式

#{jukebox.songs.![title]}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值