javascript
(十一)Spring 基础注解(对象创建相关注解、注入相关注解)
注解編程
目錄
- 注解基礎概念
- 注解的作用
- Spring 注解的發展歷程
- Spring 基礎注解(Spring 2.x)
- 對象創建相關注解
- @Component
- @Repository、@Service、@Contoller
- @Scope
- @Lazy
- 生命周期注解 @PostConstruct、@PreDestroy
- 注入相關注解
- 用戶自定義類型 @Autowired
- JDK 類型
?
?
注解基礎概念
什么是注解編程?
- 在 類 或者 方法 上加入特定的注解(@xxx),完成特定功能的開發。
為什么要學習注解編程?
Spring 2.x 引入注解,Spring 3.x 完善注解,SpringBoot 普及、推廣 注解編程。
注解的作用
替換 XML 這種配置形式,簡化配置。
替換接口,實現調用雙方的契約性。
- 通過注解的方式,在功能調用者和功能提供者之間達成契約,進而進行功能的調用。因為注解的應用的更為方便靈活,所以在現在的開發中,更推薦通過注解的方式完成。
Spring 注解的發展歷程
目的:提供的這些注解只是為了某些 XML 的配置,作為 XML 開發的有益補充。
目的:徹底替換 XML,基于純注解
Spring 基于注解進行配置后,還能否解耦合呢?
- 在 Spring 框架應用注解時,如果對注解配置的內容不滿意,可以通過 Spring 配置文件覆蓋。
Spring 基礎注解(Spring 2.x)
這個階段的注解,僅僅是簡化 XML 的配置,并不能完全替代 XML。
對象創建相關注解
@Component
作用:替換原有 Spring 配置文件中的?<bean>?標簽
- id?屬性:在?@Component?中提供了默認的設置方式,首字母小寫(UserDAO --> userDAO)
- class?屬性:通過反射獲得的?class?的內容
@Component?細節:
- 如何顯式指定工廠創建對象的 id 值
- 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、@Qualifier?注解聯合實現?基于名字進行注入?[了解]
注入對象的 id 值,必須與?@Qualifier?注解中設置的名字相同
@Autowired?注解放置位置
- 放置在對應成員變量的 setter 方法上,調用 setter 方法賦值
- 直接放置在成員變量上,Spring 通過反射直接對成員變量進行賦值 [推薦]
JavaEE 規范中類似功能的注解
- JSR250 提供的?@Resource(name="userDAOImpl")?基于名字進行注入,
等價于?@Autowired?與?@Qualifier?聯合實現的效果。
注意:@Resource?注解如果名字沒有配對成功,會繼續?按照類型進行注入。 - JSR330 提供的?@Injection?作用與?@Autowired?完全一樣,一般用在 EJB3.0 中
JDK 類型
總結
以上是生活随笔為你收集整理的(十一)Spring 基础注解(对象创建相关注解、注入相关注解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (十)Spring 与 MVC 框架整合
- 下一篇: 怎么判断购买的电脑配置是不是新的或者真品