1-Spring-常見概念

Spring概念

  1. Spring是一個開源的輕量級框架
  2. Spring是一站式框架

IOC(控制反轉)(XML)

1 IOC底層原理

(1)xml配置文件
(2)dom4j解析xml
(3)工廠模式
(4)反射

2 IOC操作-入門(XML)

(1)導入jar包

(2)導入約束

<?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.0.xsd
        "></beans>

(3)配置xml

<bean id="user" class="com.wzw.spring.day1_rumen.User"></bean>

3 IOC中的bean管理(XML)

(1)bean實例化的三種方式

1 使用類的無參構造創建

<bean id="user" class="com.wzw.spring.day1_rumen.User"></bean>

2 使用靜態工廠創建
3 使用實例工廠創建

(2)Bean標籤常用屬性

<bean id="" class="" scope=""></bean>

scope屬性:
singleton:默認值,單例,創建的是同一個對象
prototype:多例(action是多例的,使用prototype)
request:web項目中,Spring創建一個bean對象,將對象存入request域中
session:web項目中,Spring創建一個bean對象,將對象存入session域中
globalSession:(相當於一個全局session)web項目中,應用在porlet環境,如果沒有porlet環境那麼globalSession相當於session

(3)IOC和DI區別

  • IOC:控制反轉,把對象創建交給Spring進行配置管理
  • DI:依賴注入,創建對象過程中,向類裏面的屬性設置值
    -關係:DI不能單獨存在,需要在IOC基礎之上

4 !屬性注入的三種方式(XML)

創建對象時,向類裏屬性注入值;Spring框架只支持有參構造和set方法

(1)有參構造注入

<!-- 3.1 根據有參的構造方法來屬性注入 -->
<bean id="stu" class="com.wzw.spring.Student">
    <constructor-arg name="name" value="張三"></constructor-arg>
</bean>

(2)set()方法注入(常用)

<!-- 3.2 通過set方法來注入屬性  -->
<bean id="book" class="com.wzw.spring.Book">
    <property name="bookName" value="西遊記"></property>
</bean>

(3)接口注入

5 !注入對象類型屬性(XML)

創建Service層實例和Dao層實例,Service實例調用Dao實例

<!-- 4 對象通過set方法來注入屬性 -->
<!-- 4.1 首先創建Dao實例 -->
<bean id="userDao" class="com.wzw.spring.UserDao"></bean>
<!-- 4.2 然後創建service實例,並通過set方法來注入屬性 -->
<bean id="userService" class="com.wzw.spring.UserService">
    <!-- set方法來注入屬性
        name:service類裏面屬性名稱
        ref:注入屬性所對應類的id
     -->
    <property name="userDao" ref="userDao"></property>
</bean>

6 !注入複雜數據類型屬性(XML)

測試類

/*
     * 注入複雜類型屬性
     */
    private String[] arrs;
    private List<String> list;
    private Map<String, String> map;
    private Properties properties;

    public void setArrs(String[] arrs) {
        this.arrs = arrs;
    }

    public void setList(List<String> list) {
        this.list = list;
    }

    public void setMap(Map<String, String> map) {
        this.map = map;
    }

    public void setProperties(Properties properties) {
        this.properties = properties;
    }

Xml配置文件

    <!-- 5 注入複雜類型屬性 -->
    <bean id="person" class="com.wzw.spring.Person">
        <!-- 5.1 array -->
        <property name="arrs">
            <array>
                <value>a</value>
                <value>b</value>
                <ref bean="book"/>
            </array>
        </property>

        <!-- 5.2 list -->
        <property name="list">
            <list>
                <value>aa</value>
                <value>bb</value>
                <value>cc</value>
            </list>
        </property>

        <!-- 5.3 map -->
        <property name="map">
            <map>
                <entry key="aaa" value="d"></entry>
                <entry key="bbb" value="e"></entry>
                <entry key="ccc" value="f"></entry>
            </map>
        </property>

        <!-- 5.4 properties -->
        <property name="properties">
            <props>
                <prop key="aaaa">dd</prop>
                <prop key="bbbb">ee</prop>
                <prop key="cccc">ff</prop>
            </props>
        </property>
    </bean>

IOC(註解)

1 Spring註解開發準備

(1)導入jar包

(2)導入約束

xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd

