1,源码

Application.java

package com.bf;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import java.util.List;
import java.util.Date;
import java.util.Iterator; import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; @SuppressWarnings("unused")
public class Application { public static void main(String[] args) {
try{
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); SpitterDAO dao = (SpitterDAO)context.getBean("dao"); dao.SaveEvent();
}catch (Throwable ex) {
throw new ExceptionInInitializerError(ex);
}
}
}

Audience.java

package com.bf;

public class Audience {
public void takeSeats()
{
System.out.println("sit down"); }
}

ApplicationContext.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: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-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="" />
<property name="username" value="" />
<property name="password" value="" />
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="dataSource" />
</bean>
<bean id="dao" class="com.bf.JDBCDAO" autowire="byName">
<property name="jdbcTemplate" ref="jdbcTemplate" />
</bean>
<bean id="Audience" class="com.bf.Audience" autowire="byName">
</bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.Oracle9Dialect
</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>Event.hbm.xml</value>
</list>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean> <aop:config>
<aop:aspect ref="Audience">
<aop:before pointcut="execution(* com.bf.SpitterDAO.SaveEvent(..))" method="takeSeats" />
</aop:aspect>
</aop:config>
</beans>

需要的Jar列表

spring-aop-4.2.3.RELEASE.jar
spring-beans-4.2.3.RELEASE.jar
spring-context-4.2.3.RELEASE.jar"
spring-context-support-4.2.3.RELEASE.jar
spring-core-4.2.3.RELEASE.jar
spring-expression-4.2.3.RELEASE.jar
commons-logging.jar
spring-jdbc-4.2.3.RELEASE.jar"
spring-tx-4.2.3.RELEASE.jar
commons-dbcp-1.2.jar
commons-pool-1.2.jar
ojdbc14.jar
commons-collections-3.1.jar
antlr-2.7.7.jar
classmate-1.3.0.jar
dom4j-1.6.1.jar
geronimo-jta_1.1_spec-1.1.1.jar
hibernate-commons-annotations-5.0.1.Final.jar
hibernate-core-5.1.0.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
jandex-2.0.0.Final.jar
javassist-3.20.0-GA.jar
jboss-logging-3.3.0.Final.jar
spring-orm-4.2.3.RELEASE.jar
aopalliance.jar
spring-aspects-4.2.3.RELEASE.jar
aspectj-weaver.jar

演示在SaveEvent前调Audience.takeSeats().

注意SpitterDAO dao = (SpitterDAO)context.getBean("dao"); 这里用的是接口而不是实现类。

也可以如下配置切面

    <aop:config>
<aop:aspect ref="Audience">
<aop:pointcut id="seat" expression="execution(* com.bf.SpitterDAO.SaveEvent(..))" ></aop:pointcut>
<aop:before pointcut-ref="seat" method="takeSeats" />
</aop:aspect>
</aop:config>

2,基本概念

切面Aspect

通知和切点的结合,两者共同定义了关于切面的全部内容。

通知Advice

定义了切面的“什么”和“何时”。切面的“工作”被称为通知。

连接点JoinPoint

连接点是Application运行过程中能够插入切面的一个点。这个点可以是方法调用时、抛出异常时、甚至修改一个字段时。

切点Pointcut

定义了切面的“何处”,切点的定义会匹配通知要织入的一个或多个连接点。Pointcuts pick out join points.

参考资料:http://www.eclipse.org/aspectj/doc/released/progguide/language-joinPoints.html

