Spring新注解(详解)

0.图文解析

1.@Configuration

使用方法:直接放在Spring核心配置类的上边

//标志该类是Spring的核心配置类
@Configuration
public class SpringConfiguration {
}

2.@ComponentScan

使用方法:直接放到需要扫描的类的上边,扫描该类的组件(注解)

//标志该类是Spring的核心配置类
@Configuration
//组件扫描,相当于xml中的<context:component-scan base-package="com.jd"></context:component-scan>
@ComponentScan("com.jd")
public class SpringConfiguration {
}

3.@Bean

使用方法:放在方法的上边
解析:Spring会将当前方法的返回值存储到Spring容器中,相当于xml中的bean标签创建类对象

//标志该类是Spring的核心配置类
@Configuration
//组件扫描
@ComponentScan("com.jd")//相当于xml中的<context:component-scan base-package="com.jd"></context:component-scan>
public class SpringConfiguration {

    @Bean("dataSource")//Spring会将当前方法的返回值存储到Spring容器中
    public DataSource getDataSource() throws Exception{
        //创建数据源
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        //设置连接参数
        dataSource.setDriverClass("com.mysql.jdbc.Driver");
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
        dataSource.setUser("root");
        dataSource.setPassword("root");
        return dataSource;
    }
}

4.@PropertySource

创建数据源的配置参数与Spring核心配置文件相耦合,需要解耦,即将数据源的配置参数抽离到数据源配置文件中。

  1. 创建数据源配置文件jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=root

2.在Spring核心配置类中导入jdbc.properties

//标志该类是Spring的核心配置类
@Configuration
//组件扫描
@ComponentScan("com.jd")//相当于xml中的<context:component-scan base-package="com.jd"></context:component-scan>
@PropertySource("jdbc.properties")//导入外部properties文件,相当于xml中的<context:property-placeholder location="jdbc.properties"></context:property-placeholder>
public class SpringConfiguration {

    @Bean("dataSource")//Spring会将当前方法的返回值存储到Spring容器中
    public DataSource getDataSource() throws Exception{
        //创建数据源
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        //设置连接参数
        dataSource.setDriverClass("com.mysql.jdbc.Driver");
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
        dataSource.setUser("root");
        dataSource.setPassword("root");
        return dataSource;
    }
}
  1. 替换配置

假如像xml中分离jdbc.properties文件那样,利用$ 进行分离,有如下代码

//标志该类是Spring的核心配置类
@Configuration
//组件扫描
@ComponentScan("com.jd")//相当于xml中的<context:component-scan base-package="com.jd"></context:component-scan>
@PropertySource("jdbc.properties")//导入外部properties文件,相当于xml中的<context:property-placeholder location="jdbc.properties"></context:property-placeholder>
public class SpringConfiguration {

    @Bean("dataSource")//Spring会将当前方法的返回值存储到Spring容器中
    public DataSource getDataSource() throws Exception{
        //创建数据源
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        //设置连接参数
        dataSource.setDriverClass("${jdbc.driverClassName}");
        dataSource.setJdbcUrl("${jdbc.url}");
        dataSource.setUser("${jdbc.username}");
        dataSource.setPassword("${jdbc.password}");
        return dataSource;
    }
}

但是此时,因为是在java文件中,即使导入了jdbc.properties文件,但是$ 符号也不能匹配到properties文件中key。即在java文件中,$失效

解决方法:可以利用原始注解中的@Value,有如下代码

//标志该类是Spring的核心配置类
@Configuration
//组件扫描
@ComponentScan("com.jd")//相当于xml中的<context:component-scan base-package="com.jd"></context:component-scan>
//导入外部properties文件,相当于xml中的<context:property-placeholder location="jdbc.properties"></context:property-placeholder>
@PropertySource("jdbc.properties")
public class SpringConfiguration {


    @Value("${jdbc.driverClassName}")
    private String driverClassName;
    @Value("${jdbc.jdbc.url}")
    private String url;
    @Value("${jdbc.userName}")
    private String userName;
    @Value("${jdbc.password}")
    private String password;
    
    @Bean("dataSource")//Spring会将当前方法的返回值存储到Spring容器中
    public DataSource getDataSource() throws Exception{
        //创建数据源
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        //设置连接参数
        dataSource.setDriverClass(driverClassName);
        dataSource.setJdbcUrl(url);
        dataSource.setUser(userName);
        dataSource.setPassword(password);
        return dataSource;
    }

}

图文解析

5.Import

1.现在在核心配置类SpringConfiguration中耦合了原本属于数据源配置的代码,需要消除耦合,分离配置文件,需要创建DataSourceConfiguration(即数据源配置文件)

在这里插入图片描述

2.将于数据源相关的配置转移到DataSourceConfiguration中,得到如下类

//导入外部properties文件,相当于xml中的<context:property-placeholder location="jdbc.properties"></context:property-placeholder>
@PropertySource("jdbc.properties")
public class DataSourceConfiguration {

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

    @Bean("dataSource")//Spring会将当前方法的返回值存储到Spring容器中
    public DataSource getDataSource() throws Exception{
        //创建数据源
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        //设置连接参数
        dataSource.setDriverClass(driverClassName);
        dataSource.setJdbcUrl(url);
        dataSource.setUser(userName);
        dataSource.setPassword(password);
        return dataSource;
    }
}

图文解析

3.利用@Import在SpringConfiguration中导入DataSourceConfiguration

@Import(DataSourceConfiguration.class)
public class SpringConfiguration {
    
}

补充:如果要导入多个配置类(假设它们的类名为a,b,c,d,共四个配置类),要如下格式

@Import({a.class,b.class,c.class,d.class})//导入多个配置类

6.核心配置文件类对象的获取

public class UserController {

    public static void main(String[] args) {
        //ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        ApplicationContext app = new AnnotationConfigApplicationContext(SpringConfiguration.class);
        UserService userService = (UserService) app.getBean("userService");
        userService.save();
    }
}

图文解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值