91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring對IOC的示例分析

發布時間:2021-08-20 10:07:16 來源:億速云 閱讀:159 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關Spring對IOC的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

一、IOC控制反轉和DI依賴注入

1.控制反轉,字面可以理解為:主動權的轉移,原來一個應用程序內的對象是類通過new去主動創建并實例化的,對對像創建的主動權在程序代碼中。程序不僅要管理業務邏輯也要管理對的象創建和依賴關系。這是很累的,也跟軟件工程 "低耦合高內聚" 的概念不十分符合。

Spring對IOC的示例分析

有了spring的ioc容器之后,對象的實例化和依賴關系管理都由IOC容器進行統一管理,主體類只要依賴ioc容器就夠了,需要啥,容器會給他注入進去,也就是只要聲明對象不用再主動去new,ioc容器幫忙把相應的對象注入到聲明對象中,使其變成實例化對象。(類似主體類提供一個軀體,ioc容器把靈魂注入進去,使其變成一個生命體,激活他),這樣創建對象的主動權就轉移交接了,

  Spring對IOC的示例分析

二、使用xml配置方式實現IOC

1.在ioc容器中配置了dao實現類和service類的bean,在容器加載的時候就會實例化這些bean到內存中。(bean.xml配置如下)

<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans.xsd
  ">

  <!-- BookDao Bean -->
  <bean id="bookDao" class="com.study.DaoImpl.BookDaoImpl"></bean>

  <!-- BookService Bean-->
  <bean id="bookService" class="com.study.Service.BookService">
    <!-- BookService中的聲明了BookDao對象,通過ref屬性將BookDao的bean注入到對象中 -->
    <property name="bookDao" ref="bookDao"/>
  </bean>
</beans>

2. service類中需要用到dao類的實例(正常情況下需要new一個dao類對象),但是用ioc容器接管后只需要聲明dao接口對象即可,然后寫一個dao對象的set方法。(要注入的對象必須要有set方法,否則將報錯 Bean property 'bookDao' is not writable or has an invalid setter method)因為spring注入是根據反射機制實現的,他在反射注入的時候會調用該方法名的set方法,如果set方法寫錯,或者根本沒寫,那么注入就會失敗。(BookService類如下)

public class BookService {
 private BookDao bookDao;

 public BookService() {
  System.out.println("BookService實例化");
 }

 public void setBookDao(BookDao bookDao) {
  System.out.println("BookService屬性初始化裝配成功");
  this.bookDao = bookDao;
 }

 public void storeBook(String bookname){
  System.out.println("圖書上架");
  System.out.println(bookDao.addBook(bookname));
 }
}

如上代碼:BookSerivce類需要用到BookDao對象,但是卻沒有new對象,只有一個set方法,這個set方法就是ioc容器注入的入口(必不可少),

3.此處我們用ApplicationContext作為容器,初始化配置文件,然后從容器中根據id名取出容器中已經幫我們實例化好的對象。

public class TestDmeo {
 BookService bookService;

 @Test
 public void testStoreBook(){
  System.out.println("容器初始化");
  ApplicationContext app = new ClassPathXmlApplicationContext("bean.xml");
  bookService = (BookService) app.getBean("bookService");//將對象注入到聲明好的BookService對象中。(bookService就是配置文件中的id)
  bookService.storeBook("Spring MVC");
 }
}

 Spring對IOC的示例分析

4.dao類和實現類如下:

接口類:

public interface BookDao {
  public String addBook(String BookName);
 }

實現類:

public class BookDaoImpl implements BookDao {

 public BookDaoImpl() {
  System.out.println("BookDao實例化");
 }

 public String addBook(String BookName) {
  return BookName+"添加成功";
 }
}

5.運行測試結果:

Spring對IOC的示例分析

6.大體思路如下圖:

Spring對IOC的示例分析

程序中除了初始化容器用了new對象,其余的基本沒有new的存在。

二、注解方式配置IOC

注解配置方式目的和xml配置的目的一樣,都是為了實現bean的創建。常用的注解如下:

@Component 在類定義之前添加@Component注解,他會被spring容器識別,并轉為bean。

@Repository 對Dao實現類進行注解 (特殊的@Component)

@Service 用于對業務邏輯層進行注解, (特殊的@Component)

@Controller 用于控制層注解 , (特殊的@Component)

裝配注解如下:

@Autowired 默認按照類型裝配注入,想按照名稱來裝配的話要結合@Quapfier(“name”)一起使用,使用@Autowired注解可以不用set方法。@Autowired 注釋進行自動注入時,Spring 容器中匹配的候選 Bean 數目必須有且僅有一個

@Quapfier("name") 中的name是bean的名字,也就是id,和@Autowired可以作為限定專配對象的名稱

@Resource 默認按照名稱裝配注入,當找不到對應名成的bean的時候就按照類型匹配,如果還是找不到的話就會報錯,@Autowired是spring提供的,@Resource是javaee提供,使用@Resource可以減少對spring的依賴

范例:

1.例子同上,只是配置bean的方式從xml文件中轉移到了代碼中,用注解體現。

Spring對IOC的示例分析

2.除了把配置文件中<bean id="" class=""/>變成對應的注解外,另外一個區別在于,bean.xml文件中的修改,需要做如下,配置才能夠使注解生效

Spring對IOC的示例分析

context的配置有如下方法:

1.僅掃描特定包下的特定類

<context:component-scan base-package="com.study" resource-pattern="Service/B*.class"/>

這是掃描Service包下B開頭的所有類。

2.使用<context:include-filter .../>和<context:exclude-filter .../>配置那些需要和不需要的掃描的包

Filter TypeExamples ExpressionDescription
annotationorg.example.SomeAnnotation符合SomeAnnoation的target class(注解類)
assignableorg.example.SomeClass指定class或interface的全名(指定確切的類或接口)
aspectjorg.example..*Service+AspectJ語法
regexorg\.example\.Default.*Regelar Expression  (正則表達式)
customorg.example.MyTypeFilterSpring3新增自定義Type,org.springframework.core.type.TypeFilter
<!-- 容器掃描包下的注解配置組件 -->
  <context:component-scan base-package="com.study" use-default-filters="false">
    <context:include-filter type="aspectj" expression="com.study.Service.*"/> <!-- 模糊過濾 -->
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Component"/><!-- 過濾指定的注解 -->
    <context:include-filter type="assignable" expression="com.study.Service.BookService"/><!-- 過濾指定的類或接口,路徑要完整,如果是接口的話,所有派生類都會被過濾 -->
    <context:include-filter type="regex" expression="com.*"/>
  </context:component-scan>

<context:exclude-filter ../>要配在<context:include-filter .../>的后面。

關于“Spring對IOC的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

蓬溪县| 中方县| 开化县| 怀化市| 贵溪市| 青田县| 伊金霍洛旗| 安仁县| 含山县| 甘肃省| 莎车县| 抚州市| 深泽县| 常宁市| 交城县| 淮阳县| 额济纳旗| 望城县| 定州市| 东明县| 南岸区| 西盟| 凤城市| 汉川市| 东至县| 衡东县| 江孜县| 腾冲县| 施甸县| 普格县| 荔浦县| 泸溪县| 延吉市| 霍林郭勒市| 临汾市| 容城县| 张家界市| 阿鲁科尔沁旗| 监利县| 定日县| 若羌县|