1. 程式人生 > >Spring框架總結(筆面試題)

Spring框架總結(筆面試題)

目錄

 

Spring

1.談談Spring

2.Spring包含JavaEE中三層每一層的解決方案

3.Spring 框架的優點

4.首先需要匯入的4個包

5.IOC:控制反轉,將原本在程式中手動建立物件的控制權交給了Spring框架來管理。

6.DI:依賴注入,在Spring負責建立Bean物件時,動態的將依賴物件屬性注入到bean元件

7.IOC和DI的區別

8.BeanFactory介面和ApplicationContext介面的區別

9.Spring提供配置Bean的三種例項化方式

10.元素的id屬性和name屬性的區別

11.Bean元素的作用域

12.   Bean的初始化和銷燬

13.Bean 屬性的依賴注入

14.集合的注入

15.XML檔案的引入

16.註解形式進行開發  @Component     

17.三個衍生註解 

18.屬性注入

19.Bean的初始化和銷燬(註解)

20.Bean 的作用範圍

21.是否直接可以在Servlet中載入Spring配置檔案

22.AOP底層實現

23.代理模式

24.JDK動態代理只是針對於介面

25.常見概念

26.AOP的五類通知

27.常用註解

28.Spring 對事物的管理

補充

1.Spring中的模式:代理,工廠模式,模板模式    

2.log4j日誌級別:

3.Spring 可以幫我們做什麼

4.BeanFactory的實現類

5.Spring配置檔案有什麼用

6.IOC的優點,降低程式碼量,簡化程式設計

7.ApplicationContext的實現類

8. 什麼是Spring Beans

9.Spring的內部Bean

10.什麼是bean的自動裝配

11.自動裝配

12.SpringAOP中,關注點和橫切關注點的區別是什麼


Spring

1.談談Spring

  Spring是分層的JavaEE/SE的一站式的輕量級的開源框架,是為了簡化企業級開發應用而誕生的,其核心是IOC和AOP,IOC是控制反轉,AOP是面向切面程式設計,Spring框架提供了JavaEE每一層的解決方法,web層:SpringMVC ,業務層:SpringBean、事務管理,AOP,持久層:jdbcTemplate、ORM框架等如:MyBatis和Struts2等,利用Spring框架,可以讓開發者通過配置檔案建立和組裝物件及物件之間的依賴關係,Spring面向切面程式設計,可以幫助開發者無耦合實現日誌記錄,許可權管理,效能分析,事務管理等。

2.Spring包含JavaEE中三層每一層的解決方案

   Web層 :SpringMVC

   業務邏輯層:SpringBean管理、AOP、事務管理

   資料持久層:SpringJDBCTemplate、ORM模組  

3.Spring 框架的優點

  (1)方便解耦,簡化開發:Spring是一個大場,可以將所有物件的建立和依賴關係的維護都交給Spring來管理

  (2)AOP程式設計的支援:Spring提供面向切面程式設計,可以方便的對程式進行許可權攔截、執行監控等

  (3)宣告式事務的管理:只需要通過配置就可以完成對事務的管理,而無需手動程式設計

  (4)方便程式的測試:支援junit4

  (5)方便整合各種優秀的框架

  (6)降低了JavaEE API的使用難度

4.首先需要匯入的4個包

       bean(提供框架基礎部分,控制反轉和依賴注入) 

       core(常用工具類)

       context(拓展類)

       expression -Spring表示式語言包

5.IOC:控制反轉,將原本在程式中手動建立物件的控制權交給了Spring框架來管理。

6.DI:依賴注入,在Spring負責建立Bean物件時,動態的將依賴物件屬性注入到bean元件

7.IOC和DI的區別

   (1)IOC是將原來物件的建立權交給了Spring框架來管理

   (2)DI是指在Spring負責建立Bean物件時,將依賴屬性通過配置注入到bean元件當中

   (3)DI依賴於IOC

8.BeanFactory介面和ApplicationContext介面的區別

  (1)ApplicationContext藉口繼承BeanFactoy介面,Spring核心工廠是BeanFactory

       BeanFactory採取延時載入,第一次getBean時才會初始化Bean

  (2)ApplicationContext是在載入配置檔案的時候初始化Bean,ApplicationContext是對

       BeanFactory的擴充套件

9.Spring提供配置Bean的三種例項化方式

  (1)使用構造器例項化

  <bean id="bean1" class="com.guigu.hello.Bean1"></bean>

  (2)使用靜態工廠方法例項化   

<bean id="bean2" class="com.guigu.hello.Bean2">

          factory-method="getBean2"

</bean>

