Spring:IOC之二
阿新 • • 發佈:2022-01-13
Bean的作用域
- 在Spring裡,可以設定Bean建立的例項是單例項還是多例項
- 預設情況下是單例項物件。
- 單例項物件情況下:每次建立的物件的地址都是相同的(類似靜態變數?)
- 通過
scope
來設定是單例還是多例- 預設:singleton 單例項物件
- 設定為singleton 的時候,載入Spring配置檔案時就會建立單例項物件。
- prototype:表示多例項物件
- 設定為prototype的時候,在呼叫
getBean
方法的時候建立多例項物件。
- 設定為prototype的時候,在呼叫
- Request:表示request域物件
- session:表示session域物件
- 預設:singleton 單例項物件
Bean的生命週期
- 從物件的建立到物件的銷燬的過程
- 執行無參構造建立bean例項
- 呼叫set方法設定屬性值
- 把Bean例項傳遞給Bean後置處理器的方法
- 執行初始化方法
- 把Bean例項傳遞給Bean後置處理器的方法
- 建立bean例項物件
- 執行銷燬方法
- Bean的後置處理器
- 建立一個類,實現BeanPostProcessor介面
- 重寫兩個方法
- 在配置檔案中建立該類的物件則完成後置處理器的建立。
XML自動裝配
什麼是自動裝配
-
根據指定裝配規則(屬性名稱或者屬性型別),Spring自動將匹配的屬性進行注入
-
在
<bean>
標籤中設定autowire欄位,可以實現自動裝配- byName:通過屬性名稱注入
- byType:通過屬性型別注入
-
外部屬性檔案的引入
-
引入外部德魯伊資料連線池
-
在xml中配置context
xmlns:context="http://www.springframework.org/schema/context" http://www.springframework.org/schema/context/spring-context.xsd
-
引入外部檔案
<context:property-placeholder location="classpath:hello.xml"/>
-
建立德魯伊資料連線池物件
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${pro.driver}"/> <property name="url" value="${pro.url}"/> <property name="username" value="${pro.username}"/> <property name="password" value="${pro.password}"/> </bean>
-
XML方式暫告一段落
基於註解方式實現物件建立
什麼是註解
- 註解是程式碼的特殊標記,格式:@註解名(屬性名=屬性值,...)
- 使用註解:註解可以作用在類上,方法上面或者屬性上面
- 使用註解的目的:簡化xml配置
基於註解的物件建立
- @Component:一般註解
- @Service:一般用在Service層
- @Controller:一般用在Controller層
- @Repository:一般用在持久層(DAO)
- 上面的註解功能是一樣的,都可以建立Bean例項,但是建議在對應的層使用對應的註解。
實現
- 引入aop依賴
spring-aop-5.2.6.RELEASE
- 開啟元件掃描
- 先在配置檔案中新增context
- 然後開啟元件掃描
<context:component-scan base-package="com.boerk"/>
- 在類上加上註解
@Component(value="user")
等價於先前在xml裡配置的內容。也可以不加value,預設的value為類名切首字母小寫
//pojo類
@Component(value="user")
public class User {
public void add(){
System.out.println("hello");
}
}
//test類
@Test
public void test1(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
User user = applicationContext.getBean("user", User.class);
user.add();
}
//打印出hello