Spring類載入(註解方式)
通過 Spring 註冊的類一共只有三種載入方式!
環境:
spring-context 4.2.6
jdk 7
Eclipse Neon for j2ee
最簡單的配置
<?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"
xmlns:mvc ="http://www.springframework.org/schema/mvc"
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-4.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd" >
<!-- 掃描註解 -->
<context:component-scan base-package="org.foo" />
</beans>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
入口方法:
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringEntrance {
public static void main(String[] args){
ClassPathXmlApplicationContext resource = new ClassPathXmlApplicationContext(
new String[]{
"applicationContext.xml"
});
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
專案結構:
src
└── main
└── java
├── applicationContext.xml
└── org
└── foo
├── service
│ ├── TestDemo.java
│ └── Test.java
└── SpringEntrance.java
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
單例+預載入(預設)
//專案一啟動就產生一個且僅一個例項,即單例。
//並且,通過 @Autowired 只能獲得這個單例。new Test()則不受單例限制
@Component
public class Test{
}
- 1
- 2
- 3
- 4
- 5
- 6
單例+懶載入
//專案啟動時不載入
//僅當 TestDemo 類的 @Autowired Test 被掃描到時,才生成 Test 類的一個且僅一個例項。
//並且,通過 @Autowired 只能獲得這個單例。new Test()則不受單例限制
@Lazy
@Component
public class Test{
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
正確的載入時機
package org.foo.service;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class TestDemo {
//禁止使用 @Autowired 標籤載入 @Lazy 的類
// @Autowired
// TestSingle testSingle;
//通過 BeanFactory 介面建立例項
@Autowired
BeanFactory beanFactory;
public void doSth(){
//test 是 Test 類名首字母小寫!一定要首字母小寫!
//只有執行到這裡 Test 類才被例項化,延遲載入成功
TestSingle ts=(TestSingle) beanFactory.getBean("test");
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
錯誤的載入時機:
//懶載入無效
//專案啟動時 TestDemo 被載入時,掃描 @Autowired 標籤,生成 Test 的單例
@Component
public class TestDemo{
@Autowired // 專案啟動時,這裡就會建立 Test 的單例,Test 類的懶載入無效
Test test;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
多例+懶載入(僅支援懶載入)
定義
//每個 @Autowired 生成一個例項,可以有多個例項
@Scope("prototype")
//@Lazy //無論加不加 @Lazy,被 @Scope("prototype") 修飾的類都會 懶載入。
@Component
public class Test{
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
呼叫:
package org.foo.service;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class TestDemo {
//禁止使用 @Autowired 標籤載入 @Lazy 的類
// @Autowired
// TestSingle testSingle;
//通過 BeanFactory 介面建立例項
@Autowired
BeanFactory beanFactory;
public void doSth(){
Test test = null;
for(int i=0;i<10;i++) {
//test 是 Test 類名首字母小寫!一定要首字母小寫!
//只有執行到這裡 Test 類才被例項化,延遲載入成功
test = (Test) beanFactory.getBean("test");
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
spring beanfactory類高階用法
反射方式載入類
beanFactory.getBean(
task.getHandler() + "UrlSpider", // 反射獲得子類
AbstractUrlSpider.class ); // 返回父型別
- 1
- 2
- 3
需要注意的問題
建構函式裡不支援 @Autowired 的例項
package org.foo.service;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class TestDemo {
@Autowired
BeanFactory beanFactory;
public TestDemo (){
beanFactory.getBean("test",Test.class);
}
}
相關推薦
Spring類載入(註解方式)
通過 Spring 註冊的類一共只有三種載入方式!環境: spring-context 4.2.6 jdk 7 Eclipse Neon for j2ee最簡單的配置<?xml version="
徹底搞懂Spring類載入(註解方式)
目錄 通過 Spring 註冊的類一共只有三種載入方式! 環境: spring-context 4.2.6 jdk 7 Eclipse Neon for j2ee 最簡單的配置 <?xml version="1.0" e
【Spring學習筆記】11 spring aop 程式設計(註解方式)
2018.5.25註解方式比較繁瑣不直觀,瞭解即可1.建立web專案2.引入jar包在原來jar包基礎上引入aop相關的jar包3.日誌檔案log4j.properties4.準備目標物件先建立介面再建立實現類package com.lu.spring.aop.service
spring的bean管理(註解方式)
elasticsearch1.Spring的Bean管理的中常用的註解@Component:組件.(作用在類上)public interface UserDao { public void sayHello(); } @Component(value="userDao")
Spring --13.Spring中AOP程式設計(註解方式)
1、基於註解AOP入門案例 1.2、建立工程引入依賴 pom.xml <dependencies> <dependency> <groupId>org.springframework</groupId&
Spring框架的AOP技術(註解方式)
1. 步驟一:建立JavaWEB專案,引入具體的開發的jar包 * 先引入Spring框架開發的基本開發包 * 再引入Spring框架的AOP的開發包 * spring的傳統AOP的開發的包 * spring-aop-4.2.4.RELEASE.jar
10 Spring框架的AOP技術(註解方式)
引入Spring框架開發的基本開發包,spring的傳統AOP的開發的包與aspectJ的開發包 建立spring配置檔案 applicationContext.xml <beans xmlns="http://www.springfra
spring事務的傳播屬性和事務隔離級別及配置事務(註解方式)
一、Propagation (事務的傳播屬性) Propagation : key屬性確定代理應該給哪個方法增加事務行為。這樣的屬性最重要的部份是傳播行為。有以下選項可供使用: PROPAGATION_REQUIRED--支援當前事務,如果當前沒有事務,就新建一個事務。這是最常見的選擇。 PROPAG
Spring學習5-Spring整合JDBC及其事務處理(註解方式)
2、步驟二:使用JdbcTemplate類操作資料庫: Spring把JDBC中重複的操作建立成了一個模板類:org.springframework.jdbc.core.JdbcTemplate。 A:要使用JdbcTemplate,需要為每一個DAO配置一個JdbcTemplate例項:
Spring:依賴注入(註解方式)、泛型依賴注入
註解方式實現依賴注入支援手工裝配和自動裝配(慎用) 一般是宣告bean和bean直接的依賴關係的時候用比較好 使用註解方式時,也支援給Field注入值(在XML中不可以給Field注入)。另外就是setter方式注入。 @Resource註解在spring安裝目錄的lib\
spring boot + hibernate 多資料來源(註解方式)
一)spring boot + hibernate 多資料來源(XML) import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.En
SpringMVC框架(1)之(1.2 入門程式—處理器對映器和處理器介面卡(註解方式))
1.DispatcherServlet載入時會預設載入 DispatcherServlet.properties 檔案,目的是為了載入裡面的處理器對映器、處理器介面卡、檢視解析器等各個元件;(所以 springmvc.xml 中 兩種處理器介面卡、兩種處理器介面卡、檢視解析器都可以省略;)
[TensorFlow深度學習入門]實戰八·簡便方法實現TensorFlow模型引數儲存與載入(pb方式)
[TensorFlow深度學習入門]實戰八·簡便方法實現TensorFlow模型引數儲存與載入(pb方式) 在上篇博文中,我們探索了TensorFlow模型引數儲存與載入實現方法採用的是儲存ckpt的方式。這篇博文我們會使用儲存為pd格式檔案來實現。 首先,我會在上篇博文基礎上,實現由c
[TensorFlow深度學習入門]實戰七·簡便方法實現TensorFlow模型引數儲存與載入(ckpt方式)
[TensorFlow深度學習入門]實戰七·簡便方法實現TensorFlow模型引數儲存與載入(ckpt方式) TensorFlow模型訓練的好網路引數如果想重複高效利用,模型引數儲存與載入是必須掌握的模組。本文提供一種簡單容易理解的方式來實現上述功能。參考部落格地址 備註: 本文采用的
springboot學習筆記(七)——整合mybatis(註解方式)
目錄 前言: 開發環境: 專案結構: 配置檔案: 資料庫表: 開始開發: 測試: 總結: 前言: 這一篇博文的延續上一篇的。只是使用mybatis的註解形式。相對來說註解形式和xml形式是
spring-AOP+自定義註解實現日誌管理(註解方式實現)
一、場景 後臺管理系統中,管理員作業系統時生成日誌儲存在資料庫中。 二、實現 1、jar包依賴 <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop --> <dependency&
spring-mybatis MapperScannerConfigurer,註解方式 (資料庫持久化四)
主流方式 xml配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://ww
複習之spring基礎(三)——Spring 的事務管理—配置AOP事務(XML和註解方式)
事務 事務邏輯上的一組操作,組成這組操作的各個邏輯單元,要麼一起成功,要麼一起失敗 事務的特性 原子性 :強調事務的不可分割. 一致性 :事務的執行的前後資料的完整性保持一致. 隔離性 :一個事務執行的過程中,不應該受到其他事務的干擾. 永續性 :事務一旦結束
Spring第二天:Spring的IOC的註解方式、Spring的AOP開發(XML)
Spring第二天繼續,今天要學習的是Spring的IOC的註解方式和Spring的AOP開發(XML) 目錄 1.Spring的IOC註解方式開發 1.1Spring的IOC註解開發入門 1.1.1建立Web專案引入Jar包 1.1.2引入Spri
spring aop實現類似代理類和類中的方法(註解實現)
1.可以指定aop的執行次序 [email protected],可以攔截類上有@DataSource註解的類中的所有方法 [email protected]可以攔截有註解@DataSource的方法 4.兩者結合可以實現類似Spring註解