Spring的註解開發

cuixiaoming1994發表於2018-03-23

Spring的註解開發分為兩種,一種是部分使用註解,仍然保留配置檔案的原始註解;另一種是完全使用註解配置的新註解;

原始註解

主要是替代 自定義Bean的xml配置,和Hibernate的原始註解一樣,我們還得告訴配置檔案,我們使用註解配置了哪些檔案
使用註解,得配置context名稱空間和約束路徑

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    <!--配置context名稱空間-->
    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
        <!--配置context的約束路徑-->
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 配置包掃描  目的:告知spring容器 哪個包下的類使用了註解配置
            base-package:基本包 Spring可以掃描該包及其後代包
     -->
    <context:component-scan base-package="com.cuixiaoming"></context:component-scan>

</beans>

下面是使用的註解

//這四個物件的使用方法完全一樣,下面三個是第一個的語義化註解
@Component:例項化物件    (重點)
    //用在類定義上,裡面是以前bean標籤中的id如    @Component("userService")
@Controller:用於例項化web層的實體    (重點)
@Service:用於例項化service層的實體   (重點)
@Repository:用於例項化dao層的實體  Repository:直譯是倉庫的意思   (重點)


//物件注入,配置在
@Autowired:注入物件 注意:單獨使用它是按照型別注入的    (重點)
@Qualifier(id值) :使用@Autowired+@Qualifier 是按照指定的id名稱進行注入
@Resource(name="id的值") 相當於@Autowired+@Qualifier

//字串注入
@Value(字串)
@Value("${spring容器中key}")  (重點)

//
@Scope("singleton/prototype")   (重點)

@PostConstruct
@PreDestroy

如果非自定義實體 不能使用上述原始註解進行例項化的配置

新註解

新註解是把xml配置檔案換成了實體配置類
新註解常用的標籤如下

@Configuration : 標註該實體是一個配置類
@ComponentScan : 用於掃描包  ---->@ComponentScan(basePackages = {"com.cuixiaoming"})
@Bean  : 將@Bean修飾的方法的返回值 以指定的名稱儲存到spring容器中---->@Bean(name="dataSource")
@PropertySource : 載入properties檔案  ---->@PropertySource("classpath:jdbc.properties")
@Import : 引入其他配置實體  ---->@Import({DataSourceConfiguration.class})

裡面把我測試的例子貼上來
主配置例項

package com.cuixiaoming.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

//將配置xml換成一個配置的實體類
//宣告這是一個配置實體類
@Configuration
//配置包掃描路徑
@ComponentScan(basePackages = {"com.cuixiaoming"})
@Import({DataSourceConfiguration.class})//引入的是其他配置實體的位元組碼物件

public class SpringConfiguration {
}
 //配置佔位符配置器(在Spring4.3版本以下,都需要手動配置配置器物件,在所有配置物件中,只要其中一個配置了就可以了)

用來資料來源配置的配置例項

package com.cuixiaoming.config;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;

import javax.sql.DataSource;
import java.beans.PropertyVetoException;

@Configuration
//將properties中資料載入進spring容器中
@PropertySource("classpath:jdbc.properties")
public class DataSourceConfiguration {



    //將容器的資料封裝起來
    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String passworld;

    //將該方法的返回值以指定的名稱儲存到spring容器中
    @Bean(name="dataSource")
    public DataSource getDataSource() throws PropertyVetoException {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass(driver);
        dataSource.setJdbcUrl(url);
        dataSource.setUser(username);
        dataSource.setPassword(passworld);
        return dataSource;
    }

    //配置佔位符配置器(在Spring4.3版本以下,都需要手動配置配置器物件,在所有配置物件中,只要其中一個配置了就可以了)
    @Bean
    public static PropertySourcesPlaceholderConfigurer getPropertySourcesPlaceholderConfigurer(){
        return new PropertySourcesPlaceholderConfigurer();
    }
}
  • 配置佔位符配置器(在Spring4.3版本以下,都需要手動配置配置器物件,在所有配置物件中,只要其中一個配置了就可以了)
 @Bean
 public static PropertySourcesPlaceholderConfigurer getPropertySourcesPlaceholderConfigurer(){
     return new PropertySourcesPlaceholderConfigurer();
 }

相關文章