什么是AOP
AOP在Spring中的作用
package com.zsm.service;
public interface UserService {
public void add();
public void delete();
public void update();
public void select();
}
package com.zsm.service;
public class UserServiceImpl implements UserService{
@Override
public void add() {
}
@Override
public void delete() {
}
@Override
public void update() {
}
@Override
public void select() {
}
}
package com.zsm.log;
import org.springframework.aop.AfterReturningAdvice;
import java.lang.reflect.Method;
public class AfterLog implements AfterReturningAdvice {
@Override
public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
System.out.println("执行了"+method.getName()+"方法,返回结果为:"+returnValue);
}
}
package com.zsm.log;
import org.springframework.aop.MethodBeforeAdvice;
import java.lang.reflect.Method;
public class Log implements MethodBeforeAdvice {
@Override
public void before(Method method, Object[] args, Object target) throws Throwable {
System.out.println(target.getClass().getName()+"的"+method.getName()+"被执行了");
}
}
<?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"
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.xsd">
<!-- 注册bean-->
<bean id="UserService" class="com.zsm.service.UserServiceImpl"/>
<bean id="log" class="com.zsm.log.Log"/>
<bean id="afterlog" class="com.zsm.log.AfterLog"/>
<!-- 方式一:执行原生spring api接口 -->
<!-- 配置aop:需要导入aop的约束 -->
<aop:config>
<!-- 切入点:expression:表达式 , execution(要执行的位置!******)-->
<aop:pointcut id="pointcut" expression="execution(* com.zsm.service.UserServiceImpl.*(..))"/>
<!-- 执行环绕增加!-->
<aop:advisor advice-ref="log" pointcut-ref="pointcut"/>
<aop:advisor advice-ref="afterlog" pointcut-ref="pointcut"/>
</aop:config>
</beans>
import com.zsm.service.UserService;
import com.zsm.service.UserServiceImpl;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
@Test
public void Test01(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//动态代理 代理的是接口
UserService userService = (UserService) context.getBean("UserService");
userService.add();
}
}