zoukankan      html  css  js  c++  java
  • Spring IoC 容器配置(全注解方式 )

    去除applicationContext.xml实现简单的spring,把bean交给spring容器管理,获取属性的注入

    定义一个配置类:

    @Configuration

    用于指定当前类是一个 spring 配置类,当创建容器时会从该类上加载注解。获取容器时需要使用AnnotationApplicationContext(有@Configuration 注解的类.class)。

    @ComponentScan

    用于指定 spring 在初始化容器时要扫描的包。作用和在 spring 的 xml 配置文件中的:<context:component-scan base-package="com.itheima"/>是一样的。

    @Configuration
    @ComponentScan(basePackages = "com.zl.spring") //类似于xml中<context:component-scan> 扫描注解
    //加载多个文件//@ComponentScan(basePackages = {"",""})
    @Import(JdbcConfig.class) //导入其他配置类
    public class SpringConfiguration {
    
    }

    @Import

     用于导入其他配置类,在引入其他配置类时,可以不用再写@Configuration 注解。当然,写上也没问题

    @PropertySource

     用于加载.properties 文件中的配置。例如我们配置数据源时,可以把连接数据库的信息写到properties 配置文件中,就可以使用此注解指定 properties 配置文件的位置。

    @Bean

     该注解只能写在方法上,表明使用此方法创建一个对象,并且放入 spring 容器。把这个方法的返回的对象添加到Spring容器

    //可写可不写,提高可读性
    @Configuration
    @PropertySource("classpath:db.properties") //加载properties中的文件,classpath: 类路径
    public class JdbcConfig {
        @Value("${jdbc.driverClassName}")
        private String driverClass;
        @Value("${jdbc.url}")
        private String jdbcUrl;
        @Value("${jdbc.user}")
        private String username;
        @Value("${jdbc.password}")
        private String password;
        //给连接池的数据源:  c3p0 赋四大参数
        @Bean("dataSource")
        public DataSource createDataSource() {
            ComboPooledDataSource ds = new ComboPooledDataSource();
            try {
                ds.setDriverClass(driverClass);
                ds.setJdbcUrl(jdbcUrl);
                ds.setUser(username);
                ds.setPassword(password);
            } catch (PropertyVetoException e) {
                e.printStackTrace();
                return null;
            }
            return ds;
        }
        //给Dbutils工具类,注入添加数据源
        @Bean("queryRunner")
        @Scope("prototype") //设置为多例
        public QueryRunner createQueryRunner(@Qualifier("dataSource") DataSource ds) { //获取制定数据源,每次都拿同一个数据源
            return new QueryRunner(ds);
        }
    }

    userDaoImpl同样的获取方式:

    @Repository("userDao")
    public class UserDaoImpl implements IUserDao {
        @Autowired  //根据类型   推荐使用
        @Qualifier("queryRunner") //根据id
        private QueryRunner runner;

    userServiceImpl同样的获取方式:

    @Service("userService")
    public class UserServiceImpl implements IUserService {
        //使用@Resource 注解实现注入 ,不写name按类型
        @Resource(name="userDao")
        private IUserDao userDao;

    测试类:使用  AnnotationConfigApplicationContext 获取 ApplicationContext 对象

    private IUserService userService;
        @Before
        public void setUp() throws Exception {
            ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfiguration.class);
             userService = applicationContext.getBean(IUserService.class);
        }
  • 相关阅读:
    codevs 1115 开心的金明
    POJ 1125 Stockbroker Grapevine
    POJ 2421 constructing roads
    codevs 1390 回文平方数 USACO
    codevs 1131 统计单词数 2011年NOIP全国联赛普及组
    codevs 1313 质因数分解
    洛谷 绕钉子的长绳子
    洛谷 P1276 校门外的树(增强版)
    codevs 2627 村村通
    codevs 1191 数轴染色
  • 原文地址:https://www.cnblogs.com/64Byte/p/13088528.html
Copyright © 2011-2022 走看看