public   static  BeangetBean2(){

    return new Bean();

 }

 其中:class表示的是類的全名稱,factory-method表示的是靜態方法

  (3)使用例項工廠方法例項化  

  <bean id="beanfactory" class="com.guigu.hello.Bean3"></bean>

  <bean id="bean3"  factory-bean="beanfactory"></bean>

       public   Bean   getBean3(){

              return new Bean();

              }

10.<bean>元素的id屬性和name屬性的區別

   (1)通常指定id屬性作為Bean的名稱

   (2)id屬性必須是唯一的

   (3)id屬性的命名服從XML對ID屬性的命名規範

   (4)如果Bean的名稱中含有特殊字元,就需要使用name屬性

   (5)name屬性可以重複,後出現的Bean會覆蓋之前出現的Bean

11.Bean元素的作用域

   scope=“singleton”單例,在SpringIOC容器中僅存有一個Bean例項

   scope=“prototype”多例,每次呼叫getBean()時,都獲得一個新的例項

   scope=“request” 用於web開發中,該作用域適用於WebApplicationContext環境當中

   scope=“session” 用於web開發中,同樣,適用僅適用於WebApplicationContext環境當中

   scope=“globalSession”一般用於Porlet應用環境 ,僅適用於WebApplicationContext環境當中

12.   Bean的初始化和銷燬

 <bean id="bean" class="com.guigu.hello.bean" init-method="setup" destory-method="teardown"></bean>

       通過 init-method 指定Bean的初始化方法,通過 destroy-method 指定Bean銷燬方法

       destroy-method 只對 scope="singleton" 有效,銷燬方法,必須關閉ApplicationContext物件

13.Bean 屬性的依賴注入

   (1)建構函式注入        

<bean id="car1" class="com.guigu.hello.car1">

     <constructor-agr index="0" value="保時捷"></constructor-agr>

</bean>

   (2)屬性setter方法注入

<bean id="car2" class="com.guigu.hello.car2">

      <property name="name" value="保時捷"></property>

      <property name="price" value="1000"></property>

</bean>

   (3)複雜型別注入  

          <bean id="car2" class="com.guigu.hello.car2">

                  <property name="name" value="保時捷"></property>

                     <property name="car1" ref="car1"></property>

               </bean>

        <property name=""></property>

      

   (4)p空間的使用

       <bean id="person"class="com.guigu.hello.Person">

            <property name="name" value="李四"></property>

            <property name="car" ref="car2"></property>

       </bean>

       改寫     

<bean id="person" class="com.guigu.hello.Person"  p:name="李四" p:car-ref="car2"></bean>

   (5)EL表示式

           1.完成物件的注入

                  <bean id="car"class="com.guigu.hello.car>

                       <property name="car2" ref="car2"></property>

                     </bean>

           改寫為

                 <bean id="car"class="com.guigu.hello.car>

                       <property name="car2" value="#{car}"></property>

                     </bean>

           2.使用另外一個Bean屬性完成注入

<bean id="carInfo" class="com.guigu.spring.e_di.CarInfo"></bean>

<bean id="car2_2" class="com.guigu.spring.e_di.Car2">

       <property name="name" value="#{carInfo.name}"></property>

</bean>

              3.使用另外一個Bean方法完成注入      

<bean id="carInfo" class="com.guigu.spring.e_di.CarInfo"></bean>

<bean id="car2_2" class="com.guigu.spring.e_di.Car2">

        <property name="price" value="#{carInfo.getPrice()}"></property>

</bean>

14.集合的注入

    (1)List集合           

      

<property name="hubbies">

                  <list>

                     <!-- <value>注入簡單型別,<ref />注入複雜型別 -->

                       <value>爬山</value>

                       <value>游泳</value>

                     </list>

</property>

    (2)set集合

      

            <property name="num">

                  <set>

                     <!-- <value>注入簡單型別,<ref />注入複雜型別 -->

                       <value>10</value>

                       <value>2</value>

                     </set>

               </property>

       (3)Map集合

      

           <property name="map">

                  <!-- 複雜型別<entry key-ref="" value-ref=""></entry> -->

                     <entry key="name" value="guigu"></entry>

                     <entry key="name" value="guigu"></entry>

                     <entry key="adress" value="杭州"></entry>

                     </map>

            </property>

15.XML檔案的引入

(1)

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans1.xml", "beans2.xml");

(2)

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

在applicationContext.xml 中

<import resource="classpath:bean1.xml"/>

<import resource="classpath:bean2.xml"/>

16.註解形式進行開發  @Component     

17.三個衍生註解 

            @Controller (表現層)  @Services(業務層) @Repository(持久層)

