第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

正在回答

1 回答

Spring對(duì)AOP的實(shí)現(xiàn)提供了很好的支持。下面我們就使用Spring的注解來完成AOP做一個(gè)例子。

首先,為了使用Spring的AOP注解功能,必須導(dǎo)入如下幾個(gè)包。aspectjrt.jar,aspectjweaver.jar,cglib-nodep.jar.

然后我們寫一個(gè)接口

[java]?view plain?copy?print?

package?com.bird.service;??

??

public?interface?PersonServer?{??

??

????public?void?save(String?name);??

????public?void?update(String?name,?Integer?id);??

????public?String?getPersonName(Integer?id);??

??????

}??


和一個(gè)接口實(shí)現(xiàn)類


[java]?view plain?copy?print?

package?com.bird.service.impl;??

??

import?com.bird.service.PersonServer;??

??

public?class?PersonServiceBean?implements?PersonServer{??

??????

????@Override??

????public?void?save(String?name)?{??

??????????

????????System.out.println("我是save方法");??

????//??throw?new?RuntimeException();??

????}??

??

????@Override??

????public?void?update(String?name,?Integer?id)?{??

??????????

????????System.out.println("我是update()方法");??

????}??

??

????@Override??

????public?String?getPersonName(Integer?id)?{??

??????????

????????System.out.println("我是getPersonName()方法");??

????????return?"xxx";??

????}??

??

}??


下面使用Spring注解方式對(duì)這個(gè)Bean進(jìn)行方法攔截


[java]?view plain?copy?print?

package?com.bird.service;??

??

import?org.aspectj.lang.ProceedingJoinPoint;??

import?org.aspectj.lang.annotation.After;??

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;??

import?org.aspectj.lang.annotation.Pointcut;??

??

/**?

?*?切面?

?*?@author?Bird?

?*?

?*/??

@Aspect??

public?class?MyInterceptor?{??

????@Pointcut("execution(*?com.bird.service.impl.PersonServiceBean.*(..))")??

????private?void?anyMethod(){}//定義一個(gè)切入點(diǎn)??

??????

????@Before("anyMethod()?&&?args(name)")??

????public?void?doAccessCheck(String?name){??

????????System.out.println(name);??

????????System.out.println("前置通知");??

????}??

??????

????@AfterReturning("anyMethod()")??

????public?void?doAfter(){??

????????System.out.println("后置通知");??

????}??

??????

????@After("anyMethod()")??

????public?void?after(){??

????????System.out.println("最終通知");??

????}??

??????

????@AfterThrowing("anyMethod()")??

????public?void?doAfterThrow(){??

????????System.out.println("例外通知");??

????}??

??????

????@Around("anyMethod()")??

????public?Object?doBasicProfiling(ProceedingJoinPoint?pjp)?throws?Throwable{??

????????System.out.println("進(jìn)入環(huán)繞通知");??

????????Object?object?=?pjp.proceed();//執(zhí)行該方法??

????????System.out.println("退出方法");??

????????return?object;??

????}??

}??

[java]?view plain?copy?print?

@Pointcut("execution(*?com.bird.service.impl.PersonServiceBean.*(..))")??

這句話是方法切入點(diǎn),execution為執(zhí)行的意思,*代表任意返回值,然后是包名,.*意思是包下面的所有子包。(..)代


表各種方法.

然后下面的注解就比較簡(jiǎn)單了,就是在使用方法前和中,還有環(huán)繞攔截/

然后在Spring的配置文件中繼續(xù)配置Bean,需要打開AOP命名空間

[java]?view plain?copy?print?

<?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-2.5.xsd??

???????http://www.springframework.org/schema/aop???

???????http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">??

??????????

????????<aop:aspectj-autoproxy/>??

????<bean?id="personServiceBean"?class="com.bird.service.impl.PersonServiceBean"/>??

????<bean?id="myInterceptor"?class="com.bird.service.MyInterceptor"/>??

?????

</beans>??


然后建立一個(gè)Junit測(cè)試


[java]?view plain?copy?print?

package?junit.test;??

??

import?org.junit.Test;??

import?org.springframework.context.ApplicationContext;??

import?org.springframework.context.support.ClassPathXmlApplicationContext;??

??

import?com.bird.service.PersonServer;??

??

public?class?SpringAOPTest?{??

??????

????@Test??

????public?void?inteceptorTest(){??

????????ApplicationContext?ctx?=?new?ClassPathXmlApplicationContext("beanAop.xml");??

????????PersonServer?bean?=?(PersonServer)ctx.getBean("personServiceBean");??

????????bean.save(null);??

????}??

??????

??

}??


測(cè)試結(jié)果為


[java]?view plain?copy?print?

2012-3-12?18:08:39?org.springframework.context.support.AbstractApplicationContext?prepareRefresh??

信息:?Refreshing?org.springframework.context.support.ClassPathXmlApplicationContext@dd20f6:?display?name?[org.springframework.context.support.ClassPathXmlApplicationContext@dd20f6];?startup?date?[Mon?Mar?12?18:08:39?CST?2012];?root?of?context?hierarchy??

2012-3-12?18:08:40?org.springframework.beans.factory.xml.XmlBeanDefinitionReader?loadBeanDefinitions??

信息:?Loading?XML?bean?definitions?from?class?path?resource?[beanAop.xml]??

2012-3-12?18:08:40?org.springframework.context.support.AbstractApplicationContext?obtainFreshBeanFactory??

信息:?Bean?factory?for?application?context?[org.springframework.context.support.ClassPathXmlApplicationContext@dd20f6]:?org.springframework.beans.factory.support.DefaultListableBeanFactory@b0bad7??

2012-3-12?18:08:40?org.springframework.beans.factory.support.DefaultListableBeanFactory?preInstantiateSingletons??

信息:?Pre-instantiating?singletons?in?org.springframework.beans.factory.support.DefaultListableBeanFactory@b0bad7:?defining?beans?[org.springframework.aop.config.internalAutoProxyCreator,personServiceBean,myInterceptor];?root?of?factory?hierarchy??

null??

前置通知??

進(jìn)入環(huán)繞通知??

我是save方法??

后置通知??

退出方法??

最終通知??


1 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消
Spring Boot進(jìn)階之Web進(jìn)階
  • 參與學(xué)習(xí)       104159    人
  • 解答問題       425    個(gè)

《2小時(shí)學(xué)習(xí)Spring Boot》之進(jìn)階教程,針對(duì)Web方面的相關(guān)技巧

進(jìn)入課程

AOP用注解實(shí)現(xiàn)

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)