Spring泛型註入數據
註解:
@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>
<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泛型註入數據