文章目录
Spring Aop-:aspectj 的就基本开发
1. 注解方式
1.导入所需要的jar 包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.imooc.spring_aspectj</groupId>
<artifactId>spring_aspectj</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.0.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
2.导入AOP 依赖
<?xml version="1.0" encoding="UTF-8"?>
<beans xsi:schemaLocation=" http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans">
<!--开启aspectj 的注解开发-->
<aop:aspectj-autoproxy/>
</beans>
3. 创建实体目标类 并在springxml中注册
package com.imooc.aspectj.Demo1;
public class ProductDao {
public void save() {
System.out.println ( "查询" );
}
public void update() {
System.out.println ( "修改" );
}
public void delect() {
System.out.println ( "删除" );
}
public void add() {
System.out.println ( "增加" );
}
}
###4. 创建切面类 并在springxml中注册
package com.imooc.aspectj.Demo1;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
/*切面类*/
/*声明为切面类*/
@Aspect
public class MyAspectAnno {
/*设置前置通知*/
@Before(value = "execution(* com.imooc.aspectj.Demo1.ProductDao.*(..))")
public void before() {
System.out.println ( "前置通知" );
}
}
4.2 后置通知拓展
@AfterReturning(value = "execution(* com.imooc.aspectj.Demo1.ProductDao.update(..))",returning = "result")
public void after( Object result ) {
System.out.println ( "后置通知" + result);
}
4.3 环绕通知拓展
@Around ( value = "execution(* com.imooc.aspectj.Demo1.ProductDao.delect(..))" )
public Object aroud(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
System.out.println ("环绕前通知");
/*如果不调用这个方法 目标方法会被拦截*/
Object proceed = proceedingJoinPoint.proceed ();
System.out.println ("环绕后通知");
return proceed ;
}
5创建测试类
package com.imooc.aspectj.Demo1;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.annotation.Resource;
import javax.naming.Name;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContent.xml")
public class SpringDemo {
@Resource(name = "productDao")
private ProductDao productDao;
@Test
public void test() {
productDao.add ();
productDao.delect ();
productDao.update ();
productDao.save ();
}
}
2.Xml方式
1.导入所需jar 包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.imooc.spring_aspectj</groupId>
<artifactId>spring_aspectj</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.0.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
###2.创建切面类
package com.imooc.Demo2;
/*Xml 方式通知*/
public class MyAspectXml {
public void befor() {
System.out.println("前置通知");
}
public void afterReturing(Object o) {
System.out.println("后置增强" + o);
}
}
3.创建接口
package com.imooc.Demo2;
public interface CustoMDao {
public void add();
public void update();
public void save();
public void delect();
public void findAll();
}
4.创建实现类
package com.imooc.Demo2;
public class CustomDaoImpl implements CustoMDao{
public void add() {
System.out.println("添加");
}
public void update() {
System.out.println("修改");
}
public void save() {
System.out.println("查询");
}
public void delect() {
System.out.println("删除");
}
public void findAll() {
System.out.println("查询所有");
}
}
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: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/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--XML方式 配置AspectJ-->
<!--配置目标类-->
<bean id="custoMDao" class="com.imooc.Demo2.CustomDaoImpl"></bean>
<!--切面类的配置-->
<bean id="MyAspecyXml" class="com.imooc.Demo2.MyAspectXml"></bean>
<!---->
<aop:config>
<!--切入点-->
<aop:pointcut id="pointcut" expression="execution(* com.imooc.Demo2.CustoMDao.save(..))"/>
<aop:pointcut id="poincut2" expression="execution(* com.imooc.Demo2.CustoMDao.*(..))"/>
<!--切面-->
<aop:aspect ref="MyAspecyXml">
<aop:before method="befor" pointcut-ref="pointcut"></aop:before>
<aop:after-returning method="afterReturing" pointcut-ref="poincut2" returning="o"></aop:after-returning>
</aop:aspect>
</aop:config>
</beans>
6.创建测试类
package com.imooc.Demo2;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.annotation.Resource;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(value = "classpath:Aspectj.xml")
public class SpringDemo2 {
@Resource(name = "custoMDao")
private CustoMDao customDao;
@Test
public void Demo1() {
customDao.add();
customDao.delect();
customDao.update();
customDao.save();
customDao.findAll();
}
}