常用依賴
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
</dependencies>
Spring核心配置文件:
<?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">
<!--bean就是java對象 , 由Spring創建和管理-->
<!--開啟注解-->
<!--指定要掃描的包,這個包下的注解就會生效-->
<context:component-scan base-package="pojo"></context:component-scan>
<context:annotation-config/>
</beans>
注解說明
-
@Autowired:自動裝配,通過類型,名字 如果不能Autowired不能唯一自動裝配上屬性,則需要通過quailifier(value="xxx")
-
@Autowired是根據類型自動裝配的,加上@Qualifier則可以根據byName的方式自動裝配
-
@Qualifier不能單獨使用。
-
@Nullable:加上這個注解,表明該值為空
-
@resource:自動裝配,通過名字,類型
-
@component:組件,放在類上,表明這個類被spring管理了,就是bean!
-
@Resource如有指定的name屬性,先按該屬性進行byName方式查找裝配;
其次再進行默認的byName方式進行裝配;
如果以上都不成功,則按byType的方式自動裝配。
都不成功,則報異常。
-
@Component三個衍生注解
為了更好的進行分層,Spring可以使用其它三個注解,功能一樣,目前使用哪一個功能都一樣。
-
@Controller:web層
-
@Service:service層
-
@Repository:dao層
-
小結
-
@Autowired與@Resource異同:
-
1、@Autowired與@Resource都可以用來裝配bean。都可以寫在字段上,或寫在setter方法上。
-
2、@Autowired默認按類型裝配(屬於spring規范),默認情況下必須要求依賴對象必須存在,如果要允許null 值,可以設置它的required屬性為false,如:@Autowired(required=false) ,如果我們想使用名稱裝配可以結合@Qualifier注解進行使用
-
3、@Resource(屬於J2EE復返),默認按照名稱進行裝配,名稱可以通過name屬性進行指定。如果沒有指定name屬性,當注解寫在字段上時,默認取字段名進行按照名稱查找,如果注解寫在setter方法上默認取屬性名進行裝配。當找不到與名稱匹配的bean時才按照類型進行裝配。但是需要注意的是,如果name屬性一旦指定,就只會按照名稱進行裝配。 它們的作用相同都是用注解方式注入對象,但執行順序不同。@Autowired先byType,@Resource先byName。
