国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Spring(六)AOP切入方式

2019-11-14 23:42:14
字體:
供稿:網(wǎng)友
SPRing(六)AOP切入方式一、接口切入方式

實現(xiàn)類

package com.pb.entity;/** * 實體類 */public class Hello {    private String name;    private String passWord;        public void show(){        System.out.println("姓名 :"+this.getName()+"密碼: "+this.getPassword());    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    }
1.1、前置增強

package com.pb.aop;import java.lang.reflect.Method;import org.springframework.aop.MethodBeforeAdvice;/** * 前置增強的Bean * @author Administrator *實現(xiàn)MethodBeforeAdvice接口 */public class BeforeAdded implements MethodBeforeAdvice {    @Override    public void before(Method arg0, Object[] arg1, Object arg2)            throws Throwable {        System.out.println("====前置增強!=====");    }}

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"    xsi:schemaLocation="http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans-3.1.xsd    http://www.springframework.org/schema/aop     http://www.springframework.org/schema/aop/spring-aop-3.1.xsd"><!--hello Bean  --><bean id="hello" class="com.pb.entity.Hello" p:name="張三" p:password="123qwe"/><!--切入的Bean  --><bean id="beforeAdd" class="com.pb.aop.BeforeAdded"/><!--前置增強切入的Bean  --><aop:config><!-- 切入點 --><aop:pointcut expression="execution(* com.pb.entity.Hello.*(..))" id="myPoint"/><!-- 關(guān)聯(lián)切入類和切入點 --><aop:advisor advice-ref="beforeAdd" pointcut-ref="myPoint"/></aop:config></beans>

1.2、后置增強
package com.pb.aop;import java.lang.reflect.Method;import org.springframework.aop.AfterReturningAdvice;/** * 后置增強 */public class AfterAdded implements AfterReturningAdvice {    @Override    public void afterReturning(Object arg0, Method arg1, Object[] arg2,            Object arg3) throws Throwable {        System.out.println("====這里是后置增強!====");    }}

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"    xsi:schemaLocation="http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans-3.1.xsd    http://www.springframework.org/schema/aop     http://www.springframework.org/schema/aop/spring-aop-3.1.xsd"><!--hello Bean  --><bean id="hello" class="com.pb.entity.Hello" p:name="張三" p:password="123qwe"/><!--切入的Bean  --><!--后置增強切入的Bean  --><bean id="afterAdd" class="com.pb.aop.AfterAdded"/><aop:config><!-- 切入點 --><aop:pointcut expression="execution(* com.pb.entity.Hello.*(..))" id="myPoint"/><!-- 關(guān)聯(lián)后置增強切入類和切入點 --><aop:advisor advice-ref="afterAdd" pointcut-ref="myPoint"/></aop:config><!--后置增強切入的Bean  --></beans>

1.3、異常增強

實體類中增加異常

package com.pb.entity;/** * 實體類 */public class Hello {    private String name;    private String password;        public void show(){        System.out.println("姓名 :"+this.getName()+"密碼: "+this.getPassword());        //加入異常        System.out.println(1/0);    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    }

package com.pb.aop;import java.lang.reflect.Method;import org.springframework.aop.ThrowsAdvice;/** * 異常增強類 * @author Administrator * */public class ThrowingAdded implements ThrowsAdvice {    //第一種寫法    public void afterThrowing(Exception ex){        System.out.println("我是異常增強!,,沒處理異常,有問題就找我");            }    //第二種寫法    public void afterThrowing(Method arg0, Object[] arg1, Object arg2,Exception ex){        System.out.println("我是異常增強!,,沒處理異常,有問題就找我");            }}

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"    xsi:schemaLocation="http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans-3.1.xsd    http://www.springframework.org/schema/aop     http://www.springframework.org/schema/aop/spring-aop-3.1.xsd"><!--hello Bean  --><bean id="hello" class="com.pb.entity.Hello" p:name="張三" p:password="123qwe"/><!--切入的Bean  --><!--異常增強切入的Bean  --><bean id="throwAdd" class="com.pb.aop.ThrowingAdded"/><aop:config><!-- 切入點 --><aop:pointcut expression="execution(* com.pb.entity.Hello.*(..))" id="myPoint"/><!-- 關(guān)聯(lián)異常增強切入類和切入點 --><aop:advisor advice-ref="throwAdd" pointcut-ref="myPoint"/></aop:config></beans>
1.4、以上綜合
<?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"    xsi:schemaLocation="http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans-3.1.xsd    http://www.springframework.org/schema/aop     http://www.springframework.org/schema/aop/spring-aop-3.1.xsd"><!--hello Bean  --><bean id="hello" class="com.pb.entity.Hello" p:name="張三" p:password="123qwe"/><!--切入的Bean  --><!--前置增強切入的Bean  --><bean id="beforeAdd" class="com.pb.aop.BeforeAdded"/><!--后置增強切入的Bean  --><bean id="afterAdd" class="com.pb.aop.AfterAdded"/><!--異常增強切入的Bean  --><bean id="throwAdd" class="com.pb.aop.ThrowingAdded"/><aop:config><!-- 切入點 --><aop:pointcut expression="execution(* com.pb.entity.Hello.*(..))" id="myPoint"/><!-- 關(guān)聯(lián)前置增強切入類和切入點 --><aop:advisor advice-ref="beforeAdd" pointcut-ref="myPoint"/><!-- 關(guān)聯(lián)后置增強切入類和切入點 --><aop:advisor advice-ref="afterAdd" pointcut-ref="myPoint"/><!-- 關(guān)聯(lián)異常增強切入類和切入點 --><aop:advisor advice-ref="throwAdd" pointcut-ref="myPoint"/></aop:config></beans>

1.5、環(huán)繞增強

package com.pb.entity;/** * 實體類 */public class Hello {    private String name;    private String password;        public void show(){        System.out.println("姓名 :"+this.getName()+"密碼: "+this.getPassword());        //加入異常        System.out.println(1/0);    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    }

環(huán)繞增加Bean

package com.pb.aop;import org.aopalliance.intercept.MethodInterceptor;import org.aopalliance.intercept.MethodInvocation;/** * 環(huán)繞增強 * @author Administrator *實現(xiàn)接口MethodIntercepor */public class AroundAdded implements MethodInterceptor {    @Override    public Object invoke(MethodInvocation arg0) throws Throwable {        Object result=null;        try {            System.out.println("環(huán)繞增強開始!");             result=arg0.proceed();            System.out.println("環(huán)繞增強結(jié)束!");        } catch (Exception e) {            System.out.println("環(huán)繞增強異常!");        }finally{            System.out.println("環(huán)繞增強最終增強!");        }                return result;    }}

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"    xsi:schemaLocation="http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans-3.1.xsd    http://www.springframework.org/schema/aop    http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">    <!-- 關(guān)聯(lián)Bean Hello --><bean id="hello" class="com.pb.entity.Hello" p:name="張三" p:password="qewr"/><!--環(huán)繞增強的Bean  --><bean id="aroundAdded" class="com.pb.aop.AroundAdded"></bean><aop:config><!--  切入點--><aop:pointcut expression="execution(* com.pb.entity.*.*(..))" id="myPoint"/><!--關(guān)聯(lián)切入點  --><aop:advisor advice-ref="aroundAdded" pointcut-ref="myPoint"/></aop:config></beans>

二、注解方式

package com.pb.entity;/** * 實體類 */public class Hello {    private String name;    private String password;        public void show(){        System.out.println("姓名 :"+this.getName()+"密碼: "+this.getPassword());        //加入異常        System.out.println(1/0);    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    }

aop的類

package com.pb.aop;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.AfterThrowing;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;/** * 注解的方式現(xiàn)實AOP * @author Administrator * */@Aspectpublic class MyAnnotionAOP {        /*     * 前置     */    @Before(value="execution(* com.pb.entity.*.*(..))")    public void before(JoinPoint point){                System.out.println("前置增強");        System.out.println(point.getClass());    }    /*     * 后置     */    @AfterReturning(value="execution(* com.pb.entity.*.*(..))")    public void after(JoinPoint point){        System.out.println("后置增強");        //參數(shù)個數(shù)        System.out.println(point.getArgs().length);    }    /*     *異常      */    @AfterThrowing(value="execution(* com.pb.entity.*.*(..))")    public void afterThrowing(JoinPoint point){        System.out.println("我是異常增強");        System.out.println(point.getSignature().getName());    }    /**     * 環(huán)繞     */    @Around(value="execution(* com.pb.entity.*.*(..))")    public Object myAround(ProceedingJoinPoint point){        Object result=null;                try {            System.out.println("環(huán)繞增強開始了");            System.out.println(point.getKind()+point.getArgs());            point.proceed();            System.out.println("環(huán)繞增強后置增強了");            System.out.println(point.getTarget()+""+point.getClass());        } catch (Throwable e) {            System.out.println("環(huán)繞增強,異常增強處理");            e.printStackTrace();        }finally{            System.out.println("環(huán)繞增強最終增強");        }                return result;            }}

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"    xsi:schemaLocation="http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans-3.1.xsd    http://www.springframework.org/schema/aop     http://www.springframework.org/schema/aop/spring-aop-3.1.xsd"><!-- 關(guān)聯(lián)Bean Hello --><bean id="hello" class="com.pb.entity.Hello" p:name="張三" p:password="qewr"/><!-- 切入 類 --><bean id="myAnnAOP" class="com.pb.aop.MyAnnotionAOP" /><!--開啟自動代理  --><aop:aspectj-autoproxy/></beans>
三、Schema方式(推薦)

Hello類同上

package com.pb.entity;/** * 實體類 */public class Hello {    private String name;    private String password;        public void show(){        System.out.println("姓名 :"+this.getName()+"密碼: "+this.getPassword());        //加入異常        System.out.println(1/0);    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    }

aop類

package com.pb.aop;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.ProceedingJoinPoint;/** * SCHEMA方式切入類 *  * @author Administrator *  */public class MySchemaAOP {    /**     * 前置切入 可以有參數(shù)但是固定寫法     */    public void before(JoinPoint point){        System.out.println("這里是前置增強切入");        System.out.println(point.getKind()+point.getArgs().toString());    }    /**     * 后置切入     */    public void after(JoinPoint point){        System.out.println("這里是后置增強切入");        System.out.println(point.getTarget()+point.getSignature().getName());    }    /**     * 異常切入     */    public void myException(JoinPoint point){        System.out.println("這里是異常增強切入");        System.out.println(point.getSourceLocation());    }    /**     * 環(huán)繞增強切入     */    public Object myAround(ProceedingJoinPoint point){        Object resut=null;        try {            System.out.println("環(huán)繞增強---前置增強");            resut=point.proceed();            System.out.println("環(huán)繞增強---后置增強");        } catch (Throwable e) {            System.out.println("環(huán)繞增強---異常增強");            e.printStackTrace();        }finally{            System.out.println("環(huán)繞增強---最終增強");        }        return resut;    }}

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"    xsi:schemaLocation="http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans-3.1.xsd    http://www.springframework.org/schema/aop    http://www.springframework.org/schema/aop/spring-aop-3.1.xsd"><!-- 關(guān)聯(lián)Bean Hello --><bean id="hello" class="com.pb.entity.Hello" p:name="張三" p:password="qewr"/><!-- 切入 類 --><bean id="mySchemaAOP" class="com.pb.aop.MySchemaAOP"/><aop:config><!--  切入點--><aop:pointcut expression="execution(* com.pb.entity.*.*(..))" id="myPoint"/><!--關(guān)聯(lián)切入類、方法和切入點  --><aop:aspect ref="mySchemaAOP"><!-- 切入 前置方法和切入點--><aop:before method="before" pointcut-ref="myPoint"/><!-- 切入 后置方法和切入點--><aop:after method="after" pointcut-ref="myPoint"/><!-- 切入 異常方法和切入點--><aop:after method="myException" pointcut-ref="myPoint"/><!-- 切入 環(huán)繞增加方法和切入點--><aop:around method="myAround" pointcut-ref="myPoint"/></aop:aspect></aop:config></beans>


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 进贤县| 炎陵县| 江阴市| 临洮县| 凉城县| 灵丘县| 鲁甸县| 西畴县| 海宁市| 安阳县| 馆陶县| 嘉善县| 闽侯县| 潢川县| 固原市| 治多县| 华容县| 安顺市| 甘洛县| 长顺县| 黄石市| 绵竹市| 桃源县| 嘉黎县| 兴城市| 孙吴县| 永泰县| 卓资县| 广宗县| 陆良县| 湘乡市| 阿拉善盟| 静安区| 张家川| 崇文区| 金川县| 南陵县| 井冈山市| 揭西县| 岳池县| 凤翔县|