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/