Spring經常使用註解

一、用於註冊bean對象註解

1.1 @Component

做用:mysql

調用無參構造建立一個bean對象,並把對象存入Spring的IoC容器,交由Spring容器進行管理。至關於在xml中配置一個Bean。

屬性:sql

value:指定Bean的id。若是不指定value屬性,默認Bean的id是當前類的類名,首字母小寫。

子註解:
如下三個註解是從@Component派生出來的,它們的做用與@Component是同樣的,Spring增長這三個註解是爲了在語義行區分MVC三層架構對象。架構

@Component:用於註冊非表現層、業務層、持久層的對
@Controller:用於註冊表現層對象  
@Service:用於註冊業務層對象  
@Reposity:用於註冊持久層對象

1.2 @Bean

做用:框架

用於把當前方法的返回值(對象)做爲Bean對象存入Spring的IoC容器中(註冊Bean)

屬性:ui

name/value:用於指定Bean的id。當不寫時,默認值是當前方法的名稱。注意:當咱們使用註解配置方法時,若是方法有參數,Spring框架會去容器中查找有沒有可用的Bean對象,查找的方式和Autowired註解的方式是同樣的。

案例:url

@Configuration
public class JdbcConfig {
    /**
     * 用於建立QueryRunner對象
     * @param dataSource
     * @return
     */
    @Bean(value = "queryRunner")
    public QueryRunner createQueryRunner(DataSource dataSource) {
        return new QueryRunner(dataSource);
    }

    /**
     * 建立數據源對象
     * @return
     */
    @Bean(value = "dataSource")
    public DataSource createDataSource() {
        try {
            ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
            comboPooledDataSource.setDriverClass("com.mysql.jdbc.Driver");
            comboPooledDataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase");
            comboPooledDataSource.setUser("root");
            comboPooledDataSource.setPassword("root");
            return comboPooledDataSource;
        }catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

二、用於依賴注入的註解

2.1 @Autowired

做用:code

@Autowire和@Resource都是Spring支持的註解形式動態裝配Bean的方式。Autowire默認按照類型(byType)裝配,若是想要按照名稱(byName)裝配,需結合@Qualifier註解使用。

屬性:xml

required:@Autowire註解默認狀況下要求依賴對象必須存在。若是不存在,則在注入的時候會拋出異常。若是容許依賴對象爲null,需設置required屬性爲false。

案例:對象

@Autowired /* Autowire默認按照類型(byType)裝配 */
// @Autowired(required = false) /* @Autowire註解默認狀況下要求依賴對象必須存在。若是不存在,則在注入的時候會拋出異常。若是容許依賴對象爲null,需設置required屬性爲false。 */
// @Qualifier("userService") /* 按照名稱(byName)裝配 */
private UserService userService;

2.2 @Qualifier

做用:生命週期

@Autowired是按照名稱(byName)裝配,使用了@Qualifier註解以後就變成了按照名稱(byName)裝配。它在給字段注入時不能獨立使用,必須和@Autowire一塊兒使用;可是給方法參數注入時,能夠獨立使用。

屬性:

value:用於指定要注入的bean的id,其中,該屬性能夠省略不寫。

案例:

@Autowire
@Qualifier(value="userService") 
//@Qualifier("userService")     //value屬性能夠省略不寫
private UserService userService;

2.3 @Resource

做用:

@Autowire和@Resource都是Spring支持的註解形式動態裝配bean的方式。@Resource默認按照名稱(byName)裝配,名稱能夠經過name屬性指定。若是沒有指定name,則註解在字段上時,默認取(name=字段名稱)裝配。若是註解在setter方法上時,默認取(name=屬性名稱)裝配。

屬性:

name:用於指定要注入的bean的id
type:用於指定要注入的bean的type

裝配順序

1.若是同時指定name和type屬性,則找到惟一匹配的bean裝配,未找到則拋異常;
2.若是指定name屬性,則按照名稱(byName)裝配,未找到則拋異常;
3.若是指定type屬性,則按照類型(byType)裝配,未找到或者找到多個則拋異常;
4.既未指定name屬性,又未指定type屬性,則按照名稱(byName)裝配;若是未找到,則按照類型(byType)裝配。

案例:

@Resource(name="userService")
//@Resource(type="userService")
//@Resource(name="userService", type="UserService")
private UserService userService;

2.4 @Value

做用:

經過@Value能夠將外部的值動態注入到Bean中,能夠爲基本類型數據和String類型數據的變量注入數據

案例:

// 1.基本類型數據和String類型數據的變量注入數據
@Value("tom") 
private String name;
@Value("18") 
private Integer age;


// 2.從properties配置文件中獲取數據並設置到成員變量中
// 2.1jdbcConfig.properties配置文件定義以下
jdbc.driver \= com.mysql.jdbc.Driver  
jdbc.url \= jdbc:mysql://localhost:3306/eesy  
jdbc.username \= root  
jdbc.password \= root

// 2.2獲取數據以下
@Value("${jdbc.driver}")  
private String driver;

@Value("${jdbc.url}")  
private String url;  
  
@Value("${jdbc.username}")  
private String username;  
  
@Value("${jdbc.password}")  
private String password;

四、生命週期相關的註解

4.1 @PostConstruct

做用:

指定初始化方法

案例:

@PostConstruct  
public void init() {  
    System.out.println("初始化方法執行");  
}

4.2 @PreDestroy

做用:

指定銷燬方法

案例:

@PreDestroy  
public void destroy() {  
    System.out.println("銷燬方法執行");  
}
相關文章
相關標籤/搜索