【文件属性】:
文件名称:Spring AOP配置源码
文件大小:364KB
文件格式:ZIP
更新时间:2015-05-28 08:51:54
aop spring
package com.spring.dao;
import org.springframework.stereotype.Component;
@Component("userDAO")
public class UserDao {
public void say() {
System.out.println("say method is called");
}
public void smile() {
System.out.println("smile method is called");
}
public void cry() {
System.out.println("cry method is called");
}
public void jump() {
System.out.println("jump method is called");
}
}
注意观察包名。@Component("userDAO")等价于在spring配置文件中定义一个
编写Service
package com.spring.service;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import com.spring.dao.UserDao;
@Component("userService")
public class UserService {
@Resource(name="userDAO")
private UserDao dao;
public UserDao getDao() {
return dao;
}
public void setDao(UserDao dao) {
this.dao = dao;
}
public void say() {
dao.say();
}
public void smile() {
dao.smile();
}
public void cry() {
dao.cry();
}
public void jump() {
dao.jump();
}
}
注意观察包名。@Component("userService")等价于在spring配置文件中定义一个 @Resource(name="userDAO")将userDA注入进来
写一个拦截器的类
package com.spring.aop;
import org.springframework.stereotype.Component;
@Component("logIntercepter")
public class LogIntercepter {
public void before(){
System.out.println("----------before-------------");
}
public void after(){
System.out.println("----------after-------------");
}
public void exception(){
System.out.println("----------exception-------------");
}
public void around(){
System.out.println("----------exception-------------");
}
}
注意观察包名。@Component("logIntercepter")等价于在spring配置文件中定义一个
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
-->
两行为开启spring的注解配置
引入具体的AOP操作类
声明一个切入点,注意execution表达式的写法
aop前置通知
aop后置通知,
aop异常通知
以上结合起来意思就是在调用com.spring.service包或子包下的所有方法之前或之后或抛出异常时依次调用id为logIntercepter的类中的before after exception方法
测试用例
package com.spring.test;
import javax.annotation.Resource;
import org.junit.Test;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import com.spring.service.UserService;
@ContextConfiguration(locations="classpath:applicationContext.xml")
public class SpringTest extends AbstractJUnit4SpringContextTests {
@Resource(name="userService")
private UserService userService;
@Test
public void test1(){
userService.say();
System.out.println();
userService.smile();
System.out.println();
userService.cry();
}
}
此单元测试基于spring的AbstractJUnit4SpringContextTests,你需要添加spring的关于单元测试的支持
在类上标注@ContextConfiguration(locations="classpath:applicationContext.xml")意思是去classpath路径下加载applicationContext.xml
@Resource(name="userService")意思是把userService注入进来
最终输出结果为:
----------before-------------
say method is called
----------after-------------
----------before-------------
smile method is called
----------after-------------
----------before-------------
cry method is called
----------after-------------
【文件预览】:
AOP
----.springBeans(462B)
----src()
--------org.springframework.test-3.0.3.RELEASE.jar(200KB)
--------com()
--------applicationContext.xml(1KB)
----bin()
--------org.springframework.test-3.0.3.RELEASE.jar(200KB)
--------com()
--------applicationContext.xml(1KB)
----.classpath(2KB)
----.settings()
--------org.eclipse.jdt.core.prefs(629B)
----.project(587B)
----lib()