Spring AOP名词应用
cross cutting corner :横切关注点。代表要在业务方法前后执行的一些业务逻辑(如权限验证、日志处理)
advice:对横切关注点的具体实现叫advice(通知).
Aspect:切面,代表advice的模块化(其实就是advice所在类)
Pointcut:切入点,其实就是在哪些类的哪些方法前后调用advice.
joinpoint:连接点,即方法调用。【有切入点】
weave:织入,就是将advice如何放到目标对象上。
target:即advice所应用的对象。
advice:对横切关注点的具体实现叫advice(通知).
Aspect:切面,代表advice的模块化(其实就是advice所在类)
Pointcut:切入点,其实就是在哪些类的哪些方法前后调用advice.
joinpoint:连接点,即方法调用。【有切入点】
weave:织入,就是将advice如何放到目标对象上。
target:即advice所应用的对象。
AOP切面的定义
//AOP动态代理切面的定义
public class UserHandler {
public void before(){
System.out.println("------------方法开始执行-------------");
}
public void after(){
System.out.println("-------------方法执行完毕-----------");
}
}
applicationContext.xml文件中定义切入点及切面
<!-- 定义切入点及切面 -->
<bean id="userDao" class="com.mingde.dao.UserDao"/>
<bean id="userHandler" class="com.mingde.handler.UserHandler" ></bean>
<aop:config>
<!-- 配置切入点 (在任意dao类任意方法中切入代码) -->
<aop:pointcut expression="execution(* com.mingde.dao.*.*(..))" id="pointcut1"/>
<!-- 配置切面 -->
<aop:aspect ref="userHandler">
<!-- 配置在任何dao方法调用前执行userHandler类的before()方法 -->
<aop:before method="before" pointcut-ref="pointcut1" />
<!-- 配置在任何dao方法调用后执行userHandler类的after()方法 -->
<aop:after-returning method="after" pointcut-ref="pointcut1" />
</aop:aspect>
</aop:config>
测试AOP动态代理功能
@org.junit.Test
public void test2() {
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
IUserDao userDao=(IUserDao) ac.getBean("userDao");
userDao.delete(12);
}