亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

spring aop兩種配置方式

2019-11-26 14:59:05
字體:
來源:轉載
供稿:網友

第一種:注解配置AOP
注解配置AOP(使用 AspectJ 類庫實現的),大致分為三步:
1. 使用注解@Aspect來定義一個切面,在切面中定義切入點(@Pointcut),通知類型(@Before, @AfterReturning,@After,@AfterThrowing,@Around).
2. 開發需要被攔截的類。
3. 將切面配置到xml中,當然,我們也可以使用自動掃描Bean的方式。這樣的話,那就交由Spring AoP容器管理。

另外需要引用 aspectJ 的 jar 包: aspectjweaver.jar aspectjrt.jar

實例:

User.javapackage com.bjsxt.model;  public class User {  private String username;  private String password;  public String getUsername() {  return username;  }  public void setUsername(String username) {  this.username = username;  }  public String getPassword() {  return password;  }  public void setPassword(String password) {  this.password = password;  } } /** *接口類 */ package com.bjsxt.dao; import com.bjsxt.model.User;   public interface UserDAO {  public void save(User user); } 

實現接口:

package com.bjsxt.dao.impl;  import org.springframework.stereotype.Component;  import com.bjsxt.dao.UserDAO; import com.bjsxt.model.User;  @Component("u") public class UserDAOImpl implements UserDAO {   public void save(User user) {   System.out.println("user save11d!");  /*throw new RuntimeException("exception");*/ //拋異常  }  }

操作類:

package com.bjsxt.service; import javax.annotation.Resource;  import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component;  import com.bjsxt.dao.UserDAO; import com.bjsxt.model.User;   @Component("userService") public class UserService {   private UserDAO userDAO;   public void init() {  System.out.println("init");  }   public void add(User user) {  userDAO.save(user);  }  public UserDAO getUserDAO() {  return userDAO;  }   @Resource(name="u")  public void setUserDAO( UserDAO userDAO) {  this.userDAO = userDAO;  }   public void destroy() {  System.out.println("destroy");  } } 

加入aop

package com.bjsxt.aop;  import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component;  @Aspect @Component public class LogInterceptor {  @Pointcut("execution(public * com.bjsxt.service..*.add(..))")  public void myMethod(){};   /*@Before("execution(public void com.bjsxt.dao.impl.UserDAOImpl.save(com.bjsxt.model.User))")*/  @Before("myMethod()")  public void before() {  System.out.println("method staet");  }  @After("myMethod()")  public void after() {  System.out.println("method after");  }  @AfterReturning("execution(public * com.bjsxt.dao..*.*(..))")  public void AfterReturning() {  System.out.println("method AfterReturning");  }  @AfterThrowing("execution(public * com.bjsxt.dao..*.*(..))")  public void AfterThrowing() {  System.out.println("method AfterThrowing");  } } 

配置文件

<?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: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/context  http://www.springframework.org/schema/context/spring-context-2.5.xsd  http://www.springframework.org/schema/aop  http://www.springframework.org/schema/aop/spring-aop-3.1.xsd  "><!-- 要添加最后2行 -->   <context:annotation-config />  <context:component-scan base-package="com.bjsxt"/> <!-- 自動掃描 -->  <aop:aspectj-autoproxy/> <!-- 要添加本行 --> </beans> 

測試類:

package com.bjsxt.service; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;  import com.bjsxt.model.User;  //Dependency Injection //Inverse of Control public class UserServiceTest {   @Test  public void testAdd() throws Exception {  ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");    UserService service = (UserService)ctx.getBean("userService");  System.out.println(service.getClass());  service.add(new User());  System.out.println("###");   ctx.destroy();   }  } 

結果:

class com.bjsxt.service.UserService$$EnhancerByCGLIB$$7b201784method staetuser save11d!method AfterReturningmethod after###

注意:

@Aspect:意思是這個類為切面類
@Componet:因為作為切面類需要 Spring 管理起來,所以在初始化時就需要將這個類初始化加入 Spring 的管理;
@Befoe:切入點的邏輯(Advice)
execution…:切入點語法

第二種:xml配置aop

實例同上:只是配置文件不同

<?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: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/context  http://www.springframework.org/schema/context/spring-context-2.5.xsd  http://www.springframework.org/schema/aop  http://www.springframework.org/schema/aop/spring-aop-3.1.xsd  "><!-- 要添加最后2行 -->   <context:annotation-config />  <context:component-scan base-package="com.bjsxt"/>  <bean id="logInterceptor" class="com.bjsxt.aop.LogInterceptor"></bean>  <aop:config>  <aop:pointcut expression="execution(public * com.bjsxt.service..*.add(..))"  id="servicePointcut"/>  <aop:aspect id="logAspect" ref="logInterceptor">  <aop:before method="before" pointcut-ref="servicePointcut" />  </aop:aspect>   </aop:config> </beans> 

下面的<beans>是Spring的配置標簽,beans里面幾個重要的屬性:

xmlns:

是默認的xml文檔解析格式,即spring的beans。地址是http://www.springframework.org/schema/beans。

通過設置這個屬性,所有在beans里面聲明的屬性,可以直接通過<>來使用,比如<bean>等等。

xmlns:xsi:

是xml需要遵守的規范,通過URL可以看到,是w3的統一規范,后面通過xsi:schemaLocation來定位所有的解析文件。

xmlns:aop:

這個是重點,是我們這里需要使用到的一些語義規范,與面向切面AOP相關。

xmlns:tx:

Spring中與事務相關的配置內容。

一個XML文件,只能聲明一個默認的語義解析的規范。

例如上面的xml中就只有beans一個是默認的,其他的都需要通過特定的標簽來使用,比如aop,它自己有很多的屬性,如果要使用,前面就必須加上aop:xxx才可以。比如上面的aop:config。

類似的,如果默認的xmlns配置的是aop相關的語義解析規范,那么在xml中就可以直接寫config這種標簽了。

以上就是spring aop兩種配置方式,大家了解了嗎?之后還有更多關于spring aop兩種配置方式的文章和大家分享,一定要繼續關注哦

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧洲美女免费图片一区| 久久久亚洲国产天美传媒修理工| 中文字幕日韩专区| 日韩亚洲在线观看| 欧美性猛交xxxx富婆弯腰| 国产一区二区三区视频在线观看| 国产精品免费在线免费| 欧美一区二区三区免费观看| 精品无码久久久久久国产| 国产精品久久久久久网站| 中日韩美女免费视频网址在线观看| 国产精品永久免费视频| 日韩中文字幕不卡视频| 日韩av电影国产| 国产午夜一区二区| 亚洲精品国产电影| 91精品国产综合久久久久久久久| 欧美视频中文在线看| 欧美极品少妇与黑人| 日韩**中文字幕毛片| 97色在线视频观看| 欧美日韩国产综合新一区| www.日韩欧美| 亚洲一区二区久久久久久| 国产999在线观看| 91精品免费久久久久久久久| 91欧美精品午夜性色福利在线| 欧美高清激情视频| 欧美美最猛性xxxxxx| 91中文精品字幕在线视频| 国产精品视频自在线| 亚洲97在线观看| 欧美黄色片免费观看| 色偷偷综合社区| 98精品在线视频| 亚洲午夜激情免费视频| 一区二区三区精品99久久| 亚洲精品国产精品国自产在线| 国产成人精品在线| 国产丝袜一区视频在线观看| 51精品在线观看| 色天天综合狠狠色| 国产精品亚洲视频在线观看| 国产亚洲精品久久久| 久久在线免费观看视频| 国产日韩欧美另类| 91午夜理伦私人影院| 亚洲国产欧美一区二区丝袜黑人| 8090成年在线看片午夜| 欧美大片va欧美在线播放| 久久精品成人动漫| 国产亚洲精品高潮| 91高清免费在线观看| 国产精品嫩草影院一区二区| 日本一区二三区好的精华液| 亚洲第一精品夜夜躁人人爽| 亚洲国产精品一区二区三区| 日韩女优人人人人射在线视频| 8x拔播拔播x8国产精品| 亚洲a∨日韩av高清在线观看| 亚洲小视频在线观看| 91精品在线国产| 亚洲一区av在线播放| 全亚洲最色的网站在线观看| 欧美日韩国产中文字幕| 色先锋资源久久综合5566| 亚洲黄色片网站| 日本在线观看天堂男亚洲| 久久久久久尹人网香蕉| 热久久美女精品天天吊色| 久久精品中文字幕一区| 国产精品一区专区欧美日韩| 欧美精品久久久久久久| 精品国偷自产在线视频99| 欧美日韩激情小视频| 精品国产拍在线观看| 久久亚洲精品小早川怜子66| 国产精品99久久久久久白浆小说| 欧美午夜宅男影院在线观看| 亚洲精品欧美一区二区三区| 色久欧美在线视频观看| 亚洲欧美国产精品va在线观看| 国产精品视频一区国模私拍| 欧美性猛交xxxx乱大交| 91精品国产自产在线老师啪| 日韩精品视频观看| 98精品国产高清在线xxxx天堂| 97在线观看视频国产| 亚洲国产中文字幕在线观看| 亚洲黄色片网站| 欧美激情免费在线| 91av在线播放视频| 92福利视频午夜1000合集在线观看| 国产精品免费视频xxxx| 亚洲少妇中文在线| 91九色国产社区在线观看| 91沈先生作品| 久久久久久久一区二区三区| 欧美日韩精品在线| 欧美视频免费在线观看| 国产亚洲精品久久久久动| 亚洲第一网站免费视频| 亚洲成人黄色在线观看| 97视频在线看| 国产精品扒开腿做爽爽爽的视频| 国产91久久婷婷一区二区| 中文字幕精品av| 欧美自拍视频在线观看| 精品高清美女精品国产区| 欧美黑人性生活视频| 中文字幕亚洲欧美日韩在线不卡| 欧美日韩国产专区| 538国产精品视频一区二区| 日韩av最新在线| 精品久久久免费| 日韩av在线精品| 福利二区91精品bt7086| 日韩欧美精品网站| 久久久久中文字幕| 91在线视频精品| 久久国产精品免费视频| 国产一区二区三区三区在线观看| 国产一区玩具在线观看| 日韩欧美成人精品| 琪琪亚洲精品午夜在线| 欧美刺激性大交免费视频| 高清日韩电视剧大全免费播放在线观看| 日韩大陆欧美高清视频区| 日韩精品一区二区三区第95| 亚洲第一av网站| 国产丝袜高跟一区| 欧美国产日韩免费| 色偷偷偷亚洲综合网另类| 午夜精品久久久久久久99黑人| 国产日韩欧美成人| 国产精品ⅴa在线观看h| 亚洲级视频在线观看免费1级| 亚洲视频在线看| 久久久久北条麻妃免费看| xxav国产精品美女主播| 亚洲福利视频二区| 97在线视频国产| 亚洲天堂男人天堂| 国产成人啪精品视频免费网| 亚洲电影免费在线观看| 欧美性20hd另类| 久久视频在线观看免费| 亚洲一级黄色av| 精品久久香蕉国产线看观看亚洲| 久久中文字幕在线视频| 亚洲电影免费观看高清完整版在线观看| 国产精品爽爽爽| 亚洲r级在线观看| 亚洲成人性视频| 日韩乱码在线视频| 国产精品一区二区三区免费视频| 午夜精品久久久久久久白皮肤| 久久影院模特热| 亚洲综合中文字幕在线观看| 亚洲男人天堂久| 国产亚洲精品久久久久久牛牛| 中文字幕亚洲天堂| 欧美性生交xxxxxdddd| 国产精品嫩草影院久久久|