18.屬性注入

   (1)簡單屬性注入@Value 

         @Service("UserService")

          public class UserService{

                 @Value("張三")

                 private String name;

          }

   (2)複雜屬性注入@Autowired

       @Service("UserService")

          public class UserService{

                 @Autowired("UserDao")

                 private UserDao userDao;

          }

          @Repository("UserDao")

          public class UserDao{

               

          }

   (3)指定名稱注入@Resource

       @Resource(name="userDAO")

          private UserDAO userDAO ;

19.Bean的初始化和銷燬(註解)

       @PostContruct 初始化

       @PreDestroy  銷燬

20.Bean 的作用範圍

    @Scope(value="prototype")  //預設為singleton

21.是否直接可以在Servlet中載入Spring配置檔案

       每次請求都會載入Spring環境,初始化所有Bean ,產生效能問題!

22.AOP底層實現

       AOP底層使用JDK動態代理和CGlib的動態代理  

       面向物件程式設計中,我們將事物縱向抽象成了一個個物件。而在面向切面程式設計中,我們將

       物件的某些相似的方法橫向抽成一個切面,對這個切面進行許可權控制,事務管理,記錄日誌等操作。

23.代理模式

  抽象角色:宣告真實角色和代理角色的共同介面

  代理角色:對真實物件進行封裝

  真實角色:我們最終要引用的物件

24.JDK動態代理只是針對於介面

25.常見概念

  JoinPoint:連線點,指那些被攔截到的點,Spring實際中攔截到的是方法

   Pointcut:切入點,指我們要對那些Joinpoint進行攔截,可以是一個或者一組

   Advice:增強/通知,攔截到連線點後要做的事情

   Target:目標物件,要代理的目標物件

   Weaving:織入,指把增強應用到目標物件來建立新的代理物件的過程

   Proxy:代理,一個類被AOP織入增強後,就產生了代理結果類

   Aspect:切面,是切入點和通知的結合,一個切面可以由多個切點或者通知組成

26.AOP的五類通知

  (1)前置通知:MethodBeforeAdvice

  (2)後置通知:AfterReturningAdvice

  (3)環繞通知:MethodInterceptor

  (4)異常通知:ThrownAdvice

  (5)引介通知

27.常用註解

   @AspectJ常用註解

   @Aspect 定義切面

   @Before 前置通知:MethodBeforeAdvice

   @AfterReturning後置增強:AfterReturningAdvice

   @Around:環繞通知,MethodInterceptor

   @AfterThrowing 異常通知,ThrowAdvice  

28.Spring 對事物的管理

  (1)程式設計式事物管理

  (2)宣告式事物管理

    第一步:在需要管理事物類上或者方法上新增@Transactional

       第二步:在ApplicationContext.xml中配置

補充

1.Spring中的模式:代理,工廠模式,模板模式    

2.log4j日誌級別:

       致命錯誤(fatal)->普通錯誤(error)->警告(warn)->資訊(info)  ->除錯(debug)-> 堆疊(trace)

3.Spring 可以幫我們做什麼

  (1)Spring可以根據配置檔案建立及組裝物件之間的依賴關係

  (2)Spring面向切面程式設計可以幫助我們無耦合實現日誌記錄,事務管理,效能分析等操作

  (3)整合第三方框架

4.BeanFactory的實現類

    XmlBeanFactory、ApplicationContext

5.Spring配置檔案有什麼用

  Spring配置檔案是個XMl檔案,包含了類資訊,描述瞭如何配置他們,以及相互之間如何呼叫

6.IOC的優點,降低程式碼量,簡化程式設計

7.ApplicationContext的實現類

   ClasspathXMLApplicationContext、WebXmlApplicationContext

8. 什麼是Spring Beans

  Spring beans 是那些形成Spring應用的主幹java物件,它們被Spring IOC容器初始化,裝配和管理

9.Spring的內部Bean

   當一個Bean僅僅被用作另一個bean的屬性時,他就是一個內部bean 

10.什麼是bean的自動裝配

  無須在Spring配置檔案中描述JavaBean之間的依賴關係,IOC容器自動建立javaBean之間的關聯關係

11.自動裝配

    (1)no:預設的方式是不進行自動裝配,通過顯式設定 ref 屬性來進行裝配

       (2)byName:通過引數名自動裝配

       (3)byType::通過引數型別自動裝配

12.SpringAOP中,關注點和橫切關注點的區別是什麼

  關注點是應用中一個模組的行為,一個關注點,可能會被定義成一個我們想要實現的功能。橫向關注點是一個整個應用都會使用的功能,影響整個應用,比如日誌等。