一、使用Spring来定义POJO切面
(1)定义一个接口:
public interface IMemberService {
public boolean insert(Member vo);
}
(2)定义一个接口的实现类:
@Service
public class MemberServiceImpl implements IMemberService {
@Override
public boolean insert(Member vo) {
System.out.println("数据层调用 member = " + vo);
return false;
}
}
(3)定义一个Member类:
public class Member {
private String id;
private String name;
public String getName() {
return name;
}
public String getId() {
return id;
}
public void setName(String name) {
this.name = name;
}
public void setId(String id) {
this.id = id;
}
@Override
public String toString() {
return "编号:" + this.id + ",姓名:" + this.name;
}
}
(4)定义一个功能辅助类:
@Component
public class ServiceAspect {
public void serviceBefore() {
System.out.println("【aop切面】负责执行日志记录操作");
}
public void serviceAfter() {
System.out.println("【aop切面】负责执行事务处理操作");
}
}
(5)xml文件配置:
<?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:context="http://www.springframework.org/schema/context"
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/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<context:annotation-config/>
<context:component-scan base-package="cn.libin"/>
<aop:config>
<!-- 首先定义程序的切入点 -->
<aop:pointcut id="pointcut" expression="execution(* cn.libin.service.impl.*.*(..)))"/>
<!--定义要使用的面向切面的处理类 -->
<aop:aspect ref="serviceAspect">
<aop:before method="serviceBefore" pointcut="execution(* cn.libin..*.*(..)))"/>
<aop:after method="serviceAfter" pointcut="execution(* cn.libin..*.*(..)))"/>
</aop:aspect>
</aop:config>
</beans>
(6)测试类:
public class TestMemberService {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
IMemberService member = context.getBean("memberServiceImpl", IMemberService.class);
Member vo = new Member();
vo.setId("001");
vo.setName("张三");
System.out.println(member.insert(vo));
}
}
(7)输出结果
【aop切面】负责执行日志记录操作
数据层调用 member = 编号:001,姓名:张三
【aop切面】负责执行事务处理操作
false
二、通过AspectJ提供的注解实现
(1)定义一个接口:
public interface IMemberService {
public boolean insert(Member vo);
}
(2)定义一个接口的实现类:
@Service
public class MemberServiceImpl implements IMemberService {
@Override
public boolean insert(Member vo) {
System.out.println("数据层调用 member = " + vo);
return false;
}
}
(3)定义一个Member类:
public class Member {
private String id;
private String name;
public String getName() {
return name;
}
public String getId() {
return id;
}
public void setName(String name) {
this.name = name;
}
public void setId(String id) {
this.id = id;
}
@Override
public String toString() {
return "编号:" + this.id + ",姓名:" + this.name;
}
}
(4)定义一个功能辅助类:
@Aspect
@Component
public class ServiceAspect {
@Before(value = "execution(* cn.libin..*.*(..))")
public void serviceBefore() {
System.out.println("【aop切面】负责执行日志记录操作");
}
@After(value = "execution(* cn.libin..*.*(..))")
public void serviceAfter() {
System.out.println("【aop切面】负责执行事务处理操作");
}
}
(5)配置文件
<?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:context="http://www.springframework.org/schema/context"
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/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<context:annotation-config/>
<context:component-scan base-package="cn.libin"/>
<aop:aspectj-autoproxy/>
</beans>
(6)测试类:
public class TestMemberService {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
IMemberService member = context.getBean("memberServiceImpl", IMemberService.class);
Member vo = new Member();
vo.setId("001");
vo.setName("张三");
System.out.println(member.insert(vo));
}
}
(7)输出结果
【aop切面】负责执行日志记录操作
数据层调用 member = 编号:001,姓名:张三
【aop切面】负责执行事务处理操作
false