Spring: Use Spring AOP to separate log input and method. spring AOP
Log output is a common function. The traditional method is to write the output statement inside the method body. When calling this method, use the input statement output information to record the execution of the method!
1. First write a common class:
Package com. importnew; public class Common {public void execute (String username, String password) {System. out. println ("------------------ execute () method ----------------");}}
2. Write a partition class for adding the legality checksum and log:
Package com. importnew; import org. aspectj. lang. JoinPoint;
Public class Check {public void checkValidity () {System. out. println ("------------------ Verify validity ----------------");} public void addLog (JoinPoint j) {System. out. println ("------------------ add log ----------------"); Object obj [] = j. getArgs (); for (Object o: obj) {System. out. println (o);} System. out. println ("======== checkSecurity =" + j. getSignature (). getName (); // This is the method name }}
3. Configure AOP in XML format: (pay attention to the content of the Red Flag)
<?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:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" 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/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <bean id="common" class="com.importnew.Common"/> <bean id="check" class="com.importnew.Check"/> <aop:config> <aop:aspect id="myAop" ref="check"> <aop:pointcut id="target" expression="execution(* com.importnew.Common.execute(..))"/> <aop:before method="checkValidity" pointcut-ref="target"/> <aop:after method="addLog" pointcut-ref="target"/> </aop:aspect> </aop:config> </beans>
Note: aop pointcut expression (*)
Execution (method Modifier + complete class name returned value + method name (method parameter ))
For example:
A. execution (public void * (..): all methods whose return values are public void will be intercepted.
B. execution (public void day6.com. beans. PersonService. * (...): all methods that return values of public void in day6.com. beans. PersonService will be intercepted.
C. execution (public void day6.com. beans. personService. save (java. lang. string ...)): day6.com. beans. the save method of the first parameter type in the PersonService class is String.
D. execution (public void save (...): indicates that the save method in all classes will be intercepted.
E. execution (public void day6.com. service... * (...): indicates that classes in the day6.com. service package and classes in the sub-package will be intercepted by all public void methods.
F, execution (public! Void day6.com. service... * (...): indicates the classes in the day6.com. service package and the classes in the sub-package. All methods that are public and not return the void type will be intercepted.
4. Write a test:
package test;import org.springframework.beans.factory.BeanFactory;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.importnew.Common;public class Client { public static void main(String[] args) { BeanFactory factory=new ClassPathXmlApplicationContext("applicationContext.xml"); Common c=(Common) factory.getBean("common"); c.execute("fuckyou","fuckme"); }}
Note:
Three packages need to be added: spring-aop.jar, aspectjrt. jar, aspectjweaver. jar; otherwise, an error is reported.
Output result:
------------------ Verify validity when execute () method ------------------------------------ add log -------------- fuckyoufuckme ===== checkSecurity = execute
/// End