SpringIOC----註解
利用註解配置應用IOC
IOC:以註入方式應用對象,事項組件解耦
註解是在jdk5.0時追加一些新特性
註解:在類定義,方法定義,成員變量定義前面使用,[email protected](取代bean配置)
1) 組件自動掃描
可以按指定的包路徑,將包下所以組件掃描,如果發現組件類定義前有以下標記,會將組建掃描到Spring容器。
@Component:其他組件
@Controller:控制層組件
@Service:業務層組件XXXService
@Responsitory:數據訪問層組件XXXDao
@Named(需要引入第三方標準包)
@Scope:控制對象創建,默認單例
@PostConstruct:指定init-method
@PreDestroy指定destroy-method
實例如下:
(1)在applicationContext.xml中開啟組建掃描
註意:base-package屬性指定包名路徑
如下:
<!--開啟組件掃描--> <context:component-scan base-package="org.tarean.bean"/>
(2)在相關類上進行註解標記(將該組建掃描到Spring容器中):@component默認ID為首字母小寫,形如 id=exampleBean
如下:
@Component //掃描 ExampleBean 組件,默認id=exampleBeanpublic class ExampleBean{ public void execute(){ System.out.println("執行execute處理方式"); } }
註意:可以自己指定id 名,Scope ,init ,destroy等
如下:
@Component("examl") //指定id=examl public class ExampleBean1{ public void execute(){ System.out.println("------------"); } }
@Component @Scope("prototype")//等價於<bean scope="prototype"> public class ExampleBean{ public void execute(){ System.out.println("執行execute處理方法"); } @PostConstruct//等價於<bean init-method="true"> public void init(){ System.out.println("初始化邏輯"); } @PreDestroy//等價於<bean destroy-method="true"> public void destroy(){ System.out.println("釋放資源"); } }
註意:註解沒有 ”推遲” 標記
註入註解:
@Resource:可以在變量定義之前或setXX方法前應用
@Autowired(按類型):可以在變量定義之前或setXX方法前應用
一般使用時,@[email protected],都可以實現註入
如果不存在多個匹配類型,[email protected]@Autowired都可以。
如果存在多個匹配類型,[email protected](name=”指定名稱”)---set註入
[email protected] @Qualifier(“p”)---構造器註入【強制按名稱】
實例:set註入
public class student{ //需要調用computer和phone @Resource private Computer c; public void setC(Computer c){ this.c=c; } @Resource private Phone p; public void setP(Phone p){ this.p=p; } }
提示:關於SpringIOC應用:自己編寫的組件建議使用註解配置,框架API只能使用XML配置
表達式註入:
(1)直接在xml中註入參數值
在applicationContext.xml中信息註入
<!-- 將MyDatasource掃描到Spring容器 --> <context:component-scan base-package="com.home"/> <!-- Spring創建一個Properties對象 [email protected],將Properties對象信息給MyDataSource註入--> <util:properties id="db"> <prop key="username">root</prop> <prop key="pawwsord">1234</prop> <prop key="driver">com.mysql.jbdc.Driver</prop> <prop key="url">jdbc:mysql:///test</prop> </util:properties>
在相關類中添加註解
package com.home.entity; @Component("ds") public class MyDataSource { @value("#{db.username}")//將db對象username值註入 private String username; @value("#{db.password}")//將db對象password值註入 private String password; @value("#{db.driver}")//將db對象driver值註入 private String driver; @value("#{db.url}")//將db對象url值註入 private String url; public void getConnection(){ //利用鏈接參數創建數據庫連接 System.out.println(uername+","+password+","+driver+","+url); } }
(2)讀取Properties文件中的參數方式
創建mydb.properties
username=root
password=1234
driver=com.mysql.jbdc.Driver
url=jdbc:mysql:///test
在xml文件中獲取properties文件
<util:properties id="db" location="classpath:mydb.properties"> </util:properties>
在相關類中添加註解
@Component("ds") public class MyDataSource { @value("#{db.username}")//將db對象username值註入 private String username; @value("#{db.password}")//將db對象password值註入 private String password; @value("#{db.driver}")//將db對象driver值註入 private String driver; @value("#{db.url}")//將db對象url值註入 private String url; public void getConnection(){ //利用鏈接參數創建數據庫連接 System.out.println(uername+","+password+","+driver+","+url); } }
SpringIOC----註解