首先有user接口及其实现类userimple
public interface User {
public void addUser(String name,String password);
public void delUser(String id);
public void updateUser(String id);
public User getUser(int id);
}
public class UserImp implements User {
@Override
public void addUser(String name, String password) {
System.out.println("----------addUser----------");
}
@Override
public void delUser(String id) {
System.out.println("----------delUser----------");
}
@Override
public void updateUser(String id) {
System.out.println("----------updateUser----------");
}
@Override
public User getUser(int id) {
System.out.println("----------getUser----------");
return null;
}
}
再是实现securityHandler,配置相应的aspect和pointcut
@Aspect
public class SecurityHandler2 {
/**
* pointcut
* 参数说明:*,匹配所有返回类型(有返回类型,无返回类型);add*,匹配所有以add开头的方法;..,0个或多个参数
* ||可实现多个表达式同时使用
*/
@Pointcut("execution(* add*(..)) || (execution(* del*(..))) || (execution(* get*(..)))")
private void allMethods() {
}
/**
* Advice
* 定义在哪些方法上应用此方法验证
*/
@Before("allMethods()")
public void check() {
System.out.println("-------------Check Something before------------");
}
@After("allMethods()")
public void check1(){
System.out.println("-----Check Something after----");
}
}
最后在applicationContext.xml中配置securityhandler及user的实现类
<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-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<aop:aspectj-autoproxy />
<bean id="securityHander" class="com.spg.testSpring.example.imp.SecurityHandler" />
<bean id="user" class="com.spg.testSpring.example.imp.UserImp" />
</beans>
注意必须开启aop对annotation的支持,即:
<aop:aspectj-autoproxy />
<pre>
最后在客户端调用
public static void main(String[] args) {
BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User) factory.getBean("user");
user.addUser("aa", "bb");
user.delUser("12");
user.getUser(1);
}
由此可实现进行某些操作的之前或之后进行其他的操作。
最后结果:
-------------Check Something before------------
----------addUser----------
-----Check Something after----
-------------Check Something before------------
----------delUser----------
-----Check Something after----
-------------Check Something before------------
----------getUser----------
-----Check Something after----
ps:
如果用jdk1.7进行编译的时候会出错,具体原因不清楚。换1.6运行就没问题。
因为第一次学习,中间出了很多莫名其妙的错误,最后总结出的解决方法,如果确认代码没问题的,把自己导入的关于aop的包全部删除,再重新导入,确保没有重复的包。这是我自己导入的包,当然可能还有多余的包。