框架學習--spring(3)

spring

spring IOC常用註解

創建對象註解

作用:
在xml配置文件中編寫一個標籤實現的功能是一樣的

@component

作用:用於把當前對象存入spring容器中

屬性:
value:用於指定bean的id
不寫時,默認值爲當前類名且首字母小寫

注意:
需要進行配置,在spring創建容器時要掃描的包,配置不是在bean的約束中,而是在一個名稱爲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
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <!--告知spring在創建容器時要掃描的包,配置所需要的標籤不是在beans的約束中,而是一個名稱爲
    context名稱空間和約束中-->
    <context:component-scan base-package="com.itheima"></context:component-scan>
</beans>

@Controller

一般用在表現層

@Service

一般用在業務層

@Repository

一般用在持久層

總結

以上三個註解他們的作用和屬性與Component是一模一樣。

他們三個是spring框架爲我們提供明確的三層使用的註解,使我們的三層對象更加清晰

注入數據註解

作用:
在xml配置文件中標籤寫一個標籤作用是一樣的

Autowired

作用:自動按照類型注入。只要容器中有唯一的一個bean對象類型和要注入的變量類型匹配,就可以注入成功

如果ioc容器中沒有任何bean的類型和要注入的變量類型匹配,則報錯。

出現位置:
可以是變量上,也可以是方法上
細節:
在使用註解注入時,set方法就不是必須的了。
例如:

@Autowired
 private IAccountDao accountDao = null;

Qualifier

作用:在按照類中注入的基礎之上再按照名稱注入。它在給類成員注入時不能單獨使用。但是在給方法參數注入時可以

屬性:
value:用於指定注入bean的id。

@Qualifier("accountDao1")
private IAccountDao accountDao = null;

Resource

作用:直接按照bean的id注入。它可以獨立使用
屬性:
name:用於指定bean的id。

@Resource(name = "accountDao2")
 private IAccountDao accountDao = null;

總結

以上三個注入都只能注入其他bean類型的數據,而基本類型和String類型無法使用上述註解實現。

另外,集合類型的注入只能通過XML來實現。

Value

作用:用於注入基本類型和String類型的數據
屬性:
value:用於指定數據的值。它可以使用spring中SpEL(也就是spring的el表達式)

SpEL的寫法:${表達式}

改變作用範圍註解

作用:
在xml配置文件中中使用scope屬性實現的作用是一樣的

他們的作用就和在bean標籤中使用scope屬性實現的功能是一樣的

Scope

作用:用於指定bean的作用範圍

屬性:
value:指定範圍的取值。常用取值:singleton prototype

@Scope("prototype")
public class AccountServiceImpl implements IAccountService 

生命週期相關注解

作用:
在xml配置文件中中使用inti-method和destroy-method實現的作用是一樣的

PreDestroy

作用:用於指定銷燬方法

@PreDestroy
    public void  destroy(){
        System.out.println("銷燬方法執行了");
    }

PostConstruct

作用:用於指定初始化方法

基於註解開發

@Component

指定當前類爲配置類

細節:當配置類作爲AnnotationConfigApplicationContext對象創建的參數時,該註解可以不寫。

@ComponentScan

作用:用於通過註解指定spring在創建容器時要掃描的包
屬性:
value:它和basePackages的作用是一樣的,都是用於指定創建容器時要掃描的包。

我們使用此註解就等同於在xml中配置了:
<context:component-scan base-package=“com.itheima”></context:component-scan>

@Bean

作用:用於把當前方法的返回值作爲bean對象存入spring的ioc容器中
屬性:
name:用於指定bean的id。當不寫時,默認值是當前方法的名稱
細節:
當我們使用註解配置方法時,如果方法有參數,spring框架會去容器中查找有沒有可用的bean對象。
查找的方式和Autowired註解的作用是一樣的

@Import

作用:用於導入其他的配置類
屬性:
value:用於指定其他配置類的字節碼。
當我們使用Import的註解之後,有Import註解的類就父配置類,而導入的都是子配置類

@Value("${jdbc.driver}")
    private String driver;

@PropertySource

作用:用於指定properties文件的位置
屬性:
value:指定文件的名稱和路徑。
關鍵字:classpath,表示類路徑下

junit

1)junit集成了一個main方法,該方法就會判斷當前測試類有哪些方法有@Test註解,junit就會讓有Test註解的方法執行
2)junit不會判定是否採用spring框架,因此junit不會讀取配置文件/配置類創建spring核心容器

總結:
測試方法執行沒有IOC容器,無法完成注入

spring集成junit

思路

將junit集成的main方法替換掉

Spring整合junit的配置

1、導入spring整合junit的jar(座標)

2、使用Junit提供的一個註解把原有的main方法替換了,替換成spring提供的
@Runwith

3、告知spring的運行器,spring和ioc創建是基於xml還是註解的,並且說明位置
@ContextConfiguration
locations:指定xml文件的位置,加上classpath關鍵字,表示在類路徑下
classes:指定註解類所在地位置

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfiguration.class)
public class AccountServiceTest

注意:
當我們使用spring 5.x版本的時候,要求junit的jar必須是4.12及以上

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章