Spring通過註解進行bean管理

註解是代碼中特殊的標記,使用註解可以完成特定的功能。註解可以使用在類、方法或屬性上,寫法如:@註解名稱(屬性名稱=屬性值)

注:官方推薦使用註解

使用步驟

一、準備工作

1、導入jar包

  • 導入基本的jar包:commons-logginglog4jspring-beansspring-contextspring-corespring-expression相關jar包。
  • 導入AOP的jar包:spring-aopjar包。

2、創建類、方法

//例如User.java
package com.myw;

import org.springframework.stereotype.Component;

public class User {
    public void add() {
        System.out.println("User Add Method.");
    }
}

3、創建Spring配置文件,引入約束;並開啓註解掃描

<!--applicationContext.xml-->
<?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"
       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.xsd">

    <!--
        開啓註解掃描
            (1)到包中掃描類、方法、屬性上是否有註解
     -->
    <context:component-scan base-package="com.myw"></context:component-scan>

    <!--
            (2)只掃描屬性上的註解
    -->
    <!--<context:annotation-config></context:annotation-config>-->
</beans>

二、註解創建對象

在創建對象的類上面使用註解實現,如:

@Component(value="user")
public class User {
    ...
}

注: value一般可以省略,直接寫成@Component(“user”)

創建測試類 TestAnno.java和測試方法,如:

package com.myw;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestAnno {

    @Test
    public void runUser() {
        ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
        User user = (User) context.getBean("user");
        user.add();
    }
}

除了上述提到的 @Component註解外,Spring中還提供了@Component的3個衍生註解,其功能就目前來說是一致的,均是爲了創建對象。

  • @Controller :WEB層
  • @Service :業務層
  • @Repository :持久層(不常用,一般使用@Component)

以單例或多實例方式創建對象,默認爲單例,多例對象設置註解如下:

@Component(value="user")
@Scope(value="prototype")
public class User {
    ...
}

三、註解注入屬性

案例:創建Service類和Dao類,並在Service中注入Dao對象。如下:
(1)創建Dao和Service對象

//UserDao.java
package com.myw;

import org.springframework.stereotype.Repository;

@Repository(value="userDao")
public class UserDao {
    public void add() {
        System.out.println("UserDao Add Method.");
    }
}

//UserService.java
package com.myw;

import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service(value="userService")
public class UserService {
    public void add() {
        System.out.println("UserService Add Method.");
        userDao.add();
    }
}

(2)在Service類中定義UserDao類型的屬性,並使用註解完成對象的注入
@Autowired:自動注入或自動裝配,是根據類名去找到類對應的對象來完成注入的。

@Autowired
private UserDao userDao;

或者 @Resource

@Resource(name="userDao")
private UserDao userDao;

注:

  1. 其中該註解的name屬性值爲註解創建Dao對象的value屬性的值。這兩種註解方式都不一定要爲需要注入的屬性定義set方法
  2. @Autowired註解默認是按類型進行裝配的,如果我們想使用名稱裝配可以結合@Qualifier註解進行使用。而@Resource,默認按照名稱進行裝配,如果名稱找不到,則使用類型裝配

總結:

配置文件和註解混合使用
1)創建對象的操作一般使用配置文件方式實現;
2)注入屬性的操作一般使用註解方式實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章