AOP 入门的更多相关文章

  1. (转)使用Spring的注解方式实现AOP入门

    http://blog.csdn.net/yerenyuan_pku/article/details/52865330 首先在Eclipse中新建一个普通的Java Project,名称为spring ...

  2. Java开发学习(十五)----AOP入门案例及其工作流程解析

    一.AOP简介 1.1 什么是AOP AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导开发者如何组织程序结构. OOP(Object Oriented ...

  3. Spring入门(二)— IOC注解、Spring测试、AOP入门

    一.Spring整合Servlet背后的细节 1. 为什么要在web.xml中配置listener <listener> <listener-class>org.springf ...

  4. Spring-Day03-注解注入&AOP入门-作业

    IOC(DI) —— 注解 注解入门: 在applicationContext.xml中引入context约束 打开spring-framework-4.2.4.RELEASE\docs\spring ...

  5. 基于注解的Spring AOP入门、增强Advice实例

    这篇文章简单通过一个例子,介绍几种增强的基本配置,以方便spring框架初学者对aop的代码结构有个清楚的了解认识.首先,spring支持aop编程,支持aspectJ的语法格式来表示切入点,切面,增 ...

  6. Spring @AspectJ 实现AOP 入门例子(转)

    AOP的作用这里就不再作说明了,下面开始讲解一个很简单的入门级例子. 引用一个猴子偷桃,守护者守护果园抓住猴子的小情节. 1.猴子偷桃类(普通类): package com.samter.common ...

  7. 3.AOP入门1

    1.定义1.1基本概念2. 1.定义 1.1基本概念 AOP:aspect object programing面向切面编程 aop编程的要点在于关注点和切入点 关注点:指的是代码中的重复部分,每次实现 ...

  8. Spring AOP入门——概念和注意事项

    AOP什么? AOP在功能方面,它是之前和之后运行一些业务逻辑,一些操作(比方记录日志.或者是推断是否有权限等),这些操作的加入.全然不耦合于原来的业务逻辑.从而对原有业务逻辑全然是透明. 也就是说. ...

  9. Spring 注解式Aop 入门

    首先在spring配置文件中加上 xmlns:aop="http://www.springframework.org/schema/aop" http://www.springfr ...

  10. Spring 3.0 Aop 入门

    关于Aop的原理,动态代理,反射,之类的底层java技术网上搜一堆一堆的..我就不多说了,主要说在spring上使用aop的方法. 首先不得不说一下的就是,spring aop的支持需要外部依赖包: ...

随机推荐

  1. IOS Https适配摸索

    转:http://www.jianshu.com/p/f312a84a944c https封面 在WWDC 2016开发者大会上,苹果宣布了一个最后期限:到2017年1月1日 App Store中的所 ...

  2. Hadoop学习之pig

    首先明确pig是解决什么问题而出现的,pig是为了简化mapreduce编程而设计的,并且有自己的一套脚本语言.其基本由命令和操作符来定义的,如load,store,它的功能很明确,用来大规模处理数据 ...

  3. 使用Python往手机发送短信(基于twilio模块)

    官网是https://www.twilio.com twilio的一句话介绍——提供SDK帮你连接世界上所有人,你可以很方便的调用他们提供的接口来给指定手机发短信,打电话. 首先在twilio的官网注 ...

  4. 10.16 正式开发stark组件(一)

    2018-10-16 17:26:44 Django MTV  路由配置里面有 反向解析 参考连接:https://www.cnblogs.com/yuanchenqi/articles/762993 ...

  5. day_6.5 py

    Wireshark的使用  2018-6-5 20:16:05 明天学 03

  6. Django中,ajax检测注册用户信息是否可用?

    ajax检测注册用户信息主体思路 1.在settings.py中配置需要使用的信息 #对static文件进行配置 STATICFILES_DIRS=[ os.path.join(BASE_DIR,'s ...

  7. ado.net EF学习系列----深入理解查询延迟加载技术(转载)

    ado.net EF是微软的一个ORM框架,使用过EF的同学都知道EF有一个延迟加载的技术. 如果你是一个老鸟,你可能了解一些,如果下面的学习过程中哪些方面讲解的不对,欢迎批评指教.如果一个菜鸟,那我 ...

  8. LeetCode 4 - 两个排序数组的中位数 - [分治]

    题目链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays/description/ 给定两个大小为 m 和 n 的有序数组 n ...

  9. take a cpu core offline

    [root@vrouter1 ~]# cat /sys/devices/system/cpu/online -,,- [root@vrouter1 ~]# cat /sys/devices/syste ...

  10. js生成唯一的id

    1.生成[0,1)的随机数的Math.random Math.random().toString().replace(".", "");// 生成唯一的id 2 ...