學習Spring筆記四

註解

除了使用xml方式配置實現注入(管理對象和對象之間的關係)操作之外,還可以用Annotation來提高我們寫代碼的靈活性和效率。

annotation方式給我們提供了一個最重要的功能:掃描!component-scan(不掃描怎麼知道你在哪個類加上了註解,提到註解就要想到掃描


實例

1.Spring中要使用annotation,需要在配置文件中增加配置,如下是完整的applicationtext.xml

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

 default-lazy-init="true" >

 
 <context:component-scan base-package="com.bjsxt"></context:component-scan>   <!-- context自動掃描com.bjsxt下的類 -->

<!--component-scan 組件掃描器,用了它後不用配置bean,spring會主動去搜索類,如果不用它,如果你寫了類不配置bean,容器是找不到bean的,

          起到了簡化配置文件的作用。但有一點,加了掃描器後,spring的啓動會變慢,因爲會先去掃描類,在項目啓動的時候會把IOC容器創建好。

      有的項目啓動得花一分鐘,解決辦法是在beans的開始標籤中加 default-lazy-init="true",在用的時候再實例化類-->
 
</beans>


2.UserDao.java

@Component //把普通pojo實例化到IOC容器中,相當於在IOC容器中new的UserDao,和在xml中配置bean是一樣的。

public class UserDao{

public UserDao(){

System.out.println("init.....");

}

public void add(){

System.out.println("add....");

}

}



3.UserAction.java

@Component //掃描的時候只會把這些帶了註解的類掃描進來,加個括號是給它改名字,默認是以這個類名爲名,@Component("ccc")

public class UserAction{

private UserDao userDao;


public UserDao getUserDao(){

return userDao;

}

@Resource(name="userDao")

public void setUserDao(UserDao userDao){

this.userDao = userDao;

}

public String add(){

userDao.add();

return null;

}

}


哪個類想進入IOC容器,只需要在它的類名上加@Component,然後在它要建立的關係的方法上寫@Resource(name="userDao"),如果你用的是set注入,就在set方法上加,要是你用的是構造器注入,就在構造器上加,就這麼簡單。用Annotation創建IOC容器的對象的方法就這句話就全講明白了!


4.接下來測試

Test.java

public class Test{

public static void main(String[] args){

ApplicationContext ac = new ClassPathXmlApplicationContext(

new String[ ]{"ApplicatioinContext.xml"}

);

UserDao userDao = (UserDao) ac.getBean("userDao");   //雖然在xml中沒有配置它,但是註解配置了,所以用getBean也是可以獲取的。

}

}

執行下看能不能打印初始化中的init

—————————註解 end—————————————————————

IOC講完啦,就這麼簡單,管理對象,new一下,給它賦值,建立關聯。夠了!


*******題外********

對象和對象之間的關係包括:
依賴:對象之間最弱的一種關聯方式,是臨時性的關聯。代碼中一般指由局部變量、函數參數、返回值建立的對於其它對象的調用關係
關聯:對象之間一種引用關係,比如客戶類與訂單類之間的關係。這種關係通常使用類的屬性表達。
聚合:表示has-a的關係,是一種不穩定的包含關係。聚合類不必對被聚合類負責。使用集合屬性表達

********************************************************




AOP面向切面編程 

核心思想是:彈性的設計,利用動態代理的底層實現,爲層與層之間,動態植入代碼。層和層之間有很多的調用關係。我們往裏面植入代碼,影響的是層和層之間的交流。

AOP是代碼重用的最佳案例。真正達到了寫一次用多次的效果。而且是可挺拔式的、插件式的。以前寫程序時是要寫個功能,需要到多個類裏面去修改,刪除時也要改動多個類。有了AOP就不用啦。爲避免這種情況,AOP是現在大型項目中必備的。


AOP主要應用於日誌記錄,性能統計,安全控制,事務處理等方面。AOP不是實現小功能的,它是用於實現公共設計代碼,如權限、系統日誌記錄、安全控制、事務的管理。新手一般接觸不到這方面的實現,或者是人家已經實現好了。AOP並不適合單一功能,所以叫面向切面編程。


一個請求來到服務器,會創建一個線程。這個線程會執行很多的方法,整個項目是由很多線程組成的。AOP是從業務流切入,加入功能,和代理很像。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章