spring 核心特性:依賴注入和AOP
依賴注入:在創(chuàng)建對象的時候,系統(tǒng)會協(xié)調(diào)設(shè)定這個對象所依賴的第三方組件,對象無需關(guān)注和管理第三方組件。
AOP:面向切面編程,為了系統(tǒng)各項互相協(xié)調(diào)的服務(wù)松耦合。例如事務(wù)管理,日志管理,安全管理等。
Spring?容器:beanFactory?應(yīng)用上下文Context。
應(yīng)用上下文Context:
AnnotationConfigApplicationContext 基于java的配置類中加載Spring應(yīng)用的上下文
AnnotationConfigWebApplicationContext 基于java的配置類中加載Spring Web應(yīng)用的上下文
ClassPathXmlApplicationContext 從類路徑加載xml的spring上下文
XmlWebApplicationContext 從web應(yīng)用下加載xml的Spring上下文
裝配Bean:
自動化配置:java配置類使用注解@ComponentScan,如果是xml實現(xiàn)上下文,使用標(biāo)簽<context:component-scan></context:component-scan>,先開啟自動化掃描包下面的類。相關(guān)注解@Component,@Service等注解
基于java的顯示配置:主要是使用@Bean注解
基于xml的顯示配置:主要是使用<bean class="com.xxx.xxx"></bean>
Bean的生命周期:
1. 實例化bean
2. 注入bean相關(guān)引用
3. 如果實現(xiàn)了beanNameAware接口,調(diào)用setBeanName方法
4. 如果實現(xiàn)了beanFactoryAware接口,調(diào)用setBeanFactory方法
5. 如果實現(xiàn)了ApplicationContextAware接口,調(diào)用setApplicationContext方法
6. 如果實現(xiàn)了beanPostProcessor接口,調(diào)用postProcessorBeforeXXXX方法
7. 如果實現(xiàn)了initializingBean接口或者配置了<init-methid>標(biāo)簽,調(diào)用afterPropertieSet方法
8. 如果實現(xiàn)了beanPostProcessor接口,調(diào)用postProcessorAfterXXXX方法
9. 這個時候,該bean可以為應(yīng)用使用了。
10.如果實現(xiàn)了disposableBean接口或者配置了<destory-method>標(biāo)簽,調(diào)用destory方法
AOP理解:面向切面編程
通知(advice):前置通知,后置通知,返回通知,異常通知,環(huán)繞通知
連接點(diǎn)(Join point):應(yīng)用中可以 應(yīng)用通知的時機(jī)都叫連接點(diǎn)。
切點(diǎn)(pointcut):部分需要被通知的連接點(diǎn)。
切面(aspect):通知 + 切點(diǎn) 構(gòu)成切面。
引入(introduction):現(xiàn)有類中添加新的方法和屬性,使現(xiàn)有類有新的行為和狀態(tài)。
織入(waving):把切面應(yīng)用到目標(biāo)對象,并創(chuàng)建新的代理對象的過程。織入時機(jī):編譯期(aspectJ的編譯器),類加載期(AspectJ 5),運(yùn)行期(Spring AOP)