Spring(七)xml配置文件相关注解

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情

@Configuration

标注在类上,表示当前类是一个配置类。我们可以用注解类来完全替换掉xml配置文件。

注意:如果使用配置类替换了xml配置,spring容器要使用:AnnotationConfigApplicationContext

例如:

@Configuration
public class ApplicationConfig {
}
​
复制代码

@ComponentScan

可以用来代替context:component-scan标签来配置组件扫描。

basePackages属性来指定要扫描的包。

注意要加在配置类上。

例如:

@Configuration
@ComponentScan(basePackages = "com.springs")//指定要扫描的包
public class ApplicationConfig {
}
​
复制代码

@Bean

可以用来代替bean标签,主要用于第三方类的注入。

使用:定义一个方法,在方法中创建对应的对象并且作为返回值返回。然后在方法上加上@Bean注解,注解的value属性来设置bean的名称。

例如:

@Configuration
@ComponentScan(basePackages = "com.sangeng")
public class ApplicationConfig {

    @Bean("dataSource")
    public DruidDataSource getDataSource(){
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        druidDataSource.setUsername("root");
        druidDataSource.setUrl("jdbc:mysql://localhost:3306/mybatis_db");
        druidDataSource.setPassword("root");
        return druidDataSource;
    }

}
复制代码

注意事项:如果同一种类型的对象在容器中只有一个,我们可以不设置bean的名称。

具体写法如下:

@Configuration
@ComponentScan(basePackages = "com.springs")
public class ApplicationConfig {

    @Bean
    public DruidDataSource getDataSource(){
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        druidDataSource.setUsername("root");
        druidDataSource.setUrl("jdbc:mysql://localhost:3306/mybatis_db");
        druidDataSource.setPassword("root");
        return druidDataSource;
    }

}
复制代码

获取方式如下:

    public static void main(String[] args) {        
    //创建注解容器       
    AnnotationConfigApplicationContext app = new AnnotationConfigApplicationContext(ApplicationConfig.class);		
    //根据对应类的字节码对象获取        
   DataSource bean = app.getBean(DataSource.class);     
   System.out.println(userService);   
   }
复制代码

@PropertySource

可以用来代替context:property-placeholder,让Spring读取指定的properties文件。然后可以使用@Value来获取读取到的值。

使用:在配置类上加@PropertySource注解,注解的value属性来设置properties文件的路径。

然后在配置类中定义成员变量。在成员变量上使用@Value注解来获取读到的值并给对应的成员变量赋值。

例如:

jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/mybatis_db
jdbc.username=root
jdbc.password=root
复制代码

读取文件并且获取值

@Configuration
@ComponentScan(basePackages = "com.springs")
@PropertySource("jdbc.properties")
public class ApplicationConfig {

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


    @Bean
    public DruidDataSource getDataSource(){
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setDriverClassName(driverClassName);
        druidDataSource.setUsername(username);
        druidDataSource.setUrl(url);
        druidDataSource.setPassword(password);
        return druidDataSource;
    }

}

复制代码

注意事项:使用@Value获取读到的properties文件中的值时使用的是${key},而不是#{key}。

如何选择

①SSM

自己项目中的类的IOC和DI都使用注解,对第三方jar包中的类,配置组件扫描时使用xml进行配置。

②SpringBoot

纯注解开发

猜你喜欢

转载自juejin.im/post/7088134591428427784