1. 程式人生 > 實用技巧 >Spring框架入門筆記

Spring框架入門筆記

1、什麼是Spring?

Spring是一款輕量級開源框架

IoC(Inverse Of Control:反轉控制)通過配置的方式,將物件的管理控制權交給spring容器,spring得到具體的包路徑,類路徑通過反射的方式,建立物件。

AOP(Aspect Oriented Programming:面向切面程式設計),執行期通過動態代理方式,在方法的前後加入相應的通知(日誌,許可權等)

Spring的體系機構

2、Spring的配置檔案

Bean標籤基本屬性配置:

id:Bean例項在Spring容器中的唯一標識

class:Bean的全限定名稱

scope:指物件的作用範圍

  • singleton為單例:容器只有一個物件,當Spring核心檔案被載入時,例項化配置的Bean例項,
  • prototype為多例,容器有多個物件,當呼叫getBean()方法時例項化Bean,當物件長時間不使用時,被GC垃圾回收器回收

init-method:指定類中的初始化方法名稱

destroy-method:指定類中銷燬方法名稱

3、Spring入門

開發步驟

①匯入 Spring 開發的基本包座標
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.3.RELEASE</version>
        </dependency>
    </dependencies>
②編寫 Dao 介面和實現類
public interface UserDao {  
    public void save();
}

public class UserDaoImpl implements UserDao {
    public void save() {
        System.out.println("save running....");
    }
}
③建立 Spring 核心配置檔案

在類路徑下(resources)建立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.xsd">

</beans>
④在 Spring 配置檔案中配置 UserDaoImpl
<?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">

    <bean id="userDao" class="cn.guixinchn.dao.impl.UserDaoImpl"></bean>
</beans>
⑤使用 Spring 的 API 獲得 Bean 例項
public class test {
    @Test
    public void test1(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao = (UserDao) applicationContext.getBean("userDao");
        userDao.save();
    }
}

4、Bean的依賴注入配置

依賴注入(Dependency Injection):它是 Spring 框架核心 IOC 的具體實現

①set方法注入

​ 建立UserServer介面和UserServerImpl實現類

通過Spring配置檔案的方式

public interface UserServer {
    public void save();
}

public class UserServerImpl implements UserServer {

    public void save() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao = (UserDao) applicationContext.getBean("userDao");
        userDao.save();
    }
}
<bean id="userServer" class="cn.guixinchn.server.impl.UserServerImpl"></bean>

通過配置set方式

public class UserServerImpl implements UserServer {
    
    private UserDao userDao;
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    
    public void save() {
        userDao.save();
    }
}
<bean id="userServer" class="cn.guixinchn.server.impl.UserServerImpl">
    <property name="userDao" ref="userDao"></property>
</bean>

②構造方法注入

public class UserServerImpl implements UserServer {

    private UserDao userDao;

    public UserServerImpl(UserDao userDao) {
        this.userDao = userDao;
    }

    public void save() {
        userDao.save();
    }
}
<bean id="userServer" class="cn.guixinchn.server.impl.UserServerImpl">
    <constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>

引用資料型別例子

​ 如上

普通資料型別例子

<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
    <property name="name" value="張三"></property>
    <property name="age" value="18"></property>
</bean>

集合資料型別例子

<property name="strList">
	<list>
        <value>aaa</value>
        <value>bbb</value>
        <value>ccc</value>
    </list>
</property>
<property name="userMap">
    <map>
        <entry key="a" value-ref="aaa"/>
        <entry key="b" value-ref="bbb"/>
    </map>
</property>
<property name="properties">
    <props>
        <prop key="a">aaa</prop>
        <prop key="b">bbb</prop>
        <prop key="c">ccc</prop>
    </props>
</property>

5、分模組開發

可以把配置檔案分出來,在Spring主配置檔案通過import標籤進行載入

<import resource="applicationContext-xxx.xml"/>

6、Srping配置資料來源

1、匯入資料庫連線需要的依賴座標

<dependency>
    <groupId>c3p0</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.1.2</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.32</version>
</dependency>

2、建立jdbc.properties連線引數

在resources目錄下新建一個jdbc.properties檔案

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=123456

3、主配置檔案抽jdbc配置檔案

applicationContext.xml載入jdbc.properties配置檔案獲得連線資訊。

首先,需要引入context名稱空間和約束路徑:

<!--Spring容器載入properties檔案-->
<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="${jdbc.driver}"></property>
    <property name="jdbcUrl" value="${jdbc.url}"></property>
    <property name="user" value="${jdbc.username}"></property>
    <property name="password" value="${jdbc.password}"></property>
</bean>

4、測試

    @Test
    public void test3() throws SQLException {
        //獲取配置檔案
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //拿到資料來源
        DataSource dataSource = (DataSource) applicationContext.getBean("dataSource");
        //獲得連線物件
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
        connection.close();
    }

7、Srping相關API

ApplicationContext的繼承體系

applicationContext:介面型別,代表應用上下文,可以通過其例項獲得 Spring 容器中的 Bean 物件

ApplicationContext的實現類

  1. ClassPathXmlApplicationContext:通過類的根路徑下載入配置檔案
  2. FileSystemXmlApplicationContext:從磁碟路徑上載入配置檔案
  3. AnnotationConfigApplicationContext:使用註解配置容器物件時,此類來建立 spring 容器讀取註解

getBean()方法使用

當引數的資料型別是字串時,表示根據Bean的id從容器中獲得Bean例項,返回是Object,需要強轉。

當引數的資料型別是Class型別時,表示根據型別從容器中匹配Bean例項,當容器中相同型別的Bean有多個時,則此方法會報錯