spring4学习记录02-spring AOP
2017-04-24 16:20
555 查看
前置消息,后置消息,环绕消息,参数传递
package com.jx.spring02; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; public class Calc { public void before(JoinPoint jp){ System.out.println("----------跑步之前注意热身,别受伤----------"); } public void after(JoinPoint jp){ System.out.println("----------跑步完了放松肌肉----------"); } public void around(ProceedingJoinPoint jp) throws Throwable{ System.out.println("开始时间:" + System.currentTimeMillis()); jp.proceed(); System.out.println("结束跑步时间:" + System.currentTimeMillis()); } public void params(int year , int total){ System.out.println("year : " + year + " , total : " + total); } }
package com.jx.spring02; public class Runner { private String name; private int km; public int getKm() { return km; } public void setKm(int km) { this.km = km; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void run(){ System.out.println(this.name + " 跑了" + this.getKm() + "公里步 "); } public void sayMessage(int year , int total){ System.out.println("我叫" + this.name + "我从" + year + "年开始跑步,至今为止跑了" + total + "公里"); } }
package com.jx.spring02; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main1 { private static ApplicationContext context; static{ context = new ClassPathXmlApplicationContext("spring-02.xml"); } public static void main(String[] args) { Runner run = (Runner) context.getBean("runner"); run.setKm(10); run.setName("张三"); run.run(); run.sayMessage(2000 , 3000); } }
<?xml version="1.0" encoding="UTF-8"?> <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-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd "> <bean id="runner" class="com.jx.spring02.Runner"></bean> <bean id="calc" class="com.jx.spring02.Calc"/> <!-- 定义配置 --> <aop:config proxy-target-class="true"> <!-- 定义一个切面,来提醒runner在跑步之前进行热身,跑步之后进行放松 ,通过前后通知的形式 , 并且记录开始跑步时间和结束跑步时间通过环绕通知的形式--> <aop:aspect ref="calc"> <aop:pointcut expression="execution(* com.jx.spring02.Runner.run(..))" id="pointcut1"/> <!--连接通知方法与切点 --> <aop:before method="before" pointcut-ref="pointcut1"/> <aop:after method="after" pointcut-ref="pointcut1"/> <aop:around method="around" pointcut-ref="pointcut1"/> <aop:pointcut expression="execution(* com.jx.spring02.Runner.sayMessage(..)) and args(year,total)" id="pointcut2"/> <aop:before method="params" pointcut-ref="pointcut2" arg-names="year,total"/> </aop:config> </beans>
引入
定义一个类和接口没有任何方法与字段 来通过spring aop实现 可以调用其他接口的方法package com.jx.spring03; public interface ArithmeticCalculator { }
public class ArithmeticCalculatorImpl implements ArithmeticCalculator { }
接口一获取最大的值
package com.jx.spring03; public interface MaxCalculator { double max(double a,double b); }
package com.jx.spring03; public class MaxCalculatorImpl implements MaxCalculator { @Override public double max(double a, double b) { double result = a<=b?b:a; System.out.println("max("+a+","+b+")="+result); return result; } }
接口二获取最小的值
package com.jx.spring03; public interface MinCalculator { double min(double a,double b); }
package com.jx.spring03; public class MinCalculatorImpl implements MinCalculator { @Override public double min(double a, double b) { double result = a<=b?a:b; System.out.println("min("+a+","+b+")="+result); return result; } }
定义一个切面
package com.jx.spring03; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.DeclareParents; /** * 定义一个切面 */ @Aspect public class CalculatorIntroduction { @DeclareParents(value="com.jx.spring03.ArithmeticCalculatorImpl", defaultImpl=MaxCalculatorImpl.class) public MaxCalculator maxCalculator; @DeclareParents(value="com.jx.spring03.ArithmeticCalculatorImpl", defaultImpl=MinCalculatorImpl.class) public MinCalculator minCalculator; }
测试类
package com.jx.spring03; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main2 { private static ApplicationContext context; static{ context = new ClassPathXmlApplicationContext("spring-03.xml"); } public static void main(String[] args) { ArithmeticCalculator ac = (ArithmeticCalculator)context.getBean("arithmeticCalculator"); MinCalculator min = (MinCalculator)ac; min.min(2.3,4.5); MaxCalculator max = (MaxCalculator)ac; max.max(3, 5); } }
spring配置文件
<?xml version="1.0" encoding="UTF-8"?> <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-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd "> <!-- 开启注解 --> <context:annotation-config/> <aop:aspectj-autoproxy/> <bean class="com.jx.spring03.CalculatorIntroduction"></bean> <bean id="arithmeticCalculator" class="com.jx.spring03.ArithmeticCalculatorImpl" /> </beans>
相关文章推荐
- [置顶] redis3.2 学习记录 springmvc +jredis +redis 整合
- SpringBoot学习:(二)使用logback进行日志记录
- jqGrid分页技术学习(五)spring jdbc 通用DAO——修改一条记录
- springBoot 学习记录(一)
- Spring-Security (学习记录五)--配置登录时,密码采用md5加密,以及获取登录信息属性监听同步自己想要的登录信息
- 【Spring揭秘】------ 第四章学习 Spring的IoC容器之BeanFactory 02
- 记录我的Spring学习过程,大神勿看
- JavaWeb学习笔记-spring-02-ioc-BeanFactory&ApplicationContext
- 学习Spring源码记录(一)
- 我的Spring学习记录(四)
- spring4.1+hibernate4.3整合学习 问题记录1
- Spring学习记录-AOP
- Spring-Security (学习记录二)--修改为自己的登录页面
- Spring 学习记录 冷兵器时代的故事
- Spring 学习笔记02
- SpringDataJPA学习记录(二)--增删改查
- SPRING-BOOT入门学习记录
- spring boot 学习(六)spring boot 各版本中使用 log4j2 记录日志
- MongoDB学习记录02-初识MongoDB
- Spring Boot学习记录(二)--thymeleaf模板