文章出處

一、Spring作用:管理項目中各種業務Bean(service類、Dao類、Action類),實例化類,屬性賦值

二、Spring IOC(Inversion of Control )控制反轉,也被稱為依賴注入(Dependency Injection[DI]),是面向對象編程 中的一種設計理念,用來減輕程序代碼之間的耦合度。

IOC原理:側重原理

在業務代碼中不使用我們之間司空見慣的關鍵字new來構建一個業務實例,而是在配置文件中。通過xml節點來告知容器如何對內存中構建的對應類型的對象名稱做命名

DI依賴注入:側重實現

 說的是創建對象實例時,為這個對象注入屬性值其它對象實例,側重于實現。

 兩者關系它們是spring核心思想的不同方面的描述。


三、Spring第一個案例[無需new關鍵字,創建Student對象]

具體步驟:

①創建Student實體類

②在src下創建applicationContext.xml配置文件

③ 測試類

---引入核心jar包:[Beans、Core、Context、Expression]

 

---創建實體類Student 可植入相應的屬性值

 

---在src下編寫Spring配置文件

頭文件查找位置:源碼

applicationContext.xml:

注:在spring配置文件中,使用<bean>元素來定義Bean實例(也可稱為組件)。有兩個常用屬性:一個是id,表示定義的Bean實例的名稱,另一個是Class,表示定義的Bean實例的類型

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xsi:schemaLocation="
 5         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 6         
 7         <bean id="stu" class="cn.happy.entity.Student">
 8         <property name="name" value="呵呵"></property>
 9         <property name="age" value="13"></property>
10        
11        </bean>
12        
13         </beans>

 --進行測試Test

通過ClassPathXmlApplicationContext實例化Spring的上下文,并通過ApplicationContext的getBean()方法,根據id來獲取Bean實例。ApplicationContext是一個接口,負責讀取Spring配置文件,管理對象的加載,生成,維護Bean對象與Bean對象之間的依賴關系,負責Bean的生命周期。ClassPathXmlApplicationContext是ApplicationContext接口的實現類,用于從classpath路徑中讀取spring配置文件。

 

1 public class Test01 {
2 @Test
3 public void addTest(){
4     ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
5     Student stus=(Student) ctx.getBean("stu");    
6     System.out.println(stus);
7     
8 }

 輸出結果:

 


四、依賴注入[DI]

通過不同的紙張和不同類型墨盒的組合,來裝配出一臺打印機。

 具體步驟:

①分層創建墨盒和紙張接口

②實現類

③在配置文件中裝配

 --ink包下創建Ink接口和其實現類

 ink接口:

public interface Ink {
    public String getColor();
}

實現類:

public class ColorInk implements Ink{

    public String getColor() {
        
        return "彩色墨盒";
    }

}
public class BlackInk implements Ink{

    public String getColor() {
        
        return "黑色墨盒";
    }

}

 --在paper包下創建paper接口和其實現類

 paper接口:

public interface Paper {
    public String getContent();
}

實現類: 

public class A4Paper implements Paper{

    public String getContent() {        
        return "我是A4";
    }

}
public class B5Paper implements Paper{
    public String getContent() {
        return "我是B5";
    }

}

--printer包下創建Print類,并植入ink,paper成員變量,稱為域屬性。封裝,以及打印的方法。

public class Print {
    private Ink ink;
    private Paper paper;
    
    public void print(){
        System.out.println(""+ink.getColor()+"打印"+paper.getContent()+"紙張");
    }
    

 --配置文件,并對ink和paper以及打印機進行配置

--測試類。強轉的是打印機類print

1 public class SpringTest {
2     @Test
3     public void test1(){
4         ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
5         Print pri=(Print) ctx.getBean("printer");
6         pri.print();
7     }

輸出結果:

 


五、Spring AOP[Aspect Oriented Programming] 面向切面編程

AOP原理:

將復雜的需求分解出不同方面,將散布在系統中的公共功能集中解決

采用代理機制組裝起來運行,在不改變原程序的基礎上對代碼段進行增強處理,增加新的功能

AOP目的:

從系統中分離出切面,獨立于業務邏輯實現

 

如何使用AOP?

具體步驟:

①在項目中添加Spring AOP相關的JAR文件

②編寫前置增強和后置增強實現日志功能

③編寫Spring文件,對業務方法進行增強處理

④編寫代碼獲取帶有增強處理的業務對象

--添加相關jar文件:

--業務類:并實現特定接口,在該方法中并沒有實現日志輸出功能

ISomeService:

SomeService:

 

 --接下來就以AOP方式為該方法添加日志功能,編寫增強類

通過 MethodBeforeAdvice實現前置增強

通過AfterReturningAdvice實現后置增強

 

--Spring配置文件進行組件聲明。

注:頭文件需引入對應的aop

--接下來在Spring配置文件中實現Aop配置,首先定義切入點。execution是切入點指示符,它的括號中是一個切入點表達式,可以配置要切入的方法,切入點表達式支持模糊匹配

 

--測試類

標紅注意點:

 關于接口的一個問題:

如果一個類實現了一個接口,默認使用的代理是JDK動態代理

如果一個類沒有實現任何接口,默認使用的是cglib動態代理

 在這里倘若強轉的是類SomeService類,則會報如下錯誤:

 

 實現效果:

 

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()