spring面向切面编程,spring的aop中,定义在不同的切面

  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().

  大约().

  主要的.空

  -下篇文章用注解

spring面向切面编程,spring的aop中,定义在不同的切面