1. 程式人生 > 其它 >bean物件的建立

bean物件的建立

Bean  建立的生命週期

 

1. 程式啟動,首先讀取 帶有@Component,@Service  ,@Controller 的類這些類都是spring 要建立的bean 物件。

2.預設根據無參構造方法例項化 這裡該類就被建立成一個物件了,但還不是bean。

  推斷構造方法:  有無參就用。 如果有多個構造方法,就用無參構造例項化。 如果沒有無參構造方法,就報錯。 也可以通過 在指定構造方法上加@PostConstruct,強制執行。

  推斷構造方法的引數選擇:  先根據型別去Spring中查詢,查到是一個就賦值,查到多個 就根據 變數名字在查。 type+name

3. 依賴注入

  根據  類上的 這些註解 @Autowired,@Resource,去spring 中取出來,進行賦值。

4. 初始化。

  初始化前:如果需要可以進行賦值,比如資料庫的查詢賦值都是行的。

  初始化:如果需要可以進行賦值,比如資料庫的查詢賦值都是行的。

  初始化後(Aop): 生成代理物件。 所以說bean 的初始化,會產出兩個物件,一個實際物件,一個又spring管理的代理類bean.

5. 才正在是一個歸spring 管理的bean。

 

怎麼樣一個類要不要進行AOP?

  1. . 程式啟動,首先讀取 帶有 @Aspect,@Component 註解的類。 如果通過反射。獲取類中的方法。 比如獲取 該類定義的切點 ,和切入表示式。然後就看那些類。符合就給哪些類生成代理類啊。

 


class UserServiceProxy extends UserService{
// 這個物件不是代理物件。 是bean 初始化時,真實的物件。
private UserService userService;

public void test(){
// 1.y有沒有 @Transactional
// 2.執行切面 想要乾的事情 (比如開啟事務)
//3. 執行業務邏輯 這裡的 userService 不是代理物件。
userService.test();
}
}

注意:事務失效的情況。

  1. 代理類才是開啟事務的類。 如果想要 類的事務傳遞下去。就