(3)xml配置

<!-- 1  註解 -->
<!-- 1.1 開啓註解掃描 掃描類,方法,屬性上的註解 -->
<context:component-scan base-package="com.wzw.spring"></context:component-scan>
<!-- 1.2 掃描屬性上的註解 -->
<!-- <context:annotation-config></context:annotation-config> -->

2 創建對象並注入屬性

(1)XML配置文件中創建對象

<!-- 2 xml創建對象 註解方式注入屬性 -->
<bean id="abService" class="com.wzw.spring.service.ABService"></bean>
<bean id="aDao" class="com.wzw.spring.dao.ADao"></bean>
<bean id="bDao" class="com.wzw.spring.dao.BDao"></bean>

(2)Model層

@Component(value="user")
public class User {
    @Value("zhangsan")
    private String username;
    @Value("123")
    private String password;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public User() {
        super();
    }
    public User(String username, String password) {
        super();
        this.username = username;
        this.password = password;
    }
    @Override
    public String toString() {
        return "User [username=" + username + ", password=" + password + "]";
    }

}

(3)Dao層

@Repository(value="userDao2")
public class UserDao2 {
    @Resource(name="user")
    private User user;

    public User getInfo(){
        return user;
    }
}

(4)Service層

@Service(value="userService")
public class UserService {
//  @Autowired
// @Qualifier(“userDao”)
    @Resource(name="userDao")
    private UserDao userDao;

    public void say() {
        System.out.println("service...");
        userDao.say();
    }
}
  • @Component(value=”id名”)
    //
  • @Controller
  • @Service(value=”id名”)
  • @Repository(value=”id名”)
  • @Scope(scopeName=”prototype”)
  • @Resource(name=”id名”)
  • @Value(“屬性值”)
  • @Autowired

AOP(面向切面編程)

1 AOP概念

  • 擴展功能不需要修改源代碼
  • AOP採取橫向抽取機制,取代了傳統縱向抽取機制的重複性代碼

2 AOP底層原理

3 AOP術語

Joinpoint(連接點):類裏面可以被增強的方法
Pointcut(切入點):類中實際被增強的方法
Advice(通知/增強):增強的邏輯(功能)(前置、後置、環繞、異常、最終增強)
Aspect(切面):把增強應用到具體方法上的過程
Introduction(引介):
Target(目標對象):要增強的類
Weaving(織入):把advice應用到target的過程,
Proxy(代理):

4 !AOP操作(XML)

(1)導入jar包

(2)導入約束

xmlns:aop="http://www.springframework.org/schema/aop"
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd

(3)配置xml文件

<!-- AOP 切面編程 -->
<!-- 1 配置對象 -->
<bean id="car" class="com.wzw.spring.model.Car"></bean>
<bean id="myCar" class="com.wzw.spring.aop.MyCar"></bean>
<!-- 2 配置aop操作 -->
<aop:config>
    <!-- 2.1 配置切入點 -->
    <aop:pointcut expression="execution(* com.wzw.spring.model.Car.*(..))" id="pointcut1"/>
    <!-- 2.2 配置切面 -->
    <aop:aspect ref="myCar">
        <aop:before method="before1" pointcut-ref="pointcut1"/>
        <aop:after-returning method="after1" pointcut-ref="pointcut1"/>
        <aop:around method="around1" pointcut-ref="pointcut1"/>
    </aop:aspect>
</aop:config>

(4)環繞增強

    //環繞增強
    public void around1(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        //方法前
        System.out.println("方法之前。。。");

        //執行被增強的方法
        proceedingJoinPoint.proceed();

        //方法後
        System.out.println("方法之後");
    }

5 AOP操作(註解)

(1)導入jar包和約束,並配置xml文件

<!-- 1 aop註解方式 -->
<!-- 1.1 創建對象 -->
<bean id="book" class="com.wzw.spring.model.Book"></bean>
<bean id="myBook" class="com.wzw.spring.aop.MyBook"></bean>
<!-- 1.2 開啓aop註解掃描 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

(2)創建advice類,並註解

@Aspect
public class MyBook {
    @Before(value="execution(*com.wzw.spring.model.Book.*(..)))
    public void before1() {
        System.out.println("前置增強...");
    }
}

Spring事務

發佈了44 篇原創文章 · 獲贊 42 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章