天天看點

[Spring掃盲]---(1)IoC與DI---(2)ApplicationContext基礎配置

Author:趙志乾
Date:2019-01-27
Declaration:All Right Reserved!!!
           

1、ApplicationContext

BeanFactory是Spring依賴注入的核心,而ApplicationContext接口作為BeanFactory的擴充,其除了基礎的依賴注入功能,還提供了其他一些企業級應用常用的功能,比如事務管理、AOP、消息源國際化、事件處理等等。為此,在開發基于Spring的java應用程式時,更傾向于通過ApplicationContext接口來于Spring容器進行互動。

2、配置方式

BeanFactory使用示例中,我們使用了xml檔案進行Spring的配置。實際上,Spring除了支援使用xml配置之外,還支援使用注解進行配置以及使用java配置類進行配置。至于實際應用中,選用哪種配置,那就仁者見仁智者見智了。不過,通常而言,我們傾向于将應用程式的基礎結構(比如資料源、事務管理器、JMS連接配接工廠或JMX)定義在xml檔案中,将bean以及其依賴項配置使用注解來配置。

3、基礎配置(暫不讨論java配置類方式)

無論時采用xml配置還是使用注解,這兩種方式都需要使用xml來做一些最基礎的配置。

使用xml進行配置時,需要為beans标簽聲明應用程式中所用到的Spring命名空間。如果隻是用Spring的bean命名空間,則其基礎配置如下,除了bean命名空間外,Spring還有大量用于其他用途的命名空間,比如用于支援AOP的aop命名空間和用于支援事務的tx命名空間等等,具體需要引入哪些命名空間,視具體應用而定。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:c="http://www.springframework.org/schema/c"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>
           

使用注解進行配置時,需要在xml中使用如下的基礎配置。其中,<context:component-scan>标簽用于告知Spring掃描哪些代碼。在應用啟動過程中,Spring會将掃描到使用注解@Component、@Service、@Repository、@Controller的類納入Spring的Bean容器進行管理,并按照注解@Resource、@Autowired、@Inject指定的依賴項配置完成Bean容器中管理Bean的依賴配置。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:c="http://www.springframework.org/schema/c"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">


        <context:component-scan base-package="com.spring.di"/>

</beans>
           

注:<context:component-scan>标簽中的base-package屬性支援使用分号、逗号或空格作為分隔符,進行配置多個掃描包。此外,該标簽還支援指定掃描時包含和排除規則,進而對掃描過程進行更細粒度的控制。比如:指定Spring在掃描指定包時,忽略表達式中指定類型的類,配置方式如下。除了指定排除過濾器,還可以指定包含過濾器。

<context:component-scan base-package="com.spring.di">
    <context:exclude-filter type="annotation"
        expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
           

參考資料:《Spring5進階程式設計》