①
public interface Cacl {
int add(int i,int j);
int sub(int i,int j);
int mul(int i,int j);
int div(int i,int j);
}
②
import org.springframework.stereotype.Component;
@Component
public class CaclImpl implements Cacl {
@Override
public int add(int i, int j) {
// TODO Auto-generated method stub
int result = i+j;
return result;
}
@Override
public int sub(int i, int j) {
// TODO Auto-generated method stub
int result = i-j;
return result;
}
@Override
public int mul(int i, int j) {
// TODO Auto-generated method stub
int result = i*j;
return result;
}
@Override
public int div(int i, int j) {
// TODO Auto-generated method stub
int result = i/j;
return result;
}
}
③
import java.util.Arrays;
import java.util.List;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
public class Log {
public void before(JoinPoint joinPoint){
String methodName = joinPoint.getSignature().getName();
List<Object> args = Arrays.asList(joinPoint.getArgs());
System.out.println("before method"+methodName+" begins with "+args);
}
public void after(JoinPoint joinPoint){
String methodName = joinPoint.getSignature().getName();
System.out.println("after method "+methodName+" ends");
}
public void afterReturning(JoinPoint joinPoint,Object result){
String methodName = joinPoint.getSignature().getName();
System.out.println("afterreturning method "+methodName+" ends with "+result);
}
public void afterThrowing(JoinPoint joinPoint,Exception exception){
String methodName = joinPoint.getSignature().getName();
System.out.println("afterthrowing method "+methodName +"occurs by "+exception);
}
public Object around(ProceedingJoinPoint pjp){
Object result = null;
String methodName = pjp.getSignature().getName();
try {
System.out.println(" around method "+methodName +" begins with "+Arrays.asList(pjp.getArgs()));
result = pjp.proceed();
System.out.println("around method "+methodName +" ends ");
} catch (Throwable e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
}
这样代码中就没有注解了
④
<?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.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<!-- 配置bean -->
<bean id="cacl" class="com.atguigu.spring.aop.impl.xml.CaclImpl"></bean>
<!-- 配置切面的bean -->
<bean id="logAspect" class="com.atguigu.spring.aop.impl.xml.Log"></bean>
<!-- 配置AOP -->
<aop:config>
<!-- 配置切点表达式 -->
<aop:pointcut expression="execution(* com.atguigu.spring.aop.impl.xml.Cacl.*(int,int))" id="pointcut"/>
<!-- 配置切面及通知 -->
<aop:aspect ref="logAspect">
<aop:before method="before" pointcut-ref="pointcut"/>
<aop:after method="after" pointcut-ref="pointcut"/>
<aop:after-returning method="afterReturning" pointcut-ref="pointcut" returning="result"/>
<aop:after-throwing method="afterThrowing" pointcut-ref="pointcut" throwing="exception"/>
<aop:around method="around" pointcut-ref="pointcut"/>
</aop:aspect>
</aop:config>
</beans>
⑤
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-xml.xml");
Cacl cacl = (Cacl) ctx.getBean("cacl");
System.out.println(cacl.add(2,3));
System.out.println(cacl.div(10,1));
}
}
⑥输出结果
log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. before methodadd begins with [2, 3] around method add begins with [2, 3] after method add ends afterreturning method add ends with 5 around method add ends 5 before methoddiv begins with [10, 1] around method div begins with [10, 1] after method div ends afterreturning method div ends with 10 around method div ends 10
来源:https://www.cnblogs.com/sdnu-zhang/p/8528154.html