5. Spring核心概念
阿新 • • 發佈:2019-01-14
1.初始Spring
spring是一個輕量級框架,他大大簡化了java企業級開發,提供了強大,穩定的功能,又沒有帶來額外的目標
目標: 一是讓現有技術更易於實現 二是促進良好的程式設計習慣
2.Spring IoC
2.1理解"控制反轉"
控制反轉:也稱為依賴注入,是面向對面程式設計的一種設計理念,用來降低程式程式碼的耦合度
2.2編寫一個Spring程式
(1).編寫一個HelloSpring程式
private String who = null;
public String getWho() {
return who;
}
public void setWho(String who) {
this.who = who;
}
public void print() {
System.out.println("Hello," + this.getWho());
}
(2).在專案classpath(src)根目錄下建立applicationContext.xml檔案
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
<bean id="helloSpring" class="HelloSprng.HelloSpring">
<property name="who">
<value>Spring</value>
</property>
</bean>
</beans>
(3).新增測試方法
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext1.xml");
HelloSpring helloSpring=(HelloSpring)ctx.getBean("helloSpring");
System.out.println(helloSpring.getName()+helloSpring.getText());
2.3依賴注入
1、設定注入
IoC容器使用setter方法來注入被依賴的例項
2、構造注入
構造例項,完成依賴例項的初始化。
3.Spring AOP(“面向切面程式設計”)
面向切面程式設計:簡單地說就是在不改變原程式的基礎上為程式碼增加新的功能,對程式碼進行增強處理。他的設計思想來源於代理設計模式
3.1使用Spring AOP 實現日誌輸出
(1).匯入Spring Aop 相關的jar檔案
spring-aop-3.2.13.RELEASE.jar aop實現包
aopallicabe-1.0.jar 依賴包
aspectjweaver-1.6.9.jar 依賴包
(2).編寫前置增強和後置增強的實現程式碼
import java.util.Arrays;
import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint;
public class UserServiceLogger {
private static final Logger log = Logger.getLogger(UserServiceLogger.class);
public void before(JoinPoint jp) {
log.info("呼叫 " + jp.getTarget() + "的" + jp.getSignature().getName()
+ "方法。方法入參" + Arrays.toString(jp.getArgs()));
}
public void afterReturning(JoinPoint jp, Object result) {
log.info("呼叫 " + jp.getTarget() + "的" + jp.getSignature().getName()
+ "方法.方法返回值" + result);
}
}
getTarget()方法可以得到被代理的目標物件
getSignature()方法返回被代理的目標方法
getArgs()方法返回傳遞給目標方法的引數陣列
(3).編寫Spring配置檔案,對業務方法進行增強處理
<bean id="theLogger" class="aop.ErrorLogger"></bean>
<aop:config>
<!-- 定義切入點 -->
<aop:pointcut id="pointcut"
expression="execution(public void addNewUser(entity.User))" />
<!-- 引用包含增強方法的Bean -->
<aop:aspect ref="theLogger">
<!-- 將before()方法定義為前置增強並引用pointcut切入點 -->
<aop:before method="before" pointcut-ref="pointcut"></aop:before>
<!-- 將afterReturning()方法定義為後置增強並引用pointcut切入點
通過returning屬性指定為名為result的引數注入返回值 -->
<aop:after-returning method="afterReturning"
pointcut-ref="pointcut" returning="result" />
</aop:aspect>
</aop:config>