基本註解:
1.標註 bean類
————————————————————
@Component:標準一個普通的spring Bean類。
@Controller:標註一個控制器組件類。
@Service:標註一個業務邏輯組件類。
@Repository:標註一個DAO組件類。
————————————————————
2. 作用域
————————————————————
@Scope :prototype、request、session、global
session
————————————————————
3.自動裝配
————————————————————
@Autowired
————————————————————
@Configuration把一個類作爲一個IoC容器,它的某個方法頭上如果註冊了@Bean,就會作爲這個Spring容器中的Bean。
@Scope註解 作用域
@Lazy(true) 表示延遲初始化
@Service用於標註業務層組件、
@Controller用於標註控制層組件(如struts中的action)
@Repository用於標註數據訪問組件,即DAO組件。
@Component泛指組件,當組件不好歸類的時候,我們可以使用這個註解進行標註。
@Scope用於指定scope作用域的(用在類上)
@PostConstruct用於指定初始化方法(用在方法上)
@PreDestory用於指定銷燬方法(用在方法上)
@DependsOn:定義Bean初始化及銷燬時的順序
@Primary:自動裝配時當出現多個Bean候選者時,被註解爲@Primary的Bean將作爲首選者,否則將拋出異常
@Autowired 默認按類型裝配,如果我們想使用按名稱裝配,可以結合@Qualifier註解一起使用。如下:
@Autowired @Qualifier("personDaoBean") 存在多個實例配合使用
@Resource默認按名稱裝配,當找不到與名稱匹配的bean纔會按類型裝配。
@PostConstruct 初始化註解
@PreDestroy 摧毀註解 默認 單例 啓動就加載
@Async異步方法調用
@Scope註解 作用域
@Lazy(true) 表示延遲初始化
@Service用於標註業務層組件、
@Controller用於標註控制層組件(如struts中的action)
@Repository用於標註數據訪問組件,即DAO組件。
@Component泛指組件,當組件不好歸類的時候,我們可以使用這個註解進行標註。
@Scope用於指定scope作用域的(用在類上)
@PostConstruct用於指定初始化方法(用在方法上)
@PreDestory用於指定銷燬方法(用在方法上)
@DependsOn:定義Bean初始化及銷燬時的順序
@Primary:自動裝配時當出現多個Bean候選者時,被註解爲@Primary的Bean將作爲首選者,否則將拋出異常
@Autowired 默認按類型裝配,如果我們想使用按名稱裝配,可以結合@Qualifier註解一起使用。如下:
@Autowired @Qualifier("personDaoBean") 存在多個實例配合使用
@Resource默認按名稱裝配,當找不到與名稱匹配的bean纔會按類型裝配。
@PostConstruct 初始化註解
@PreDestroy 摧毀註解 默認 單例 啓動就加載
@Async異步方法調用
______________________________________________________________________
bean.xml
搜索 某個包下的所有類
<context:component-scan base-package="com.kn.beanScope" />
______________________________________________________________________
OH.java
注意@Component 註解,即 標註一個普通的bean
package com.kn.beanScope;
import org.springframework.stereotype.Component;
@Component
public class OH {
public void sout(){
System.out.println("???? THIS IS OH date!");
}
}
BeanScope.java
@Scope 設定作用域 爲 每次新建自身實例
package com.kn.beanScope;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
@Component
@Scope("prototype")
public class BeanScope {
@Autowired
private OH oh;
private String beanname;
public void say(){
System.out.println("BeanScope say :"+this.hashCode()+"from "+beanname);
oh.sout();
}
public void init(){
beanname="FFF";
}
public void destroy(){
beanname="GGGG";
say();
}
}
UserAxeTest.java
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean_Zj.xml");
BeanScope beanScope=ctx.getBean("beanScope",BeanScope.class);
beanScope.init();
beanScope.say();
BeanScope beanScope1=ctx.getBean("beanScope",BeanScope.class);
beanScope1.say();
獲取兩次 beanScope 然後 第一次先調用init 再say,第二次 直接say結果:
BeanScope say :1873859565from FFF
???? THIS IS OH date!
BeanScope say :1843289228from null
???? THIS IS OH date!
可以看出,是兩個不同的實例。
第一次成功初始化,from FFF 第二次則爲null。