1. 程式人生 > >Spring基於註解 的IOC的依賴注入

Spring基於註解 的IOC的依賴注入

新建 project maven## 標題

初識 註解的 開發 是:將 熟悉的 xml 結合的 完成學習的

–>(需要官方的文件支援 沒有:不能執行)
》AOPjar包 的 -----xml 的配置–告知Spring要掃描的 包
xml 約束 檔案 ----》要的標籤 在 Framwork 核心檔案 xmlns:Context
在bean.xml 裡
告知Spring 在建立容器 要掃描 的包===============》關鍵要有的官方的文件=======》
context 名稱空間 的約束======去Spring的官方 文件 裡去找
找到我們上一次瀏覽的 並收藏的額 Spring官方文件 進入core
注意 chrome : 線上會有翻譯的
===ctrl+F搜尋xmlns:context
copy :內容 (將原來的 換做 context 的xml)

<?xml version="1.0" encoding="UTF-8"?>




<context:component-scan base-package=“com.fhw”></context:component-scan>


準備 還是在之前的基礎上

使用註解------> 建立物件
@component 屬性:value 預設的 預設的改註解所在類的首字母小寫
當@component裡寫的指定的字串是 main方法裡的 getBean(就要與對應寫的一樣)
當@Component沒有值的時候 ,
在main方法裡getBean()裡的字串值 :寫註解 的 類: 名首字母:改小寫(實際中還是大寫的)
getBean(): 用於指定要執行的類(首字母小寫)
註解的裡值的注意: 一個值得時候 value 不寫就行(value 可省略)
多個值的時候:就要分別的value指定

建構函式裡的:輸出語句:----》你這時不寫 getBean()也是可以執行的-----》

dao持久層

package com.fhw.dao;
/* 賬戶持久層介面*/
public interface IAccountDao {
/* 模擬儲存賬戶的操作*/
void saveAccount();
}

-------dao實現類 們

package com.fhw.dao.impl;

import com.fhw.dao.IAccountDao;
import org.springframework.stereotype.Repository;

import java.lang.annotation.Retention;

/* 賬戶持久層實現類* /

1

@Repository(“accountDao1”)
public class IAccountDaoImpl implements IAccountDao {

public void saveAccount() {
   System.out.println("accountDao1:--- getBean(使用註解 完成 :儲存了賬戶");
}

}

—2

package com.fhw.dao.impl;

import com.fhw.dao.IAccountDao;
import org.springframework.stereotype.Repository;

import java.lang.annotation.Retention;

/* 賬戶持久層實現類*/
@Repository(“accountDao1”)
public class IAccountDaoImpl implements IAccountDao {

public void saveAccount() {
   System.out.println("accountDao1:--- getBean(使用註解 完成 :儲存了賬戶");
}

}
《這2個 類 是: 為 了演示 在下面 Service 呼叫@Autowired:
public class IAccountServiceImpl implements IAcconutService
@Autowired
//位置: 變數上 方法上
private IAccountDao accountDao1;
-----------------------》
自動 按照型別 注入
只要容器中唯一的bean物件型別的 和要注入的變數型別匹配,就可以注入成功
當 多個型別相同的時候 就會 根據 變數名 去匹配(變數名就是 ===註解 的值)
@Autowired:位置: 變數上 方法上》
|例: @Autowired()
| private IAccountDao accountDao2; // private IAccountDao accountDao1;
-----------------》
| @Repository(“accountDao1”)
| public class IAccountDaoImpl implements IAccountDao {
| @Repository(“accountDao2”)
| public class IAccountDaoImpl2 implements IAccountDao {

@Qualifier
當有了: @Qualifier 就可以指定 要實現 的 註解 要與 @Autowired() 在一起 : 才有作用
//位置: 變數上 方法上
例: | @Autowired
| @Qualifier(“accountDao1”)//(這裡做了 指定)
| private IAccountDao accountDao; (不用改了)
@Resource @Resource : 按照bean的id 注入 --》獨立使用
:屬性: name 指定bean 的id

例 |@Resource(name = “accountDao2”)
|private IAccountDao accountDao=null;

service------業務層

package com.fhw.service.impl;

import com.fhw.dao.IAccountDao;
import com.fhw.dao.impl.IAccountDaoImpl;
import com.fhw.service.IAcconutService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

/*:曾經的 xml 配置

scope=“” init-method=“” destroy-method>
<property name="" value="" / ref="">

我們對應 xml 配置來看: Annotation直接的配置
annotation 的 @ 標識的功能是什麼
1:@component-用於 建立 的物件的

L在配置檔案裡建立 編寫一個bean配置檔案 的功能是一樣的id 與 Class 的完成:
@component : 用於 建立 的物件的 位置 : 類上面
@component 屬性:value 預設的 預設的改註解所在類的首字母小寫
當@component裡寫的指定的字串是 main方法裡的 getBean(就要與對應寫的一樣)
當@Component沒有值的時候 ,你這時不寫 getBean()也是可以執行的-----》
在main方法裡getBean()裡的字串值 :寫註解 的 類: 名首字母:改小寫(實際中還是大寫的)
getBean(): 用於指定要執行的類(首字母小寫)
註解的裡值的注意: 一個值得時候 value 不寫就行(value 可省略)
多個值的時候:就要分別的value指定
多層 分別的時候的 3個註解
@controller:----》表現層
@Service:---->業務層
@Repository:----》持久層
他們 都能實現原因是: 底層extends了component 的

2:-----用於 注入的資料 的 :就是xml 的property 裡的 改變作用範圍 或constructor-arg
注入:@Autowired:自動 按照型別 注入
只要容器中唯一的bean物件型別的 和要注入的變數型別匹配,就可以注入成功
當 多個型別相同的時候 就會 根據 變數名 去匹配
@Autowired:位置: 變數上 方法上
@Qualifier:在類中注入基礎上在按照 名稱注入 ,類裡要搭配在@Autowired
但是: 方法的引數裡 是 :單獨 作用 (後面再講)
屬性: value 指定注入bean的id的
3:改變作用範圍的 —scope 的屬性是一樣的:
4: 和生命週期相關的: 在bean 標籤的裡 init-method 和destroy
/
@Service(“accountService”)
//@Component()
public class IAccountServiceImpl implements IAcconutService{
@Autowired//只要容器中唯一的bean物件型別的 和要注入的變數型別匹配
//位置: 變數上 方法上
private IAccountDao accountDao1;
/
public IAccountServiceImpl() {
accountDao.saveAccount();
System.out.println(" 構造方法裡: 使用 @Component 與 xmlns:omtext 來完成註解功能 " );
}
*/
public void saveAccount() {
accountDao1.saveAccount();
// System.out.println(" main 裡 呼叫 getBean 使用 @Component 與 xmlns:omtext 來完成註解功能");
}
}

測試=------main

package com.fhw.ui;

import com.fhw.service.IAcconutService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Client {
/**
*

  • @param args
    */
    public static void main(String[] args) {

    //獲取 spring 的核心容器物件: 引數就是 bean.xml
    ApplicationContext ac=new ClassPathXmlApplicationContext(“bean.xml”);

    IAcconutService as = (IAcconutService)ac.getBean(“accountService”);

as.saveAccount();

}
}

–基本資料型別的就是value
–改變作用範圍以及和生命週期相關的註解--------------》

@scope : 用於類 的位置 ====》瞭解
制定與 初始化 與銷燬的
@PostConstruct作用:用於指定初始化方法。 @PreDestroy作用:用於指定銷燬

============= ${}: 使用範圍 :==========
在jquery 裡的就是4個域物件
在Spring裡就是 基本資料型別的 el 表示式