Spring入門學習---04
阿新 • • 發佈:2021-11-03
Spring
1、關於Bean的自動裝配
自動裝配是Spring滿足bean依賴注入的一種方式,Spring會根據上下文自動給bean裝配屬性
三種裝配方式:
- xml中顯示的配置
- java中顯示的配置
- 隱式的自動裝配
1. byName自動裝配
<!-- byName:會自動在容器中的上下文查詢和自己物件set方法後面的值對應的beanID --> <bean id="people" class="com.charles.dao.People" autowire="byName"> <propertyname="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("CHARLES") public String name;
3.衍生註解
@Component 有幾個衍生註解,我們在web開發中,會按照MVC三層架構分層
-
-
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中使用。