欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

spring自動(dòng)裝配和aop怎么用-創(chuàng)新互聯(lián)

這篇文章主要為大家展示了“spring自動(dòng)裝配和aop怎么用”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“spring自動(dòng)裝配和aop怎么用”這篇文章吧。

創(chuàng)新互聯(lián)專注于企業(yè)營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、卓尼網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、html5、商城網(wǎng)站開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為卓尼等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

使用注解配置spring

一、步驟

1.為主配置文件引入新的命名空間(約束)
導(dǎo)入spring-context-4.2.xsd schema約束

spring自動(dòng)裝配和aop怎么用

2.開(kāi)啟使用注解代理配置文件

// 在applicationContext.xml中
// 指定掃描cn.zhli13.bean包下所有類的注解
// 掃描時(shí)會(huì)掃描指定包下的所有子孫包
<context:component-scan base-package="cn.zhli13.bean"></context:component-scan>

3.在類中使用注解完成配置

// @Componet等

二、將對(duì)象注冊(cè)到容器

// 將user注冊(cè)到spring容器中,相當(dāng)于<bean name="user" class="cn.zhli13.bean.User"></bean>
@Componet("user")
@Service("user") // service層
@Controller("user") // web層
@Repository("user") // dao層

三、修改對(duì)象的作用范圍

// 指定對(duì)象的作用域
@Scope(scopeName="prototypo") // 非單例模式

四、值類型注入

// 1.通過(guò)反射的field賦值,破壞了封裝性
@Value("tom")
private String name;
// 2.通過(guò)set方法賦值,推薦使用
@Value("tom")
public void setName(String name) {
  this.name = name;
}

五、引用類型注入

@Autowired // 自動(dòng)裝配
// 問(wèn)題:如果匹配多個(gè)類型一致的對(duì)象,將無(wú)法選擇具體注入哪一個(gè)對(duì)象
@Qualifier("car2")// 使用@Qualifier注解告訴spring容器自動(dòng)裝配哪個(gè)名稱的對(duì)
private Car car;

六、初始化、銷毀方法

@PostConstruct // 在對(duì)象創(chuàng)建后調(diào)用,xml配置中的init-method
public void init () {
  System.out.println("init");
}
@PreDestory // 在對(duì)象銷毀之前調(diào)用,xml配置中的destory-method
public void destory () {
  System.out.println("destory");
}

spring與junit整合測(cè)試

一、導(dǎo)包

額外導(dǎo)入

spring自動(dòng)裝配和aop怎么用

二、配置注解

// 幫我們創(chuàng)建容器
@RunWith("SpringJunit4ClassRunner")
// 指定創(chuàng)建容器時(shí)使用哪個(gè)配置文件
@ContextConfiguration("classpath:applicationContext.xml")
public class Demo {
  // 將名為user的對(duì)象注入到變量u中
  @Resource(name="user")
  private User u;
}

三、測(cè)試

@Test
public void fun1() {
  System.out.println(u);
}

spring中的aop

一、概念

aop思想:橫向重復(fù)、縱向抽取

aop概念:spring能夠?yàn)槿萜髦泄芾淼膶?duì)象生成動(dòng)態(tài)代理

二、spring實(shí)現(xiàn)aop的原理

1.動(dòng)態(tài)代理(優(yōu)先)
被代理對(duì)象必須要實(shí)現(xiàn)接口,才能產(chǎn)生代理對(duì)象.如果沒(méi)有接口將不能使用動(dòng)態(tài)代理技術(shù)

2.cglib代理(沒(méi)有接口)
第三方代理技術(shù),cglib代理.可以對(duì)任何類生成代理.代理的原理是對(duì)目標(biāo)對(duì)象進(jìn)行繼承代理. 如果目標(biāo)對(duì)象被final修飾.那么該類無(wú)法被cglib代理.

三、aop名詞學(xué)習(xí)

  • JoinPoint(連接點(diǎn)):目標(biāo)對(duì)象中,所有可以增強(qiáng)的方法

  • Pointcut(切入點(diǎn)):目標(biāo)對(duì)象,已經(jīng)增強(qiáng)的方法

  • Adice(通知/增強(qiáng)):被增強(qiáng)的代碼

  • Target(目標(biāo)對(duì)象):被代理的對(duì)象

  • Weaving(織入):將通知應(yīng)用到切入點(diǎn)的過(guò)程

  • Proxy(代理):將通知織入到目標(biāo)對(duì)象之后,形成代理對(duì)象

  • aspect(切面):切入點(diǎn) + 通知

spring aop的使用

一、導(dǎo)包

// spring的aop包
spring-aspects-4.2.4.RELEASE.jar
spring-aop-4.2.4.RELEASE.jar
// spring需要第三方aop包
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar

二、準(zhǔn)備目標(biāo)對(duì)象

public class UserServiceImpl implements UserService {
  @Override
  public void save() {
    System.out.println("保存用戶!");
  }
  @Override
  public void delete() {
    System.out.println("刪除用戶!");
  }
  @Override
  public void update() {
    System.out.println("更新用戶!");
  }
  @Override
  public void find() {
    System.out.println("查找用戶!");
  }
}

三、準(zhǔn)備通知

