日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

(十一)Spring 基础注解(对象创建相关注解、注入相关注解)

發布時間:2023/12/3 javascript 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (十一)Spring 基础注解(对象创建相关注解、注入相关注解) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

注解編程

目錄

  • 注解基礎概念
  • 注解的作用
  • Spring 注解的發展歷程
  • Spring 基礎注解(Spring 2.x)
  • 對象創建相關注解
  • @Component
  • @Repository、@Service、@Contoller
  • @Scope
  • @Lazy
  • 生命周期注解 @PostConstruct、@PreDestroy
  • 注入相關注解
  • 用戶自定義類型 @Autowired
  • JDK 類型

?

?

注解基礎概念

什么是注解編程

  • 在 類 或者 方法 上加入特定的注解(@xxx),完成特定功能的開發。
@Component public class XXX{}

為什么要學習注解編程

  • 注解開發方便,代碼簡單, 開發速度大大提高。
  • 注解開發是 Spring 開發潮流
    Spring 2.x 引入注解,Spring 3.x 完善注解,SpringBoot 普及、推廣 注解編程。
  • 注解的作用

    替換 XML 這種配置形式,簡化配置。

    替換接口,實現調用雙方的契約性。

    • 通過注解的方式,在功能調用者和功能提供者之間達成契約,進而進行功能的調用。因為注解的應用的更為方便靈活,所以在現在的開發中,更推薦通過注解的方式完成。

    Spring 注解的發展歷程

  • Spring 2.x: 開始支持注解編程?@Component、@Service、@Scope…
    目的:提供的這些注解只是為了某些 XML 的配置,作為 XML 開發的有益補充。
  • Spring 3.x:?@Configuration、@Bean…
    目的:徹底替換 XML,基于純注解
  • Spring 4.x:?SpringBoot?提倡使用注解進行開發
  • Spring 基于注解進行配置后,還能否解耦合呢?

    • 在 Spring 框架應用注解時,如果對注解配置的內容不滿意,可以通過 Spring 配置文件覆蓋。

    Spring 基礎注解(Spring 2.x)

    這個階段的注解,僅僅是簡化 XML 的配置,并不能完全替代 XML。

    對象創建相關注解

    @Component

    作用:替換原有 Spring 配置文件中的?<bean>?標簽

    • id?屬性:在?@Component?中提供了默認的設置方式,首字母小寫(UserDAO --> userDAO)
    • class?屬性:通過反射獲得的?class?的內容

    @Component?細節:

    • 如何顯式指定工廠創建對象的 id 值
    @Component("u")
    • Spring 配置文件覆蓋注解配置內容
    applicationContext.xml <bean id="user" class="com.yusael.bean.User"><property name="id" value="10"/> </bean> id值、class值 要和 注解 中配置的一樣才會覆蓋, 否則 Spring 會創建新的對象。

    @Repository、@Service、@Contoller

    @Repository、@Service、@Controller?都是?@Component?的?衍生注解

    本質上這些衍生注解就是?@Component,通過源碼可以看見他們都使用了?@Component;

    它們的存在是為了:更加準確的表達一個類型的作用

    @Repository public class UserDAO {}@Service public class UserService {}@Controller public class UserController {}

    注意:Spring 整合 Mybatis 開發過程中,不使用?@Repository、@Component

    @Scope

    作用:控制簡單對象創建次數
    注意:不添加?@Scope,Spring 提供默認值?singleton

    XML 配置:

    <bean id="customer" class="com.yusael.Customer" scope="singleton | prototype"/>

    注解:

    創建單例對象 @Component @Scope("singleton") public class Customer {}創建多例對象 @Component @Scope("prototype") public class Customer {}

    @Lazy

    作用:延遲創建單實例對象
    注意:一旦使用?@Lazy?注解后,Spring 會在使用這個對象的時候,再創建這個對象。

    XML 配置:

    <bean id="account" class="com.yusael.Account" lazy="true"/>

    注解:

    @Component @Lazy public class Account {public Account() {System.out.println("Account.Account");} }

    生命周期注解 @PostConstruct、@PreDestroy

    初始化相關方法:?@PostConstruct

    InitializingBean <bean init-method=""/>

    銷毀方法:@PreDestory

    DisposableBean <bean destory-method=""/>

    注意:

    • 上述的兩個注解并不是 Spring 提供的,由?JSR(JavaEE規范)520?提供
    • 再次驗證,通過注解實現了接口的契約性

    注入相關注解

    用戶自定義類型 @Autowired

    @Autowired 細節

    @Autowired?注解?基于類型進行注入?[推薦]
    注入對象的類型,必須與目標成員變量類型相同或者是其子類(實現類)

    @Autowired private UserDAO userDAO;

    @Autowired、@Qualifier?注解聯合實現?基于名字進行注入?[了解]
    注入對象的 id 值,必須與?@Qualifier?注解中設置的名字相同

    @Autowired @Qualifier("userDAOImpl") private UserDAO userDAO;

    @Autowired?注解放置位置

    • 放置在對應成員變量的 setter 方法上,調用 setter 方法賦值
    • 直接放置在成員變量上,Spring 通過反射直接對成員變量進行賦值 [推薦]

    JavaEE 規范中類似功能的注解

    • JSR250 提供的?@Resource(name="userDAOImpl")?基于名字進行注入
      等價于?@Autowired?與?@Qualifier?聯合實現的效果。
      注意:@Resource?注解如果名字沒有配對成功,會繼續?按照類型進行注入
    • JSR330 提供的?@Injection?作用與?@Autowired?完全一樣,一般用在 EJB3.0 中

    JDK 類型

    總結

    以上是生活随笔為你收集整理的(十一)Spring 基础注解(对象创建相关注解、注入相关注解)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。