Spring簡介
spring框架是一個用於一站式構建企業級應用程序的輕量級解決方案。但spring框架是通過模塊化的方式構成,允許我們只使用需要的部分。spring框架的兩大核心:IOC與AOP。
Spring框架的搭建方式
1.導入相關的jar包
maven方式下只需要引入spring-context就可以導入相關的jar包
2.編寫spring核心配置文件applicationContext.xml
3.編寫測試類,實例化容器
通過new ClassPathXmlApplicationContext方法
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
然后通過實例化容器的gerBean()方法來獲取實例
Test bean = context.getBean(Test.class);
spring兩大核心之IOC
IOC就是控制反轉,不是一種編程方法,而是一種編程思想。就是把對象的創建過程交給spring ioc容器去管理
Spring IoC容器管理一個或多個bean。這些bean是使用您提供給容器的配置元數據創建的(例如,以XML <bean/>
定義的形式 )。
Bean的初始化方式有三種
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
AOP是面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。
Spring AOP是用純Java實現的。不需要特殊的編譯過程。Spring AOP不需要控制類加載器層次結構,因此適合在servlet容器或應用程序服務器中使用。
使用Java配置啟用@AspectJ支持
要使用基於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動態代理。這使得任何接口(或接口集)都可以被代理。
直接在對象引用上調用該方法
當客戶端代碼具有的引用是代理時,事情會稍微改變。