// 1.使用注解方式
// 表示該類是一個(gè)通知類
@Aspect
public class MyAdvice {
  @Pointcut("execution(* cn.zhli13.service.*ServiceImpl.*(..))")
  public void pc(){}
  //前置通知
  //指定該方法是前置通知,并制定切入點(diǎn)
  @Before("MyAdvice.pc()")
  public void before(){
    System.out.println("這是前置通知!!");
  }
  //后置通知
  @AfterReturning("execution(* cn.zhli13.service.*ServiceImpl.*(..))")
  public void afterReturning(){
    System.out.println("這是后置通知(如果出現(xiàn)異常不會(huì)調(diào)用)!!");
  }
  //環(huán)繞通知
  @Around("execution(* cn.itcast.zhli13.*ServiceImpl.*(..))")
  public Object around(ProceedingJoinPoint pjp) throws Throwable {
    System.out.println("這是環(huán)繞通知之前的部分!!");
    Object proceed = pjp.proceed();//調(diào)用目標(biāo)方法
    System.out.println("這是環(huán)繞通知之后的部分!!");
    return proceed;
  }
  //異常通知
  @AfterThrowing("execution(* cn.zhli13.service.*ServiceImpl.*(..))")
  public void afterException(){
    System.out.println("出事啦!出現(xiàn)異常了!!");
  }
  //后置通知
  @After("execution(* cn.itcast.zhli13.*ServiceImpl.*(..))")
  public void after(){
    System.out.println("這是后置通知(出現(xiàn)異常也會(huì)調(diào)用)!!");
  }
}
// 2.使用xml配置
// 移除上述通知類的注解就是xml配置的通知類

四、配置進(jìn)行織入,將通知織入目標(biāo)對(duì)象中

// 1.使用注解配置 
<!-- 準(zhǔn)備工作: 導(dǎo)入aop(約束)命名空間 -->

spring自動(dòng)裝配和aop怎么用

<!-- 1.配置目標(biāo)對(duì)象 -->
<bean name="userService" class="cn.zhli13.service.UserServiceImpl" ></bean>
<!-- 2.配置通知對(duì)象 -->
<bean name="myAdvice" class="cn.zhli13.aop.MyAdvice" ></bean>
<!-- 3.開(kāi)啟使用注解完成織入 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
// 2.使用xml配置
<!-- 準(zhǔn)備工作: 導(dǎo)入aop(約束)命名空間 -->
<!-- 1.配置目標(biāo)對(duì)象 -->
<bean name="userService" class="cn.zhli13.service.UserServiceImpl" ></bean>
<!-- 2.配置通知對(duì)象 -->
<bean name="myAdvice" class="cn.zhli13.aop.MyAdvice" ></bean>
<!-- 3.配置將通知織入目標(biāo)對(duì)象 -->
<aop:config>
  <!-- 配置切入點(diǎn) 
    public void cn.zhli13.service.UserServiceImpl.save() 
    void cn.zhli13.service.UserServiceImpl.save()
    * cn.zhli13.service.UserServiceImpl.save()
    * cn.zhli13.service.UserServiceImpl.*()
    
    * cn.zhli13.service.*ServiceImpl.*(..)
    * cn.zhli13.service..*ServiceImpl.*(..)
  -->
  <aop:pointcut expression="execution(* cn.zhli13.service.*ServiceImpl.*(..))" id="pc"/>
  <aop:aspect ref="myAdvice" >
    <!-- 指定名為before方法作為前置通知 -->
    <aop:before method="before" pointcut-ref="pc" />
    <!-- 后置 -->
    <aop:after-returning method="afterReturning" pointcut-ref="pc" />
    <!-- 環(huán)繞通知 -->
    <aop:around method="around" pointcut-ref="pc" />
    <!-- 異常攔截通知 -->
    <aop:after-throwing method="afterException" pointcut-ref="pc"/>
    <!-- 后置 -->
    <aop:after method="after" pointcut-ref="pc"/>
  </aop:aspect>
</aop:config>

以上是“spring自動(dòng)裝配和aop怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

網(wǎng)站題目:spring自動(dòng)裝配和aop怎么用-創(chuàng)新互聯(lián)
當(dāng)前網(wǎng)址:http://aaarwkj.com/article24/ccdsce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、外貿(mào)網(wǎng)站建設(shè)、微信小程序、網(wǎng)站營(yíng)銷、建站公司、用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司
老湿机午夜十分钟视频| 高清国产国产精品三级国产av| 亚洲欧美日韩制服另类| 中文字幕日韩在线欧美一区| 日韩在线不卡一二三| 久久亚洲一区二区内射| 亚洲欧美综合精品久久成人| 男女做爰高清免费视频| 亚洲激情视频久久精品| 精品国产一区二区av麻豆| 国产真人免费作爱视频网站| 丰满人妻二区三区性色| 国产亚洲超级97免费视频| 在线日韩中文字幕二区| 中文字幕精品免费日韩在线| 亚洲av乱码久久精品蜜桃| 大香蕉国产精品视频在线| 国产av高清亚洲精品高清二部| 久久偷拍一区二区三区| 亚洲成人日韩在线播放| 日日添夜夜躁欧美一区二区| 天堂av在线一区二区三区| 99久久免费中文字幕| 欧美中文字幕精在线不卡| 国产一区二区三区的网站| 国产二区日韩成人精品| 免费人妻aⅴ中文字幕| 欧美中日韩精品免费在线| 欧美日韩性生活视频在线| 欧美日韩精品久久影院| 国外男女性生活在线视频| 81精品国产综合久久精品伦理| 99久久精品国产熟女拳交| 中文字幕色视频在线观看| 精品久久人人做爽综合| 亚洲精品??一区二区| 免费成人自拍偷拍视频| 欧美日韩精品一区二区在线播放| 蜜臀av在线精品国自产拍| 91熟女激情五月综合| 一区二区三区蜜桃av|