1. 程式人生 > 其它 >Spring入門學習---04

Spring入門學習---04

Spring

1、關於Bean的自動裝配

  自動裝配是Spring滿足bean依賴注入的一種方式,Spring會根據上下文自動給bean裝配屬性

  三種裝配方式:

  1. xml中顯示的配置
  2. java中顯示的配置
  3. 隱式的自動裝配

  1. byName自動裝配

    <!--
    byName:會自動在容器中的上下文查詢和自己物件set方法後面的值對應的beanID
    -->
    <bean id="people" class="com.charles.dao.People" autowire="byName">
        <property 
name="name" value="Charles"/> </bean>

  2.byType自動裝配

    <!--
    byType:會自動在容器中的上下文查詢和自己物件屬性型別相同的bean(要保證該型別全域性唯一)
    -->
    <bean id="people" class="com.charles.dao.People" autowire="byType">
        <property name="name" value="Charles"/>
    </bean>

  3.註解進行裝配

  使用前需要匯入context約束

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd"
> <context:annotation-config/> </beans>

  @Autowired (前提條件:你的自動裝配屬性在IOC容器中存在,且符合名字(預設是byName))

  直接在屬性上使用即可(使用後,可以忽略setter方法),當然也可以在setter方法上使用

  如果@Autowired自動裝配的環境比較複雜,自動裝配無法通過一個註解去實現,我們可以使用@Qualifier(value = "xxx") 去配置@Autowired的使用,指定一個唯一的bean物件注入

    @Autowired
    private Cat cat;
    @Autowired
   @Qualifier(value = "dog")
private Dao dao; private String name;

  @Resource

  @Resource 是一個組合註解,先從名字查詢,後從屬性查詢,但凡有一個是對的即可,當兩個都不可以的時候,我們可以給他加一個@Resource(name="xxx")

    @Resource
    private Cat cat;
    @Resource(name = "dog")
    private Dao dao;

2、使用註解進行開發

  註解開發大大減輕的程式碼量大的壓力,但是難維護

  使用前,需要匯入context約束

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 開啟註解的支援 -->
    <context:annotation-config/>
    <!-- 指定要掃描的包,這個包下的註解就會生效 -->
    <context:component-scan base-package="com.charles.dao"/>

</beans>

  1. bean

  @Component:元件,放在類上,說明這個類被spring管理了,就是bean

// 等價於 <bean id="user" class="com.chalre.pojo.user"/>
// @Component 元件

@Component
public class User {
    public String name = "Charles";
}

  2.注入屬性

  @Value():注入值, 相當於<property name="name" value="CHARLES"/>

    @Value("CHARLES")
    public String name;

  3.衍生註解

  @Component 有幾個衍生註解,我們在web開發中,會按照MVC三層架構分層

  • dao 【@Repository】

  • service 【@Service】

  • controller 【@Controller】

  • pojo 【@Component】

  4.作用域

  @Scope("xxx")

3、使用java的方式配置Spring

  當然,不一定非要用xml的方式配置Spring,我們還可以利用Java的方式來配置Spring

例子

  實體類

package com.charles.pojo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class User {
    public String name;

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                '}';
    }

    public String getName() {
        return name;
    }

    @Value("Charles")
    public void setName(String name) {
        this.name = name;
    }
}

  配置類

package com.charles.config;

import com.charles.pojo.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

// 加了這個等同於 <beans></beans>
// 這個也會被Spring容器託管註冊到容器中,因為他裡面含@Component
@Configuration
@ComponentScan("com.charles.pojo")
public class CharlesConfig {

    // 註冊一個bean,就相當於我們之前寫的一個bean標籤,
    // id = 這個方法的名字(getUser)
    // class = 方法的返回值(User)
    @Bean
    public User getUser(){
        // 返回要注入到bean的物件
        return new User();
    }

}

  這種方式,一般在spring boot中使用。