3_基於註解管理Bean物件

LilyFlower發表於2024-03-05

基於註解管理Bean物件

1. 基本介紹

Spring透過註解實現自動裝配的步驟如下:

  • 引入依賴
  • 開啟元件掃描
  • 使用註解定義Bean
  • 依賴注入

Spring預設不使用註解配置bean,因此需要我們在Spring的配置檔案中配置context:component-scan元素開啟Spring Beans的自動掃描功能。開啟此功能後,Spring會從指定的包(base-package屬性設定)及子包下的所有類,如果類上使用了@Component註解,九江該類註冊到容器中。

<?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-context.xsd">
    <!-- 開啟元件掃描 -->
    <context:component-scan base-package="com.lily">

    </context:component-scan>
</beans>

編寫實體類User.java

@Component(value = "user")  //<bean id="User" class com.lily.bean.User>
public class User {

}

測試:

public class Main {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
        User user = context.getBean("user", User.class);
        System.out.println(user);
    }
}

2. 使用註解定義bean

Spring提供了以下多個註解,這些註解可以直接標記在Java類上,將它們定義成Spring Bean。

註釋 說明
@Component 該註解用於描述Spring的Bean,它是一個泛化的概念,僅僅表示容器中的一個元件(Bean),並且可以作用在應用的任何層次,例如Service層的,Dao層等,使用時只需要將該註解標記在相應的類上即可。
@Repository 該註解用於將資料訪問層(Dao層)的類識別符號為Spring中的Bean,其功能與@Component功能相同。
@Service 該註解通常作用在業務層(Service層),用於將業務層的類標識為Spring的Bean,其功能與@Component功能相同。
@Controller 該註解通常作用在控制層(Controller層),用於將控制層的類標識為Spring的Bean,其功能與@Component功能相同。

3. 使用Autowired進行注入

單獨使用@Autowired註解注入,預設是根據型別裝配的【ByType】

4 使用Autowired和Qualifier註解聯合注入

如果@Autowired要根據名稱注入的話,需要配合@Qualifier註解一起配合使用。

5. 使用Resource進行注入

@Resource註解也可以完成屬性注入,它和@Autowired註解的區別如下:

  • @Resource註解是JDK自帶的,而@Autowired註解是Spring框架自己的。
  • @Resource註解預設根據名稱裝配(ByName),未指定name時,使用屬性名作為name。透過name找不到的話會自動啟動型別ByType裝配。
  • @Autowired註解預設根據型別ByType裝配,如果想要根據名字進行裝配,則要配合@Qualifier一起使用。
  • @Resource註解用在屬性上、sette方法上。
  • @Autowired註解用在屬性上,setter方法上,構造方法上,構造方法引數上。

注意:如果JDK不是8版本需要引入如下依賴才能使用@Resource註解

<!-- https://mvnrepository.com/artifact/jakarta.annotation/jakarta.annotation-api -->
<dependency>
    <groupId>jakarta.annotation</groupId>
    <artifactId>jakarta.annotation-api</artifactId>
    <version>2.1.1</version>
</dependency>

6. Spring全註解開發

全註解開發就是不再使用spring的配置檔案,只需要編寫一個配置類來代替配置檔案:

@Configuration  //表明該類是配置類
@ComponentScan("com.lily")  //開啟元件掃描
public class SpringConfig {
}

@Component(value = "student")
public class Student {
}

public class Main {
    public static void main(String[] args) {
        // 載入配置類
        ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
        Student student = context.getBean("student",Student.class);
        System.out.println(student);
    }
}

相關文章