1. 程式人生 > >SpringIOC----註解

SpringIOC----註解

api ati spring aml 數值 鏈接 掃描 code jdbc

利用註解配置應用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=exampleBean
public 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----註解