spring面向切面编程,spring的aop中,定义在不同的切面
面向切面编程(面向方面的编程的缩写)代理就是到了某个方法(被称为"切点"),在执行这个方法之前干什么、之后干什么、异常了有什么等(这些在"切面"中定义)
!-增加面向切面编程(面向方面的编程的缩写)头,共五个-
豆子xmlns= http://www。spring框架。组织/架构/bean
xmlns:context= http://www。spring框架。组织/架构/上下文
xmlns:AOP= http://。spring框架。组织/架构/AOP
xmlns:xsi= http://。w3。 org/2001/XML架构-实例
xmlns:tx= http://www。spring框架。组织/架构/事务
xsi:架构位置= http://www。spring框架。组织/模式/bean
http://www。spring框架。org/schema/beans/spring-beans-2.5。文件
http://www.springframework.org/schema/context
http://www。spring框架。org/schema/context/spring-context-2.5。文件
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
!-在春天上下文。冲突的元inf//spring-context.jar中确定文件是哪个版本-
!-背景:批注-配置/上下文:批注-配置-
!-告诉春天扫描哪个包,我让他扫描代理所有的类-
上下文:组件扫描基础包=代理。春天。特工。* /context:组件扫描
!-定义两个豆类-
bean id=myAgent /bean
bean id=singer /bean
!-这才是正题,春季面向切面编程(Aspect Oriented Programming的缩写)切点切面就要有切点和切面,下面就是切点切入点和切面方面-
aop:配置
!-定义一个切点-
!-执行表达式第一个表示任意返回类型(公共).),第二个表示代理。spring.agent.MySinger下的任意方法,*(.)表示任意方法任意参数也就是这个类下的所有方法都会被代理-
AOP:切入点表达式= execution(* proxy。春天。特工。我的歌手。*(.)) id=point1/
!-定义一个切面-
aop:方面id=aspect1 ref=myAgent
!-这是定义切点之前、之后、抛异常该干什么-
AOP:before method= before pointcut-ref= point 1 /
AOP:after method= after pointcut-ref= point 1 /
aop:返回后方法=后返回 pointcut-ref= point 1 /
aop:抛出后方法= after throw pointcut-ref= point 1 /
AOP:around method= around pointcut-ref= point 1 /
/aop:方面
/aop:config
/豆子
-源码例子(歌手做例子) -
- xml -(歌手和经纪人之间的约定) -
?可扩展标记语言版本=1.0 编码=UTF八号?
豆子xmlns= http://www。spring框架。组织/架构/bean
xmlns:context= http://www。spring框架。组织/架构/上下文
xmlns:AOP= http://。spring框架。组织/架构/AOP
xmlns:xsi= http://。w3。 org/2001/XML架构-实例
xmlns:tx= http://www。spring框架。组织/架构/事务
xsi:架构位置= http://www。spring框架。组织/模式/bean
http://www。spring框架。org/schema/beans/spring-beans-2.5。文件
http://www.springframework.org/schema/context
http://www。spring框架。org/schema/context/spring-context-2.5。文件
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
!-在春天上下文。冲突的元inf//spring-context.jar中确定文件是哪个版本-
!-背景:批注-配置/上下文:批注-配置-
上下文:组件扫描基础包=代理。春天。特工。* /context:组件扫描
bean id=myAgent /bean
bean id=singer /bean
aop:配置
AOP:切入点表达式= execution(* proxy。春天。特工。我的歌手。*(.)) id=point1/
aop:方面id=aspect1 ref=myAgent
AOP:before method= before pointcut-ref= point 1 /
AOP:after method= after pointcut-ref= point 1 /
aop:返回后方法=后返回 pointcut-ref= point 1 /
aop:抛出后方法= after throw pointcut-ref= point 1 /
AOP:around method= around pointcut-ref= point 1 /
/aop:方面
/aop:config
/豆子
-代理类proxy.spring.agent.AgentProxy -(歌手的经纪人,管着歌手的吃饭拉。) -
包代理。春天。代理人;
导入javax。声音。迷笛。sysexmessage
导入org。AspectJ。郎。proceedingjoinpoint
公共类AgentProxy {
之前的公共空的
System.out.println(before().);
(){
System.out.println(after().);
扔之后的公共空的
System.out.println(after().);
-被代理类proxy.spring.agent.MySinger -(著名的歌手) -
包代理。春天。代理人;
公共类我的辛格{
public void sing(){
System.out.println(我唱歌);
公共字符串ss(字符串名称){
System.out.println(MySinger . 姓名);
返回名称;
-测试-主-
包代理。春天。代理人;
导入org。spring框架。语境。应用程序上下文;
导入组织。spring框架。语境。支持。classpathmlaplicationcontext
公共类测试{
公共静态void main(String[] args) {
ApplicationContext app=
新的classpathmlaplicationcontext( proxy/spring/agent/application。XML’);
我的歌手歌手=(我的歌手)app。get豆(‘歌手’);
歌手。sing();
System.out.println(main . singer.ss(周杰伦));
-结果-
之前().
我唱歌
在()之后.
afterReturn().
大约().
之前().
周杰伦
名叫麦辛格.周杰伦
在()之后.
afterReturn().
大约().
主要的.空
-下篇文章用注解