写在前面:
在上一篇博客中,为大家总结了注解方式方式实现AOP编程步骤,原理等,在这篇博客中会为大家总结AOP编程的第二种方式,XML方式,建议小伙伴们如果没有基础的化,将我的上一篇博客仔细看一遍,手敲一遍dem,加深一下理解,这样再来看这篇博客会更容易理解。(附上链接:http://blog.youkuaiyun.com/May_3/article/details/79395196)
XML方式实现AOP编程步骤:
(1)在项目中引入AOP相关Jar
(2)在bean.xml中引入AOP名称空间
(3)在bean.xml中配置AOP(包括切面类,拦截的方法等)
AOP编程简单案例
下面用一个简单的案例,来实现XML方式的AOP编程
切面类代码:
package aopdemo2;
public class AOP {
public void pointcut() {
System.out.println("开始");
}
public void begin() {
System.out.println("开始");
}
public void end() {
System.out.println("结束");
}
}
IUserDao接口代码:
package aopdemo2;
public interface IUserDao {
public void save();
}
UserDao实现类代码:
package aopdemo2;
public class UserDao implements IUserDao{
@Override
public void save() {
System.out.println("-----User:使用XML方式:AOP------");
}
}
没有实现接口的StudentDao代码:
package aopdemo2;
public class StudentDao {
public void save() {
System.out.println("-----Student:使用XML方式:AOP------");
}
}
bean.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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
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.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
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 创建Dao实例 -->
<bean id="userDao" class="aopdemo2.UserDao"></bean>
<bean id="studentDao" class="aopdemo2.StudentDao"></bean>
<!-- 定义切面类 -->
<bean id="aop" class="aopdemo2.AOP"></bean>
<!-- AOP配置 -->
<aop:config>
<aop:pointcut expression="execution(* aopdemo2.*.*(..))" id="pt" />
<aop:aspect ref="aop">
<aop:before method="begin" pointcut-ref="pt" />
<aop:after method="end" pointcut-ref="pt" />
</aop:aspect>
</aop:config>
</beans>
APP测试类:
package aopdemo2;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class APP {
ApplicationContext ac = new ClassPathXmlApplicationContext("aopdemo2/bean.xml");
// 有接口的,使用动态代理
@Test
public void testApp1() {
IUserDao userDao = (IUserDao) ac.getBean("userDao");
userDao.save();
System.out.println(userDao.getClass());
}
// 没有接口的,使用Cglib代理
@Test
public void testApp2() {
StudentDao studentDao = (StudentDao) ac.getBean("studentDao");
studentDao.save();
System.out.println(studentDao.getClass());
}
}
因为只是实现的方式不同,所以与注解方式的结果是一样的。为大家粘贴一下控制台的输出结果:
testApp1结果:
开始
-----User:使用XML方式:AOP------
结束
class com.sun.proxy.$Proxy4testApp1结果:
开始
-----Student:使用XML方式:AOP------
结束
class aopdemo2.StudentDao$$EnhancerByCGLIB$$200d77b7
总结:
其实,xml方式和注解方式,没有相差太多,只是将注解的内容,配置放在了xml文件,相比较来讲,代码量会显得多一些,具体使用哪一种方式,还有看自己的习惯,或者项目的需求。希望我的文章会对你有所帮助。
1435

被折叠的 条评论
为什么被折叠?



