記錄Spring的ioc和aop操作

PART_ONE:IOC
Spring的ioc可以解決開發(fā)過程中New對象的操作。

1.除了導(dǎo)入Spring的jar包還要導(dǎo)入之后aop需要的jar包


image.png

2.xml配置的方式

a.簡單的User.class

package entiy;

public class User {
    
    private String name;
    
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void showUser() {
        System.out.println("i am a user");
    }
}

b.Spring的核心配置文件,applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.2.xsd 
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
            
        <bean id="user" class="entiy.User"></bean>
        
        <bean id="userDao" class="dao.UserDaoImpl"></bean>
        
        <bean id="userSerive" class="dao.UserService">
            <property name="userDao" ref="userDao"></property>
        </bean>
        
        <!-- 開啟掃描注解鹅士,對類,方法泛烙,屬性上的注解進行掃描 -->
        <context:component-scan base-package="entiy,dao,aop"></context:component-scan>
                
</beans>

c.獲取User實例

    @Test
    public void test() {
        //加載spring配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        
        User test = (User) context.getBean("user");
        test.showUser();
        
    }

d.bean方式配置的時候锨推,要注意User類中是否有無參構(gòu)造函數(shù)

3.ioc的注解方式實現(xiàn)

a.在applicationContext.xml中加入注釋的支持

<bean id="userDao" class="dao.UserDaoImpl"></bean>
        
        <bean id="userSerive" class="dao.UserService">
            <property name="userDao" ref="userDao"></property>
        </bean>
        
        <!-- 開啟掃描注解,對類介陶,方法,屬性上的注解進行掃描 -->
        <context:component-scan base-package="entiy,dao,aop"></context:component-scan>
        <context:component-scan base-package="cn.itcast.aop"></context:component-scan>

b.測試類
dao

public interface PersonDao {
    
    public void showName(Person person);

}

daoimp

package dao;

import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;

import entiy.Person;

@Repository
public class PersonDaoImpl implements PersonDao{

    @Override
    public void showName(Person person) {
        System.out.println(person.getName());
        
    }


}

service

package dao;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import entiy.Person;

@Service(value="personService")
public class PersonService {
    
    @Autowired
    private PersonDao personDao;
    
    public void showName(Person person) {
        personDao.showName(person);
    }

}

test

@Test
    public void testService() {
        //加載spring配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService service = (UserService) context.getBean("userSerive");
        
        User test = new User();
        test.setName("handsomeboy");
        
        service.showName(test);
    }

c.四個注解的簡單介紹


image.png

PART_TWO:AOP操作

AOP的四個概念

Joinpoint(連接點): 類里面可以被增強的方法色建,這些方法稱為連接點

Pointcut(切入點):所謂切入點是指我們要對哪些Joinpoint進行攔截的定義.

Advice(通知/增強):所謂通知是指攔截到Joinpoint之后所要做的事情就是通知.通知分為前置通知,后置通知,異常通知,最終通知,環(huán)繞通知(切面要完成的功能)

Aspect(切面): 是切入點和通知(引介)的結(jié)合

Introduction(引介):引介是一種特殊的通知在不修改類代碼的前提下, Introduction可以在運行期為類動態(tài)地添加一些方法或Field.
Target(目標(biāo)對象):代理的目標(biāo)對象(要增強的類)
Weaving(織入):是把增強應(yīng)用到目標(biāo)的過程.
把advice 應(yīng)用到 target的過程
Proxy(代理):一個類被AOP織入增強后哺呜,就產(chǎn)生一個結(jié)果代理類

1.xml配置方式實現(xiàn)
a.Book.class

public class Book {
    
    public void showBook() {
        System.out.println("this is a book");
    }

}

b.MyBook.class加在book的方法類

public class MyBook {
    
    public void before() {
        System.out.println("this is before");
    }

}

c.在applicationContext.xml加入aop配置

