Spring深入学习(5)spring的一些其他注解

一些新的注解

在做完之前的小练习后,我们发现配置文件依然存在,那么能不能完全使用注解的方式来使用spring框架呢?
下面就介绍一些新的注解

@Configuration

作用: 指定当前类是一个配置类

@ComponentScan

作用: 用于通过注解指定spring在创建容器时要扫描的包
属性: value或basePackages的作用是一样的,都是用于指定创建容器时要扫描的包。

@bean

作用: 用于把当前方法的返回值作为bean对象存入spring的核心容器中。
属性: name,用于指定bean的id。当不写时,默认值是当前方法的名称。
细节: 当我们使用注解配置方法时,如果方法有参数,spring框架会去容器中寻找有没有可用的bean对象。查找的方式与Autowired注解相同。

@Import

作用: 用于导入其他的配置类
属性: value,用于指定其他配置类的字节码。当我们使用Import注解后,有Import注解的就是父配置类,而导入的就是子配置类。

@PropertySource

作用: 用于指定properties文件的位置
属性: value,指定文件的名称和路径。
关键字: classpath表示配置文件在类路径下

这时候创建一个SpringConfiguration类,进行我们的纯注解改造

package com.tianqicode.config;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.springframework.context.annotation.*;

import javax.sql.DataSource;

/**
 * 这是一个配置类,它与bean.xml的作用是一样的
 */

//这是一个配置类
@Configuration

//指定spring要扫描的包
@ComponentScan(value = "com.tianqicode")

//导入子配置类
@Import({JdbcConfig.class})

//导入配置文件
@PropertySource("classpath:jdbcConfig.properties")
public class SpringConfiguration {

}

在上面这个父配置类中,我们导入了子配置类JdbcConfig.class,以及使用PropertySource导入了配置文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/javaStudy
jdbc.username=root
jdbc.password=admin

子配置类内容

package com.tianqicode.config;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;

import javax.sql.DataSource;

//子配置类
public class JdbcConfig {

	//使用Value注解注入读入的配置文件内容
    @Value("${jdbc.driver}")
    private String driver;

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

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

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

    /**
     * 用于创建一个QueryRunner对象
     * @param
     * @return
     */
    @Bean(name = "runner")
    public QueryRunner creatQueryRunner(DataSource ds) {

        return new QueryRunner(ds);
    }

    /**
     * 用于创建一个数据源对象
     * @return
     */
    @Bean(name = "dataSource")
    public DataSource creatDataSource() {
        try {
        	//在这里动态配置数据库
            ComboPooledDataSource ds = new ComboPooledDataSource();
            ds.setDriverClass(driver);
            ds.setJdbcUrl(url);
            ds.setUser(username);
            ds.setPassword(password);
            return ds;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

到此为止,我们的纯注解方式就改造好了,现在去运行测试类
发现我们获取核心容器的方式还是使用配置文件获取。
修改一下,使用注解的方式获取核心容器

@Test
    public void testFindAll() {

        //ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
        
		//在这里写入配置类的类型,使用AnnotationConfigApplicationContext类获取。
        ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfiguration.class);

        AccountService accountService = (AccountService) ac.getBean("accountService");

        List<Account> accounts = accountService.findAllAccount();

        for (Account account : accounts) {
            System.out.println(account);
        }
    }

点击运行测试类,运行成功。

发布了30 篇原创文章 · 获赞 2 · 访问量 632

猜你喜欢

转载自blog.csdn.net/qq_43585377/article/details/102644221
今日推荐