基於註解管理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); } }