1. 程式人生 > 其它 >Spring的主要內容總結

Spring的主要內容總結

一.spring是什麼

spring是一個框架,整合了多種技術.
spring的特點是IOC(控制反轉),AOP(面向切面程式設計)

1.IOC和AOP兩個思想簡要理解

IOC:讓程式自己動態建立物件,建立物件權利是程式而不是程式設計師
AOP:在不改變原有程式碼的情況下,實現插入程式碼(新增功能)

2.maven匯入spring

  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.3.9</version>
  </dependency>

二.IOC在spring中的實現

1.建立物件通過描述(xml或註解)獲得

spring中可以實現通過xml檔案或者註解提供的資訊建立物件,並存放在IOC容器中

2.如何通過描述建立物件---依賴注入

問題是spring如何通過資訊完成物件建立,涉及兩方面取資訊和處理資訊

  • 處理資訊涉及spring的內部實現,暫且不表
  • 取資訊:若是xml檔案實現資訊,就應該讓其按照特定的格式放置資訊,取名為依賴注入
    依賴注入:依賴實體類的set方法和構造器,進行注入
    依賴注入的方式:建立bean物件,對其進行屬性注入或者構造器注入,同時也能修改其
    作用域(單例還是多例)

3.第一個IOC容器中物件的建立

  • 1.編寫hello實體類
  public class Hello {
    private String str;

    public String getStr() {
        return str;
    }

    public void setStr(String str) {
        this.str = str;
    }

    @Override
    public String toString() {
        return "Hello{" +
                "str='" + str + '\'' +
                '}';
    }
}
  • 2.匯入相關jar包,建立bean.xml檔案
  • 3.編寫bean檔案,在beans標籤下新增bean標籤,同時對此類進行資訊注入來建立物件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context4.0.xsd">
<!--   使用spring來建立物件,spring中都稱物件標籤為bean-->
<!--   xml檔案中想要給出建立物件的資訊,必須按照格式進行資訊填入-->
        <bean id="hello" class="com.cs.pojo.Hello">
            <property name="str" value="Spring"/>
        </bean>
<!--
        ref:引用Spring容器中建立好的物件
        value:對物件屬性賦的值
-->
</beans>

  • 4.建立測試類來測試物件是否生成
    //spring通過beans.xml檔案獲得了建立物件的資訊,然後建立物件放入context容器中
    ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
    //通過context能夠取到物件
    Hello hello = (Hello)context.getBean("hello");

3.bean的自動裝配

通過在bean後面新增autowire=byName/byType修飾能夠實現bean的自動裝配
也可以通過使用註解進行bean的自動裝配,在xml檔案中開啟使用註解(context:annotation-config),在編寫實體類時新增相關注解(不僅僅是@autowire,還能是@Componet實現不寫bean也能注入建立物件)即可

三.AOP在spring中的實現

1.aop的底層---代理模式

通過一個代理類讓真實類執行的業務變單一純粹,體現分工明確

  • 實現組成:事件,實體,代理類(實體只專注與事件,代理類不僅幫助完成事件還能新增各種功能,能夠讓實體完成的事件更加完備)
  • 程式碼實現,Proxy,InvocationHandler,具體應用舉例:JDK,cglib

2.Aspect Oriented Prgramming(面向切面程式設計)

通過aop的原理可以知道,aop可以在不影響原本程式碼實現的情況下新增程式碼在程式中

  • 1).使用AOP思路
    匯入對應的jar包
    建立你要切入的物件(註解,自定義類,springAPI)
    通過配置檔案將切入物件(切面)放到切入點上
    當執行程式碼時切入點的切面的通知會被執行
  • 2).AOP實現的程式碼結合程式複習

四.spring與mybatis結合

1.將資料來源放入ioc容器中

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&amp;useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>

2.將sqlsessionFactory,sqlsession放入ioc容器中

<!--    sqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
<!--        繫結mybatis配置檔案-->
        <property name="configLocation" value="classpath:mybatisConfig.xml"/>
        <property name="mapperLocations" value="classpath:com/cs/mapper/UserMapper.xml"/>
     </bean>

<!--    sqlSession-->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<!--        使用構造器注入sqlSessionFactory 因為沒有set方法-->
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>

<bean id="userMapper2" class="com.cs.mapper.UserMapperImpl2">
    </bean>

3.建立實體類和對應的dao(mapper)完成CRUD任務

@Data
public class User {
    private int id;
    private String name;
    private String pwd;
}
public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper{
    @Override
    public List<User> selectUser() {
        SqlSession sqlSession = getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = mapper.selectUser();
        return users;
    }
}

額外:spring中事務的處理

通過aop思想實現事務的四大特性ACID

<!--    建立開啟事務的物件-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <constructor-arg ref="dataSource"/>
    </bean>
<!--    結合AOP實現事務的植入-->
<!--    配置事務的類-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
<!--        給那些事件新增事務-->
        <tx:attributes>
            <tx:method name="add"/>
            <tx:method name="delete"/>
            <tx:method name="update"/>
        </tx:attributes>
    </tx:advice>
<!--    配置事務的切入點-->
    <aop:config>
        <aop:pointcut id="txPointCut" expression="execution(* com.cs.mapper.*.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
    </aop:config>