1. 程式人生 > >Spring泛型註入數據

Spring泛型註入數據

ans 出現 通知 名稱 spring容器 不能 ice integer art

註解:

@Autowired(required=true)

required=false 告訴Spring容器,找不到匹配的bean時 控制臺不會報錯

required=true 告訴Spring容器,找不到匹配的bean時 控制臺拋出異常

面試題:在bean標簽中,ID和name屬性,有啥區別?(https://blog.csdn.net/dys1990/article/details/6755317)

  

簡單的說:id用來標識bean,是唯一的,且只有一個;name定義的是bean的alias,可以有多個,並可能與其他的bean重名。

詳細的說:

id是唯一標識bean.不能用特殊字符:×#@ ,不能用數字開頭。在bean引用的時候只能用id指向你需要的bean;

name 可以用特殊字符,並且一個bean可以用多個名稱:name=“bean1,bean2,bean3”,用逗號隔開。

通過id和name都可以取出該Bean.

@Autowired 和@Resource

  @Autowired可以出現的地方@Resource也可以出現 。

  作用一樣,但廠家不一樣。@Autowired 是Spring的 import org.springframework.beans.factory.annotation.Autowired;

   @Resource 是JavaEES的 import javax.annotation.Resource; (1)他的註解要求提供一個bean屬性的名字 ,若屬性為空,則自動采用註解標註的名字或方法名作為bean的名稱。沒有標註,默認按名稱進行裝配(註入對象),如果找不到與之匹配的名字,則按類型進行匹配

如果name屬性一旦指定,則必須按名稱進行裝配,就不會有如果名字對應不上,則按照類型裝配一說

面試題:@Autowired 和@Resource的區別:

都用來註入數據。對象的(裝配bean的) 可以卸寫在字段上 set方法上

@Autowired 默認按類型裝配   @Autowired 關聯兩個層

@Resource默認按名稱進行裝配

<!--
全註解
-->
<!-- 用@Autowired就得寫 這個 註解配置 --> 加代碼註解
<context:annotation-config></context:annotation-config>

<!-- 掃描指定文件夾,將掃描到的文件交給Spring容器進行bean管理--> 實例化對象交給備案管理
<context:component-scan base-package=""></context:component-scan>

@Repository // @Repository 倉庫 實例化dao 層對象 (寫到實現類上)

@service

Spring 根據註解 執行 controller 層 ------service層--------dao層

實體類註解: @Component 組件的意思 這裏是把。。。實例化對象 如果是實體類,則在Spring中,也是在需要的時候,在Spring容器中納入管理的,那麽必須使用Spring註解

1.泛型依賴註入數據:

  

Base Service<T> 泛型 T 形參 可以放任意類型 BaseRespositroy<T> 被Base Service<T> 調用 ---------> 引用

3.

  兩個基類,分別是BaseService和BaseRespository,帶有泛型的2個類中,會定義一些我們常用的方法:save update,delete 等等

2)BaseService和BaseRespository 存在一個引用關系,以便在BaseService中調用BaseRespository.

3)綜上:UserService與UserPeposity

二、2019.2.25 Aop 面向切面編程

public class Security {

//切面 public void checkSecurity(String username,String psw){ //通知 System.out.println("進行安全檢查 "+username+" "+psw); } }

配置文件如下

<bean id="security" class="com.cstp.service.Security" />

<!-- 定義切面對象 --> <bean id="userManager" class="com.cstp.service.UserManagerImpl" /> <!-- 創建接口實現類對象 -->

<aop:config>

<!--所有的切面和通知都必須定義在aop:config元素內部 --> <aop:aspect ref="security"> <!-- 配置切面 -->

<!-- 聲明切入點 -->

<aop:pointcut id="userManagerPointcut" expression="execution(* com.cstp.service..*.save*(..)) and args(username,psw)"/>

<!--聲明前置通知,在匹配方法執行前運行--> <aop:before method="checkSecurity" pointcut-ref="userManagerPointcut"/> </aop:aspect> </aop:config>

------------------------------------------------------------------

<!-- 聲明切入點 -->

<aop:pointcut id="userManagerPointcut"

expression="execution(* com.cstp.service..*.save*(..)) and args(username,pwd)"/>

expression:表達式 (* com.cstp.service..*.save*(..)) 第一個 * 表示 方法的返回值 運行service 包下的所有的類的所有的以save開頭的方法 必須傳兩個參數(和檢測方法有關)

args(username,pwd) args 是檢測方法傳的參數

那對象進行關聯 對對應 基型 的關系關聯 關聯指定 的這個對象 ref="security" 所在的這個類的 這個方法 checkSecurity運行

------------------------AOP註解-------------------------------------------------

https://www.cnblogs.com/tina-smile/p/5056174.html

public class Test {
    public static void main(String[] args) {
        Integer[] a = {1,2,3,4};
        List list = Arrays.asList(a);
        System.out.println(list.size());  //4
    }

}

普通的類 交給Spring容器管理 @compnent

Spring泛型註入數據