spring中文參考手冊-核心技術_ioc

https://docs.spring.io/spring/docs/5.1.1.RELEASE/spring-framework-reference/core.html#spring-corehtml

  spring框架最重要的是ioc容器,接着是aop。而後是官方對spring的吹牛逼,這裏就不翻譯了。java

spring ioc 反射 核心:web

java.lang.Class

1,ioc框架spring

   1,1 spring ioc框架和beans的介紹數據庫

    ioc,控制反轉,也叫依賴注入{DI},定義一個過程所需的依賴項。org.springframework.beans 和 org.springframework.context是spring的基石。BeanFactory 接口提供對任何類型對象的配置管理能力。ApplicationContext是beanFactory的子接口,提供了:apache

   集成aop特徵;api

       消息資源處理tomcat

      事件發佈;安全

       應用層上下文app

2, spring bean

 通俗話說就是 根據java 反射機制,由spring ioc容器 根據對象名實例化對象。ioc中的bean,必須有無參構造

  對象的實例化,須要關注對象的元數據一下3個信息

  a,如何建立一個bean;

  b,bean的生命週期的詳細信息;

 c,bean的依賴關係;

上述全部的配置元數據轉換成一組構成每一個 bean 定義的下列屬性。

屬性 描述
class 這個屬性是強制性的,而且指定用來建立 bean 的 bean 類。
name 這個屬性指定惟一的 bean 標識符。在基於 XML 的配置元數據中,你可使用 ID 和/或 name 屬性來指定 bean 標識符。
scope 這個屬性指定由特定的 bean 定義建立的對象的做用域,它將會在 bean 做用域的章節中進行討論。
constructor-arg 它是用來注入依賴關係的,按照構造體方式賦值
properties 它是用來注入依賴關係的,對象的屬性。
autowiring mode 它是用來注入依賴關係的,自動裝配,只適用於ref
lazy-initialization mode 延遲初始化的 bean 告訴 IoC 容器在它第一次被請求時,而不是在啓動時去建立一個 bean 實例。
initialization 方法 在 bean 的全部必需的屬性被容器設置以後,調用回調方法。它將會在 bean 的生命週期章節中進行討論。
destruction 方法 當包含該 bean 的容器被銷燬時,使用回調方法。它將會在 bean 的生命週期章節中進行討論。

依賴注入內容能夠是:property,ref, list,set,array

proerty value="",type=int;複製屬性類型是int;

賦予null

<property name="name">

    </null>

</property>

 賦予""

<property name="name">

    <value></value>

</property>

自動裝配:autowire="byName|byType|byConstruct|no"

byName:

<bean id="course" class="xxx.xxx.xxx.course" autowire="byName">

</bean>

course類中有一個ref屬性teacher(屬性名),而且該ioc容器中剛好有一個bean的id名稱同屬性值,則自動裝配該屬性;

byName本質是byId

byType,自動尋找其它bean的類型是否與該類的屬性類型一致;

byConstruct:其它bean的類型(class)  是否與 該Course類的構造方法參數 的類型一致:此種方式的本質就是ByType; 

byName,byType,byConstruct容易形成混亂,大工程不建議用.

 

使用註解配置bean:

1,在類頭部加註解,申明該類須要放入容器

@Component("studentDao")

2,在application.xml掃描對應包

<--配置掃描器-->

<context:component-scan base-pacakge="com.aaa.dao">

</context:component-scan>

spring在啓動的時候,會根據base-pacakge在該包中掃描全部類,查找component,加入ioc容器中;

 

@Component細化:

dao層:@Repository

service層:@Service

控制器層:@Controller

repository,service,controler三個做用和component做用是同樣的,只是爲了顯示這個類在哪一層.

 

使用註解實現事務(聲明式事務)

目標:經過事務,事務要麼全成功,要麼全失敗;

application.xml 配置事務管理器,增長對事務的支持

<bean id="txManager" class="Data"

<tx:annotation-driven transaction-manager="txManager"/>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value=""></property>
        <property name="url" value=""></property>
        <property name="username" value=""></property>
        <property name="password" value=""></property>
        <property name="maxActive" value="1"></property>
        <property name="maxIdle" value="1"></property>
    </bean>

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!--增長對事務的支持-->
    <tx:annotation-driven transaction-manager="transactionManager"/>

在處理數據庫的dao函數前面,添加@Transaction;

事務:

只讀事務:一次執行屢次查詢來統計某些信息,這時爲了保證數據總體的一致性,要用只讀事務;

 

日誌模塊:

spring boot 自動繼承log4j,引入maven spring boot自動引入log4j;

類引入日誌例子:

private static Logger logger = LoggerFactory.getLogger(DemoApplication.class);

日誌代碼文件配置,配置位置:application.properties:

logging.file=logger.log

 

spring-web.jar在tomcat啓動時,經過監聽器把IOC容器啓動,並把context傳過去.

web.xml

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

拆分配置多個applicationContext:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml,
        /WEB-INF/applicationContext_service.xml,
        /WEB-INF/applicationContext_controller.xml,
        /WEB-INF/applicationContext-*.xml,</param-value>
</context-param>

spring  頁面安全認證:

https://spring.io/guides/gs/securing-web/

http://blog.didispace.com/Spring-Boot%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/

相關文章
相關標籤/搜索