文章目錄
1、IOC屬性注入有哪幾種方式?
IOC屬性注入的方式一共有4種,分別爲
-
set注入
本質是調用實體類的setXXX()方法來完成對象的創建
在配置文檔中使用<property name="" value=""/>標籤
-
構造器注入
本質是調用實體類的構造方法來創建對象
在配置文檔中使用<constructor-arg name=" " value=""/>標籤
-
@value注入
使用@value註解在實體類的屬性上,註解的值與屬性的值進行綁定,不推薦這樣子講屬性的值寫死
開啓註解掃描
<context:component-scan base-package="包名"/>
-
註解注入(推薦使用)
使用@Configuration註解標註過的類相當於一個xml配置文檔,而使用@Bean標記過的方法相當於xml配置文檔中的<bean></bean>標籤
2、bean的id和name屬性的區別
- id的命名必須要滿足XML的命名規範(不能以數字、符號開頭,不能有空格等),而name的命名沒有這麼多的限定
- 在同一個上下文中,id和name之間的命名不能衝突,也就是id和id、id和name、name和name之間,都不能重名
- id只能取一個值,而name可以有多個值
3、說說getBean的五種用法的區別
-
context.getBean(String id/name)
通過id值或name值進行找,找到就返回一個Object類型的對象,需要強制類型轉換
-
context.getBean(Class clazz)
通過類型查找,無序類型轉換,但是可能會存在多個類型相同的類型之間衝突,分不清要的是哪一個
-
context.getBean(String id/name , Class clazz)
通過類型和id/name查找,準確,無序類型轉換,不衝突
-
context.getBean(Class clazz , Object…objs)
使用類型,通過工廠方法,使用objs初始化對象的參數列表
-
context.getBean(String id/name , Object…objs)
使用id/name,通過工廠方法,使用objs初始化對象的參數列表
4、說說以下註解的作用
-
@Component
添加在實體類上,表示一個組件
-
@Service
添加在服務層,表示是服務層的代碼
-
@Controller
添加在控制層,表示是控制層的代碼
-
@Repository
添加在接口上,表示是接口
-
@Bean
添加在方法上,便是一個Bean對象
-
@Configuration
配置註解,添加在配置類上,相當於一個配置文檔
-
@Scope
生存範圍,默認是單例(singleton),可以更改爲非單例(prototype)
-
@Lazy
加載策略,默認爲懶加載(true),可以更改爲積極加載(false)
-
@Value
對實體類的屬性進行賦值綁定,不推薦使用
-
@Resource
根據名稱自動注入
-
@Autowired
根據類型自動注入
-
@Qualify
與@Autowired結合,先按照類型進行尋找,如果類型衝突,就按照名稱尋找
5、什麼是Druid?
-
數據庫連接池
數據庫連接池負責分配、管理和釋放數據庫連接,它允許應用程序重複使用一個現有的數據庫連接,而不是重新建立一個。
最小連接數:連接池一直保持的數據庫連接
最大連接數:是連接池能申請的最大連接數,如果數據庫連接請求超過次數,後面的數據庫連接請求將被加入到等待隊列中
-
Druid簡介
Druid是爲監控而生的數據庫連接池,它是阿里巴巴開源平臺上的一個項目,是Java語言中最好的數據庫連接池,Druid能夠提供強大的監控和擴展功能。它可以替換DBCP和C3P0連接池,Druid提供了一個高效、功能強大、可擴展性好的數據庫連接池
6、什麼是Junit?
-
什麼是Junit
JUnit是一個Java語言的單元測試框架,Junit測試是程序員測試,即所謂白盒測試,因爲程序員知道被測試的軟件如何(How)完成功能和完成什麼樣(What)的功能
-
優點
極限編程、重構
-
特性
- 用於測試期望結果的斷言(Assertion)
- 用於共享共同測試數據的測試工具
- 用於方便的組織和運行測試的測試套件
- 圖形和文本的測試運行器
-
常用註解
- @Before 註解:在每個測試方法之前執行;
- @After 註解:在每個測試方法之後執行;
- @BeforeClass 註解:在所有方法執行之前執行;
- @AfterClass 註解:在所有方法執行之後執行;
- @Test(timeout = xxx) 註解:設置當前測試方法在一定時間內運行完,否則返回錯誤
- @Test(expected = Exception.class) 註解:設置被測試的方法是否有異常拋出。拋出異常類型爲:Exception.class
- @Ignore 註解:註釋掉一個測試方法或一個類,被註釋的方法或類,不會被執行
- @Test註解:被註解後的類可以理解爲測試類的一個入口
7、Spring的單元測試需要添加什麼註解?
-
@RunWith(SpringJUnit4ClassRunner.class)
-
@ContextConfiguration(locations={“classpath*:spring-mybatis.xml”})
-
@Import(Application.class)
如果涉及DAO,需要通過Import導入環境來進行測試
8、說出工廠模式中的三個角色
- 定義功能的接口
- 實現接口的實現類
- 創建實現類的工廠類
9、說出 singleton與prototype的區別
-
singleton(單例)
只有一個實例對象
當將一個Bean定義設置爲singleton作用域時,Spring IOC容器中只會存在一個共享的Bean實例,並且所有對Bean的請求,只要id與該Bean定義相匹配,都只會返回該Bean的同一實例
-
prototype
訪問一次創建一個實例
prototype作用域的Bean會在每次對該Bean請求(將其注入到另一個Bean中,或者以程序的方式調用容器的getBean()方法)時都創建一個新的Bean實例。對有狀態的Bean應使用prototype作用域,而對無狀態的Bean則應該使用singleton作用域。
對於具有prototype作用域的Bean,Spring不能對該Bean的整個生命週期負責,具有prototype作用域的Bean創建後交由調用者負責銷燬對象回收資源