spring的总结
1.?第一天
問題:怎樣的程序是一個優秀的程序
可維護性好,可擴展性好,性能優秀
問題:業界對象提供什么的概念
高內聚,低耦合,也就是盡量使代碼對應的功能寫在對應的模塊,并且盡量減少類與類之間的關系,使得修改起來比較方便,不會影響其它代碼,也就是更好的做到可維護性與可擴展性使之成為一個優秀的程序。
問題:Ioc解決了什么問題
loc實現了程序的解耦,解決了耦合度問題。
問題:Spring的定義
spring是一個輕量級的一站式java EE的開發框架
問題:Spring的作用
基于spring的定義,輕量級和一站式,就可以看出,它既可以作為一個完整的框架完成表示層,服務層,持久層實現一整個程序的所有開發這就是它所體現的一站式同時
作為輕量級,它還能用于整合其它框架。
問題:Spring的入門示例步驟
???要求:將步驟列好 (每個步驟需要提示對應的代碼截圖)
1.導入包
從下載好的spring框架包里的libs文件夾下找到如下幾個必須的包進行導入
2.配置xml的約束文件,使其自動生成
需要在eclipse-windows-preference-XML-XML Catalog中添加一個新的約束,直接add,然后在
spring源碼包中找到xsd約束文件進行添加配置
? 3.創建容器到對象
1.創建類
package?cn.gzsxt.service;
public?class?HelloWorldService {
public?void?say(){
System.out.println("--你好世界!--");
}
}
2配置xml
先直接創建一個xml文件,并且選中beans基于約束文件配置讓它自動生成相關代碼
配置容器
<bean?name="helloWorldService"?class="cn.gzsxt.service.HelloWorldService"></bean>
1.3配置一個測試類
package?cn.gzsxt.test;
import?org.junit.Test;
import?org.springframework.context.support.ClassPathXmlApplicationContext;
import?cn.gzsxt.service.HelloWorldService;
public?class?HelloWorldServiceTest {
@Test
public?void?say(){
//創建一個ApplicationContext對象
ClassPathXmlApplicationContext context=new?ClassPathXmlApplicationContext("applicationContext.xml");
HelloWorldService helloWorldService?= context.getBean("helloWorldService", HelloWorldService.class);
//調用方法
helloWorldService.say();
//結束程序,可以關閉容器
context.close();
}
}
???注意事項:配置的location要和spring.schemas保持一致,否則會出現連不上網的情況·
??
問題:Ioc的入門示例步驟(要求同上) ?
??建議:畫一下Ioc的流程圖!!!
???要求:將步驟列好 (每個步驟需要提示對應的代碼截圖)
?
???注意事項:
?
問題:對Properties的支持(代碼)
1.2.?第二天
問題:為什么需要通過注解配置Spring。
因為當做項目時需要創建的類比較多哦,而通過xml配置的話,每一個類都需要配置一個,就會比較繁瑣,而通過注解的話就比較簡單,可以全局搜索創建
問題:注解配置,注解對象的配置文件的標簽是什么。(盡量做到)
?<context:component-scan base-package="要搜索的目錄路徑"></context:component-scan>
問題:使用純注解修改第一天Ioc的代碼(要求)
???示例的目的是什么?
???要求:將步驟列好 (每個步驟需要提示對應的代碼截圖)
1.創建一個配置類,并且用注解標簽@configuration給這個類聲明為注解類,并且用@ComponentScan("要掃描的包名路徑")給它指明掃描路徑
2.因為已經把xml文件改成了注解聲明的類,所以我們的測試類代碼所謂的容器就不再是ClassPathXmlApplicationContext
而是通過AnnotationCongigApplicationContext這個容器來調用配置類。
???注意事項:
?
1.3.?第三天
問題:AOP是什么
AOP是一種面向切面編程的技術
問題:為什么需要使用AOP
AOP可以使一些部分功能進行分離,能更好的降低程序的耦合性,提升程序的可用性
問題:AOP的入門示例(XML)
1先導入需要的包
2.創建一個aop的切面類
package cn.gzsxt.aop;
import org.aspectj.lang.ProceedingJoinPoint;
public class StudentAOP {
?? ?public void before() {
?? ??? ?System.out.println("方法執行之前");
?? ?}
?? ?public void after() {
?? ??? ?System.out.println("方法執行之后");?? ??? ??? ?
?? ?}
}
3.創建一個功能類的實現方法
package cn.gzsxt.service.impl;
import java.util.Map;
import org.springframework.stereotype.Service;
import cn.gzsxt.service.StudentService;
@Service
public class StudentServiceImpl implements StudentService{
?? ?@Override
?? ?public void login(Map<String, Object> entity) {
?? ??? ?System.out.println("學生登錄"+entity);
?? ?}
}
4.配置xml文件
配置一個類
<bean name="studentService" class="cn.gzsxt.service.impl.StudentServiceImpl"></bean>
?? ??? 創建aop切面
?? ??? ?<bean name="aop" class="cn.gzsxt.aop.StudentAOP"></bean>
配置aop
?? ??? ?<aop:config>
?? ???? <aop:pointcut expression="execution(public void cn.gzsxt.service.impl.*.*(..))" id="public_pointcut"/>
?? ??? 配置切面
?? ???? <aop:aspect id="aop" ref="aop">
?? ???? 配置了兩個通知
?? ???? 方法執行前
?? ???? <aop:before method="before" pointcut-ref="public_pointcut"/>
?? ??? ? 方法執行后
?? ??? ? <aop:after method="after" pointcut-ref="public_pointcut"/>
5.創建一個測試類
package cn.gzsxt.test;
import java.util.HashMap;
import java.util.Map;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.gzsxt.service.StudentService;
import cn.gzsxt.service.impl.StudentServiceImpl;
public class ApplicationContextTest {
?? ?public static void main(String[] args) {
?? ??? ?//通過配置文件創建容器:
?? ??? ?ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
?? ??? ?//通過容器來獲取對象
?? ??? ?StudentService studentService = context.getBean("studentService", StudentService.class);
?? ??? ?//調用對象的方法
?? ??? ?Map<String, Object> entity = new HashMap<>();
?? ??? ?entity.put("name", "張三");
?? ??? ?studentService.login(entity);?? ?
?? ??? ?//關閉容器
?? ??? ?context.close();?? ??? ?
?? ?}
問題:AOP的入門示例(純注解)
? 基于xml配置的前提下:
1.把配置類那些配置類什么的全部取消改為全局搜索路徑創建容器對象
?? ??? ?<context:component-scan base-package="cn.gzsxt" />
?? ??? aop也改為使用自動代理
?? ??? ?<aop:aspectj-autoproxy />
2.然后在切面類類名前加上@component和@Aspect聲明這是一個切面類,并且在切面方法前面加入對應的注釋
@Before(value="execution(* cn.gzsxt.service.impl.*.*(..))") 添加到方法之前
@After(value="execution(* cn.gzsxt.service.impl.*.*(..))") 添加到方法之后
@Around(value="execution(* cn.gzsxt.service.impl.*.*(..))") 添加到方法前后
@AfterReturning(value="execution(* cn.gzsxt.service.impl.*.*(..))") 方法正常執行之后攔截
@AfterThrowing(value="execution(* cn.gzsxt.service.impl.*.*(..))") 方法異常之后進行攔截
value值中execution括號里為需要加入切面的類的路徑
【建議】問題:Ioc的實現步驟以及代碼
?
1.4.?第四天
1.問題:什么是事務代理
在進行數據的操作時,大部分情況是兩個對象同時執行莫一個功能,要么都成功要么都失敗,
不然會使存儲的數據出現bug,這種操作,我們稱之為失誤代理
2.問題:什么是事務的隔離級別
就是指同時發生多線程操作的時候每個線程執行的事務之間的關系就是所謂的隔離級別
ISOLATION_DEFAULT:默認隔離級別
ISOLATION_READ_UNCOMMITTED:可以讀未另一個事務提交的數據
ISOLATION_READ_COMMITTED?:只能讀已提交的數據
ISOLATION_REPEATABLE_READ:是否讀取其他事務提交修改后的數據
ISOLATION_SERIALIZABLE:是否讀取其他提交增加后的數據
3.問題:什么是事務的傳播行為
就是事務代理,將一個方法的事務對象傳遞到下一個方法的過程
4.問題:Spring JDBC 的示例(增刪改查,配置事務)
1.首先導入所需要用到的包
2.配置xml文件
配置數據源
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
添加4個連接數據源必須的參數
?? ??? ??? ?<property name="driverClassName" value="org.gjt.mm.mysql.Driver"></property>
?? ??? ??? ?<property name="url" value="jdbc:mysql://localhost:3306/sms"></property>
?? ??? ??? ?<property name="username" value="root"></property>
?? ??? ??? ?<property name="password" value="555555"></property>
?? ???? </bean>
?? ??? ??? ?
?? ???? 獲得JdbcTemplate操作對象
?? ??? ?<bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
?? ??? ??? ? 設置數據源
?? ??? ??? ?<property name="dataSource" ref="dataSource"></property>?? ??? ??? ?
?? ??? ?</bean>?? ?
?? ??? ?
?? ???? 配置事務代理
?? ??? ?<bean name="dataSource" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
?? ??? ??? ?<property name="dataSource" ref="dataSource"></property>
?? ??? ?</bean>
?? ??? ?<tx:annotation-driven transaction-manager="dataSourceTransactionManager"/>
3.通過,@Autowired依賴注入注解,實現從dao層到controller的方法調用,方法里連接數據庫直接使用配置好的操作對象先注入jdbcTemplate這個操作對象
jdbcTemplate.update可以使用增刪改,jdbcTemplate.excute可以使用查詢。
代碼步驟
注意事項:
?
--列表Spring所有已經學習的使用標簽,標識每個標簽的作用
--列出Spring所有已經學習的注解,標識每個注解的作用
--列出Spring所有使用的API (類、接口),標識每個API要素的作用
2.?SpringMVC
?
SpringMVC總結報告
?
問題:SpringMVC是什么
SpringMVC是spring框架內置的MVC的實現,跟MVC的功能是差不多的
問題:MVC是什么
MVC就是一種把代碼分為模圖-視圖-控制器三層結構用來實現頁面代碼和后臺代碼分離的設計思想
問題:為什么使用SpringMVC
因為SpringMVC是spring框架自帶的,雖然功能跟MVC差不多,但是它支持spring的一些組件功能,而MVC不一定支持
問題:入門示例(配置流程圖,列步驟)
? 1.導入需要的包
2.在web.xml中配置一個核心控制器,對所有請求進行攔截,使之請求與方法一一對應
<servlet>
? ?? ?<servlet-name>DispatcherServlet</servlet-name>
? ?? ?<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
? ?? ?<init-param>配置參數使其指定spring-mvc.xml這個配置文件
? ?? ??? ?<param-name>contextConfigLocation</param-name>
? ?? ??? ?<param-value>classpath:spring-mvc.xml</param-value>
? ?? ?</init-param>
</servlet>
? <servlet-mapping>
? ?? ? <servlet-name>DispatcherServlet</servlet-name>
? ?? ? <url-pattern>*.do</url-pattern>
? </servlet-mapping>
3.配置一個xml的配置文件,用來指定請求路徑與對象
<bean name="/say.do" class="cn.gzsxt.controller.HelloCotroller"></bean>
4.控制層controller
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
//基于配置文件配置的controller必須要實現或繼承controller的接口以及它的子類
public class HelloCotroller extends? MultiActionController{
?? ?public ModelAndView say(HttpServletRequest request, HttpServletResponse response) {
?? ??? ?System.out.println("你好世界");
?? ??? ?ModelAndView modelAndView = new ModelAndView();
?? ??? ?modelAndView.setViewName("/hello.jsp");
?? ??? ?return modelAndView;
?? ?}
}
問題:什么是自動數據綁定
不需要任何數據綁定的注解直接將表單參數綁定到我們的執行方法的參數上
問題:什么是數據強制綁定
強制綁定就是有一些數據它不存在與表單中,當它傳過來的時候不會自動綁定,這個時候我們就需要通過一系列的注解標簽來進行強制綁定了
問題:數據綁定時,有哪些支持的內置對象
HttpServletRequest,HttpServletResponse,HttpSession這三個都是內置對象
問題:對上傳的支持配置步驟 (配置有哪些,為什么)
問題:對JSON支持的配置步驟
? 1.導入需要的相關包
2.配置文件中加入實現對json支持的注解配置
<mvc:annotation-driven></mvc:annotation-driven>
問題:SpringMVC我們學習了哪些注解,分別代表什么含義!!!(重點)
@RestController ?這個是一個用于聲明是一個Rest風格接口的組件類。等同@Controller+@ResponseBody
?
--列出使用了哪些注解,并且說明每個注解的作用!!
--列出使用了哪些API,并且說明每個API的作用
轉載于:https://www.cnblogs.com/Virtual-field/p/10746661.html
總結
- 上一篇: windows修改远程桌面RDP连接数
- 下一篇: 验证码识别笔记(二)