注意:在这种方法定义中,切入点的方法是不被执行的,它存在的目的仅仅是为了重用切入点,即Advice中通过方法名引用这个切人点。
切面中为切入点(Pointcut)和通知(Advice)。
package com.iteedu.spring; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; @Aspect public class SecurityHandler { @Pointcut("execution(* add*(..)) || execution(* del*(..))") private void allAddMethod(){}; @Before("allAddMethod()") private void checkSecurity() { System.out.println("----------checkSecurity()---------------"); } }
allAddMethod()方法就是一个切入点,名称就是allAddMethod。此方法不能有返回值和参数,该方法只是一个标识。注解Pointcut的内容是一个表达式,定义本切入点代表的那些方法(连接点Joinpoint),用于向这些方法传入通知。
checkSecurity()为实际的方法,这里是要植入的通知。注解标识了在哪个切入点何处织入此方法。
<?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:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> <!--启用AspectJ对Annotation的支持--> <aop:aspectj-autoproxy/> <!-- Aspect类 --> <bean id="securityHandler" class="com.iteedu.spring.SecurityHandler"/> <!-- 目标对象 --> <bean id="userManager" class="com. iteedu.spring.UserManagerImpl"/> </beans>
接口
package com.iteedu.spring; public interface IUserManager { public void addUser(String username, String password); public void deleteUser(int id); public void modifyUser(int id, String username, String password); public String findUserById(int id); }
实现
package com.iteedu.spring; public class UserManagerImpl implements IUserManager { public void addUser(String username, String password) { System.out.println("-------addUser()----------"); } public void deleteUser(int id) { System.out.println("-------deleteUser()----------"); } public String findUserById(int id) { System.out.println("-------findUserById()----------"); return null; } public void modifyUser(int id, String username, String password) { System.out.println("-------modifyUser()----------"); } }
BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml"); UserManager userManager = (UserManager)factory.getBean("userManager"); userManager.addUser("张三", "123");