<!-- 配置aop操作 -->
        
        <bean id="book" class="aop.Book"></bean>
        <bean id="myBook" class="aop.MyBook"></bean>
        
        <aop:config>
            <!-- 配置切入點 -->
            <aop:pointcut expression="execution(* aop.Book.showBook(..))" id="bookPoint"/>
            
            <!-- 配置切面 -->
            <aop:aspect ref="myBook">
                <aop:before method="before" pointcut-ref="bookPoint"/>
            </aop:aspect>
        </aop:config> -->

d.測試

@Test
    public void test() {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        Book book = (Book) context.getBean("book");
        
        book.showBook();
    }
image.png

2.注解方式實現(xiàn)

a.在applicationContext.xml加入aop注解

<!-- 開啟對 @Aspect 的支持-->
        <aop:aspectj-autoproxy/>
    b.myBook.class
@Aspect
public class MyBook2 {
    
    @Pointcut("execution(* aop.Book2.showBook(..))")
    public void showBook() {}
    
    @Before("showBook")
    public void before() {
        System.out.println("this is before2");
    }

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市箕戳,隨后出現(xiàn)的幾起案子某残,更是在濱河造成了極大的恐慌,老刑警劉巖陵吸,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玻墅,死亡現(xiàn)場離奇詭異,居然都是意外死亡壮虫,警方通過查閱死者的電腦和手機澳厢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來囚似,“玉大人赏酥,你說我怎么就攤上這事∽还梗” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵框都,是天一觀的道長搬素。 經(jīng)常有香客問我,道長魏保,這世上最難降的妖魔是什么熬尺? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮谓罗,結(jié)果婚禮上粱哼,老公的妹妹穿的比我還像新娘。我一直安慰自己檩咱,他們只是感情好揭措,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布胯舷。 她就那樣靜靜地躺著,像睡著了一般绊含。 火紅的嫁衣襯著肌膚如雪桑嘶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天躬充,我揣著相機與錄音逃顶,去河邊找鬼。 笑死充甚,一個胖子當(dāng)著我的面吹牛以政,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播伴找,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼盈蛮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了疆瑰?” 一聲冷哼從身側(cè)響起眉反,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎穆役,沒想到半個月后寸五,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡耿币,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年梳杏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淹接。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡十性,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出塑悼,到底是詐尸還是另有隱情劲适,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布厢蒜,位于F島的核電站霞势,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏斑鸦。R本人自食惡果不足惜愕贡,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望巷屿。 院中可真熱鬧固以,春花似錦、人聲如沸嘱巾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至栽渴,卻和暖如春尖坤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背闲擦。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工慢味, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人墅冷。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓纯路,卻偏偏與公主長得像,于是被迫代替她去往敵國和親寞忿。 傳聞我的和親對象是個殘疾皇子驰唬,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 1.1 Spring IoC容器和bean簡介 本章介紹了Spring Framework實現(xiàn)的控制反轉(zhuǎn)(IoC)...
    起名真是難閱讀 2,580評論 0 8
  • 本博中關(guān)于spring的文章:Spring IOC和AOP原理,Spring事務(wù)原理探究腔彰,Spring配置文件屬性...
    Maggie編程去閱讀 4,102評論 0 34
  • **** AOP 面向切面編程 底層原理 代理=斜唷!霹抛! 今天AOP課程1搓逾、 Spring 傳統(tǒng) AOP2、 Spri...
    luweicheng24閱讀 1,365評論 0 1
  • 1.1 spring IoC容器和beans的簡介 Spring 框架的最核心基礎(chǔ)的功能是IoC(控制反轉(zhuǎn))容器杯拐,...
    simoscode閱讀 6,713評論 2 22
  • (萬尚學(xué)習(xí)會)打卡第69天 姓名:徐娟 部門:人事部 組別:待定 【知~學(xué)習(xí)】 誦讀《活法》第四章 人類一旦覺醒霞篡,...
    徐娟Wellin閱讀 433評論 0 0