spring框架是一個用於一站式構建企業級應用程序的輕量級解決方案。但spring框架是經過模塊化的方式構成,容許咱們只使用須要的部分。spring框架的兩大核心:IOC與AOP。html
1.導入相關的jar包web
maven方式下只須要引入spring-context就能夠導入相關的jar包spring
2.編寫spring核心配置文件applicationContext.xmlexpress
3.編寫測試類,實例化容器編程
經過new ClassPathXmlApplicationContext方法數組
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
而後經過實例化容器的gerBean()方法來獲取實例服務器
Test bean = context.getBean(Test.class);
IOC就是控制反轉,不是一種編程方法,而是一種編程思想。就是把對象的建立過程交給spring ioc容器去管理app
Spring IoC容器管理一個或多個bean。這些bean是使用您提供給容器的配置元數據建立的(例如,以XML <bean/>
定義的形式 )。框架
Bean的初始化方式有三種maven
1.實例化工廠
2.靜態工廠
3.構造方法
DI:就是依賴注入,在IOC容器建立對象的時候,初始化內部屬性,來定義它們的依賴關係
自動裝配:簡化xml配置
byName:根據"set" + 屬性名首字母大寫去查找對應的set方法,若是找到了,則調用該方法來注入
byType:根據set方法中的類型來匹配的。
constructor:根據構造方法來實現自動裝配
autowire-candidate="false" 表示該bean不參數自動裝配
在開發中咱們也能夠用註解的方式代替.xml文件的配置
1.@Component取代<bean class="">
@Component("id") 取代 <bean id="" class="">
2.web開發,提供3個@Component註解衍生註解(功能同樣)取代
@Repository :dao層
@Service:service層
@Controller:web層
3.依賴注入,給私有字段設值,也能夠給setter方法設值
普通值:@Value(" ")
引用值:
方式1:按照【類型】注入
@Autowired
方式2:按照【名稱】注入1
@Autowired
@Qualifier("名稱")
方式3:按照【名稱】注入2
@Resource("名稱")
4.做用域
@Scope("prototype") 多例 !
AOP是面向切面編程,經過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。
Spring AOP是用純Java實現的。不須要特殊的編譯過程。Spring AOP不須要控制類加載器層次結構,所以適合在servlet容器或應用程序服務器中使用。
要使用基於XML的配置啓用@AspectJ支持,請使用該aop:aspectj-autoproxy
元素,如如下示例所示:
<aop:aspectj-autoproxy/>
啓用@AspectJ支持後,在應用程序上下文中定義的任何bean都具備@AspectJ方面的類(具備@Aspect
註釋),Spring會自動檢測並用於配置Spring AOP。
配置spring
<!-- 面向切面編程 --> <aop:config> <!-- 切面 --> <aop:aspect id="" ref=""> <!-- 切入點 代碼塊要切入到什麼地方 --> <aop:pointcut expression="execution()" id="animalPointCut"/> <!-- 通知 before:在XXX以前 --> <aop:before method="start" pointcut-ref="animalPointCut"/> <!-- 通知 after:在XXX以後 --> <aop:after method="end" pointcut-ref="animalPointCut"/> <!-- 通知 around:在XXX周圍環繞 --> <aop:around method="around" pointcut-ref="animalPointCut"/> --> </aop:aspect> </aop:config>
能夠用註釋代替.xml文件的配置
@Before代替 <aop:before>
@After代替<aop:after>
@Around代替<aop:around>
使用@Around
註釋聲明around建議。advice方法的第一個參數必須是type ProceedingJoinPoint
。在建議的主體內,調用致使底層方法執行proceed()
的ProceedingJoinPoint
緣由。該proceed
方法也能夠傳入Object[]
。數組中的值在進行時用做方法執行的參數。
JoinPoint
任何通知方法均可以聲明一個類型的參數做爲其第一個參數 org.aspectj.lang.JoinPoint
(注意,須要在通知周圍聲明類型的第一個參數ProceedingJoinPoint
,它是一個子類JoinPoint
。 JoinPoint
接口提供了許多有用的方法:
getArgs()
:返回方法參數。
getThis()
:返回代理對象。
getTarget()
:返回目標對象。
getSignature()
:返回正在建議的方法的描述。
toString()
:打印建議方法的有用說明。
AOP代理
Spring AOP默認使用AOP代理的標準JDK動態代理。這使得任何接口(或接口集)均可以被代理。
直接在對象引用上調用該方法
當客戶端代碼具備的引用是代理時,事情會稍微改變。