AOP(Aspect Oriented Programming),意为:面向切面编程。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
通知的类型
Spring 可以提供以下通知工作:
实现步骤:
1.导入jar
aopaliance.jar
aspectjweaver.jar
2.编写(以前置通知为例)
//接口
public interface IStudentDao {
public void addStudent(Student student);
}
//接口的实现类
public class StudentDaoImpl implements IStudentDao{
@Override
public void addStudent(Student student) {
// TODO Auto-generated method stub
System.out.println("增加学生");
}
}
//通过继承MethodBeforeAdvice实现前置通知
public class LogBefore implements MethodBeforeAdvice{
@Override
public void before(Method method, Object[] args, Object target) throws Throwable {
// TODO Auto-generated method stub
System.out.println("前置通知...");
}
}
3.配置
在配置文件中加入
xmlns:aop=“http://www.springframework.org/schema/aop”
<!-- 前置通知 -->
<!-- addStudent()所在方法 -->
<bean id="studentDaoImpl" class="org.wuchuan.dao.impl.StudentDaoImpl">
</bean>
<!-- LogBefore所在一方 -->
<bean id="logBefore" class="org.wuchuan.aop.LogBefore">
</bean>
<!-- 连接线 -->
<aop:config>
<!-- 配置切入点(在哪里执行通知 ) -->
<aop:pointcut expression="execution(public void org.wuchuan.dao.impl.StudentDaoImpl.addStudent(org.wuchuan.entity.Student))" id="poioncut"/>
<!-- LogBefore(通知)所在一方 -->
<aop:advisor advice-ref="logBefore" pointcut-ref="poioncut"/>
</aop:config>
4.测试
//测试方法
public static void testAop() {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml") ;
IStudentDao studentService = (IStudentDao)context.getBean("studentDaoImpl") ;
Student student = new Student();
student.setStuAge(23);
student.setStuName("zs");
studentService.addStudent(student);
}
结果