【一步一步学习spring】spring入门
生活随笔
收集整理的這篇文章主要介紹了
【一步一步学习spring】spring入门
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1. spring概述
- spring是一個開源框架
- spring為簡化企業(yè)級應用開發(fā)而生,解決的是業(yè)務邏輯層和其他各層的松耦合問題,他將面向接口的編程思想貫穿整個系統(tǒng)應用。
- spring是javaSE/EE的一站式框架。web層有spring-mvc,業(yè)務層有spring ioc、事務等機制,持久層提供了spring-jdbc或者直接整合現(xiàn)有的框架(mybatis)
1.1 spring的優(yōu)點
- 方便解耦,簡化開發(fā)
- spring就是一個大工廠,可以將所有對象創(chuàng)建和依賴關(guān)系維護等工作交給spring管理。
- AOP編程的支持
- spring提供面向切面的編程,可以方便的實現(xiàn)對程序進行權(quán)限攔截、運行監(jiān)控等功能。
- 聲明式事務的支持
- 只需要通過配置就可以完成對事務的管理,而無需手動編程。
- 方便程序的測試
- spring對junit4支持,可以通過注解方便的測試spring程序
- 方便集成各種優(yōu)秀的框架
- spring不排斥各種優(yōu)秀的開源框架,其內(nèi)部提供了對各種優(yōu)秀框架(如Structs、Hibernate、Mybatis等)的直接支持。
- 降低可javaEE api的使用難度
- spring對javaEE開發(fā)中非常難用的一些api(JDBC、遠程調(diào)用等)都進行了封裝,是這些api應用難度降低。
1.2 spring的模塊
2. spring IOC的引入
- 傳統(tǒng)的開發(fā)方式下,我們直接使用new,獲取相關(guān)的服務對象。
- 但是這樣不符合面向接口的編程思想(關(guān)于面向接口的好處,可以參考https://blog.csdn.net/qq376430645/article/details/9927225)。于是把接口和其對應的實現(xiàn)類分開,做到面向接口的編程模式。
- 但是這樣又不符合OCP原則(open-close原則),就是盡量不修改源碼做到對程序的擴展。于是引入了工廠模式,負責生成接口的實現(xiàn)類。做到接口和實現(xiàn)的解耦。
- 但是標準的工廠類依然會同接口和實現(xiàn)類耦合,故引入了一種新的設計模式:工廠模式+反射+配置文件,在工廠類中讀入同源碼無關(guān)的配置文件,使用反射的方式對實現(xiàn)類進行實例化,做到最終的解耦。bingo!
3. spring IOC helloworld
引入spring的依賴,直接引入context即可,因為會將其依賴的所有包全部引入。
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.3.18.RELEASE</version></dependency>實現(xiàn)簡單的bean類
UserService Interface
package com.ioc.demo1;public interface UserService {public void sayHello(); }UserService 實現(xiàn)類
package com.ioc.demo1; public class UserServiceImpl implements UserService {public void sayHello() {System.out.println("Hello Spring");} }
編寫spring核心配置文件
在resources中創(chuàng)建xml配置文件application-context.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.xsd"><!-- UserService的創(chuàng)建權(quán)交給spring --><bean id="userService" class="com.ioc.demo1.UserServiceImpl"></bean></beans>
在程序中讀取spring的配置文件,通過spring框架獲得bean,完成相應的操作
package com.ioc.demo1;import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringDemo1 {@Test/*** 傳統(tǒng)方式開發(fā)*/public void demo1() {UserService userService = new UserServiceImpl();userService.sayHello();}@Test/*** spring的方式實現(xiàn)*/public void demo2() {// spring工廠ApplicationContext applicationContext = new ClassPathXmlApplicationContext("application-context.xml");// 通過工廠獲取類對象UserService userService = (UserService) applicationContext.getBean("userService");userService.sayHello();} }
4. IOC和DI的基本概念
- IOC Inverse of Control 反轉(zhuǎn)控制的概念,就是將原本在程序中手動創(chuàng)建UserService對象的控制權(quán),交由Spring框架管理。
- 簡單說,就是創(chuàng)建UserService對象控制權(quán)被反轉(zhuǎn)到了Spring框架。
- DI Dependency Injection 依賴注入的概念,就是在Spring創(chuàng)建這個對象的過程中,將這個對象所依賴的屬性注入進去。
關(guān)于DI我們這邊再實例講一下,我們的UserServiceImpl由于業(yè)務的需求,新增一個name的string字段。
package com.ioc.demo1; public class UserServiceImpl implements UserService {private String name;public void sayHello() {System.out.println("Hello Spring " + name);}public String getName() {return name;}public void setName(String name) {this.name = name;} }由于該處的修改,在調(diào)用處需要做出相應的修改,首先UserService接口中沒有name字段,需要將接口類改成實現(xiàn)類,再加上屬性賦值的語句。如下所示:
@Test/*** 傳統(tǒng)方式開發(fā),增加了name字段*/public void demo11() {UserServiceImpl userService = new UserServiceImpl();userService.setName("xxx");userService.sayHello();}而spring開發(fā)模式中,由于DI的存在,我們只需要修改配置文件即可,在調(diào)用處無需修改任何代碼。
<bean id="userService" class="com.ioc.demo1.UserServiceImpl"><property name="name" value="xxx"></property></bean>轉(zhuǎn)載于:https://www.cnblogs.com/xxxuwentao/p/9583392.html
總結(jié)
以上是生活随笔為你收集整理的【一步一步学习spring】spring入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 房屋建筑结构安全自动在线监测系统解决方案
- 下一篇: 使用PHP+Swoole实现的网页即时聊