Spring AOP defines afterthrowing to add processing instance analysis
•
Java
This article gives an example of how spring AOP defines afterthrowing addition processing. Share with you for your reference, as follows:
One configuration
<?xml version="1.0" encoding="GBK"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd"> <!-- 指定自动搜索Bean组件、自动搜索切面类 --> <context:component-scan base-package="org.crazyit.app.service,org.crazyit.app.aspect"> <context:include-filter type="annotation" expression="org.aspectj.lang.annotation.Aspect" /> </context:component-scan> <!-- 启动@AspectJ支持 --> <aop:aspectj-autoproxy /> </beans>
Two section class
package org.crazyit.app.aspect; import org.aspectj.lang.annotation.*; import org.aspectj.lang.*; // 定义一个切面 @Aspect public class RepairAspect { // 匹配org.crazyit.app.service.impl包下所有类的、 // 所有方法的执行作为切入点 @AfterThrowing(throwing="ex",pointcut="execution(* org.crazyit.app.service.impl.*.*(..))") // 声明ex时指定的类型会限制目标方法必须抛出指定类型的异常 // 此处将ex的类型声明为Throwable,意味着对目标方法抛出的异常不加限制 public void doRecoveryActions(Throwable ex) { System.out.println("目标方法中抛出的异常:" + ex); System.out.println("模拟Advice对异常的修复..."); } }
Three interfaces
Hello
package org.crazyit.app.service; public interface Hello { // 定义一个简单方法,模拟应用中的业务逻辑方法 void foo(); // 定义一个addUser()方法,模拟应用中的添加用户的方法 int addUser(String name,String pass); }
World
package org.crazyit.app.service; public interface World { // 定义一个简单方法,模拟应用中的业务逻辑方法 public void bar(); }
Four implementation classes
HelloImpl
package org.crazyit.app.service.impl; import org.springframework.stereotype.Component; import org.crazyit.app.service.*; @Component("hello") public class HelloImpl implements Hello { // 定义一个简单方法,模拟应用中的业务逻辑方法 public void foo() { System.out.println("执行Hello组件的foo()方法"); } // 定义一个addUser()方法,模拟应用中的添加用户的方法 public int addUser(String name,String pass) { System.out.println("执行Hello组件的addUser添加用户:" + name); if(name.length() < 3 || name.length() > 10) { throw new IllegalArgumentException("name参数的长度必须大于3,小于10!"); } return 20; } }
WorldImpl
package org.crazyit.app.service.impl; import org.springframework.stereotype.Component; import org.crazyit.app.service.*; @Component("world") public class WorldImpl implements World { // 定义一个简单方法,模拟应用中的业务逻辑方法 public void bar() { System.out.println("执行World组件的bar()方法"); } }
Five test categories
package lee; import org.springframework.context.*; import org.springframework.context.support.*; import org.crazyit.app.service.*; public class BeanTest { public static void main(String[] args) { // 创建spring容器 ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); Hello hello = ctx.getBean("hello",Hello.class); hello.foo(); hello.addUser("悟空","7788"); World world = ctx.getBean("world",World.class); world.bar(); } }
Vi. test results
Readers interested in more Java related content can view the topics on this site: introduction and advanced tutorial of spring framework, tutorial of Java data structure and algorithm, summary of Java DOM node operation skills, summary of java file and directory operation skills, and summary of Java cache operation skills
I hope this article will be helpful to you in Java programming.
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码