spring 的纯注解配置

不写 bean.xml 文件,所有配置都用注解来实现

  基于注解的 IoC 配置已经完成,但还是离不开 xml 配置文件,是因为有一句很关键的配置:

    <!-- 告知spring框架在,读取配置文件,创建容器时,扫描注解,依据注解创建对象,并存入容器中 -->
    <context:component-scan base-package="com.fgy"></context:component-scan>

  另外,数据源和 QueryRunner(JdbcTemplate)的配置也需要靠注解来实现。

    <!--配置QueryRunner-->
    <bean id="runner" class="org.apache.commons.dbutils.QueryRunner" scope="prototype">
      <!--注入数据源-->
      <constructor-arg name="ds" ref="dataSource"></constructor-arg>
    </bean>

    <!-- 配置数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
      <!--连接数据库的必备信息-->
      <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
      <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/spring"></property>
      <property name="user" value="root"></property>
      <property name="password" value="root"></property>
    </bean>

需要用到注解:

  @Configuration
    作用:
      用于指定当前类是一个 spring 配置类,当创建容器时会从该类上加载注解。

      获取容器时需要使用AnnotationApplicationContext(有@Configuration 注解的类.class)。
    属性:
      value:用于指定配置类的字节码

@Configuration
public class SpringConfiguration {
}

  @ComponentScan

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

@Configuration
@ComponentScan("com.fgy")
public class SpringConfiguration {
}

  @Bean

    作用:
      该注解只能写在方法上,表明使用此方法创建一个对象返回出来,并且放入 spring 容器。
    属性:
      name:给当前@Bean 注解方法创建的对象指定一个名称(即 bean 的 id),如果不指定,默认值是当前方法名称。

    细节:
      当使用此注解配置方法时,如果方法有参数( createQueryRunner(DataSource dataSource) ),spring 框架会去容器中查找有没有可用的 bean 对象。
      查找的方式和 Autowired 注解的作用是一样的

public class JdbcConfig {
  /**
  * 创建一个数据源,并存入 spring 容器中
  * @return
  */
  @Bean(name="dataSource")
  public DataSource createDataSource() {
    try {
      ComboPooledDataSource ds = new ComboPooledDataSource();
      ds.setUser("root");
      ds.setPassword("root");
      ds.setDriverClass("com.mysql.jdbc.Driver");
      ds.setJdbcUrl("jdbc:mysql:///spring");
      return ds;
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
  /**
  * 创建一个 QueryRunner,并且也存入 spring 容器中
  * @param dataSource
  * @return
  */
  @Bean(name="runner")  @Scope(prototype)
  public QueryRunner createQueryRunner(DataSource dataSource) {
    return new QueryRunner(dataSource);
  }
}

  @PropertySource

    作用:

      用于加载.properties 文件中的配置。例如配置数据源时,可以把连接数据库的信息写到 properties 配置文件中,
      就可以使用此注解指定 properties 配置文件的位置。
    属性:
      value[]:用于指定 properties 文件位置。如果是在类路径下,需要写上 classpath:

@Configuration
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {
  @Value("${jdbc.driver}")
  private String driver;
  @Value("${jdbc.url}")
  private String url;
  @Value("${jdbc.username}")
  private String username;
  @Value("${jdbc.password}")
  private String password;
  /**
  * 创建一个数据源,并存入 spring 容器中
  * @return
  */
  @Bean(name="dataSource")
  public DataSource createDataSource() {
    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);
    }
  }

  /**
  * 创建一个 QueryRunner,并且也存入 spring 容器中
  * @param dataSource
  * @return
  */
  @Bean(name="runner")
  @Scope(prototype)
  public QueryRunner createQueryRunner(DataSource dataSource) {
    return new QueryRunner(dataSource);
  }
}

    jdbc.properties 文件:
      jdbc.driver=com.mysql.jdbc.Driver
      jdbc.url=jdbc:mysql://localhost:3306/spring

      jdbc.username=root
      jdbc.password=root

  @Import

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

    属性:
      value[]:用于指定其他配置类的字节码。

@Configuration
@ComponentScan(basePackages = "com.fgy")
@Import({JdbcConfig.class})
public class SpringConfiguration {
}

  注意:新的问题产生了,由于没有配置文件了,如何获取容器呢?

ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfiguration.class);

工程结构图:

      

原文地址:https://www.cnblogs.com/roadlandscape/p/12301675.html

时间: 2024-08-01 04:21:52

spring 的纯注解配置的相关文章

Spring MVC4 纯注解配置教程

阅读本文需要又一定的sping基础,最起码要成功的运行过一个SpringMvc项目. 在传统的Spring项目中,我们要写一堆的XML文件.而这些XML文件格式要求又很严格,很不便于开发.而网上所谓的0配置,并不是纯粹的0配置,还是要写一些xml配置,只是用了几个@Service,@Controller注解而已. 在这里,我讲介绍一种新的配置方式,一行XML代码都不需要,什么web.xml,Application-context.xml,Beans.xml,统统去死吧! 首先建立一个Maven项

spring学习3:spring ioc的纯注解配置

spring ioc的纯注解配置 一.分析 在上一篇博客中实现了xml+注解的ioc使用,我们发现,之所以离不开xml配置文件的原因是在该文件中有一句很关键的话,告知spring在创建容器时要扫描的包,依据扫描到的注解创建对象并放入容器中. <!-- 开启注解扫描,告知spring在创建容器时要扫描的包 --> <context:component-scan base-package="com.lyy.service"> </context:compone

sping框架纯注解配置

1.相关注解 ①@Configuration注解-->添加了该注解在类上,就表明该类是spring的配置类.该类的作用是用来替代原来的XML配置文件的. 通过配置类创建容器时,需要使用AnnotationConfigApplicationCpntext(有@Configuration注解的类.class)来获取对象. ②ComponentScan注解-->注解扫描,用于扫描spring组件类的路径,等同于原来配置文件的<context:component-scan base-packag

Spring+MyBatis纯注解零XML整合(4)

不得不说,利用XML作为配置文件是一个非常好的想法,它可以轻松地实现配置集中化,而且修改之后无需再次编译.然而,由于大多数情况下开发者基本都会拿到程序的源码,加之对于各种XML配置文件一般情况下也只有开发者会去动,可以说XML在一定程度上也相当于程序代码,只是不用编译而已.因此很多人并不是很喜欢XML这种东西.早在Spring 2.5之前就有很多人对满天飞的XML配置叫苦不迭.从Spring 3开始,Java config开始出现,这一特性使得Spring能够摆脱XML配置文件.但是大多数人仍然

阶段3 2.Spring_10.Spring中事务控制_8 spring基于纯注解的声明式事务控制

新建项目 把之前项目src下的内容全部复制过来 pom.xml内复制过来 开始配置 新建一个config的包,然后再新建配置文件类SpringConfiguration @Configuration这个注解是可写可不写的. 这个类会做为字节码的参数传给ApplicationContext @ComponentScan配置要扫描的包 @Import 但是这个Import要导谁呢? 新建JdbcConfig类 这一就可以通过Import导入JdbcConfig这个类 xml里面扫描包的配置可以省略掉

Spring MVC全注解配置 - 无web.xml

Serlvet 3以后,我们可以使用注解来配置Servlet,对于像Spring这类的框架来说是一个很好的适应.Spring也对此特性加入了很多的新功能.本文就将简单的对之前的xml配置转换为java代码的配置.代码配置让程序员们觉得更加具有流程化,不像配置很多代码程序员们都不愿意look into. 接下来,进行替换我们之前的web.xml和spring-mvc.xml的配置.也就是在你的web工程里面看不到这两个配置文件了.(可能有的童鞋会说,这样配置可能对以后的修改不方便,无法达到只修改配

Spring基于纯注解方式的使用

经过上篇xml与注解混合方式,对注解有了简单额了解,上篇的配置方式极大地简化了xml中配置,但仍有部分配置在xml中进行,接下来我们就通过注解的方式将xml中的配置用注解的方式实现,并最终去掉xml配置. 一.xml中遗留配置 注解扫描 <!-- 开启注解并扫描指定包中带有注解的类 --> <context:component-scan base-package="com.kkb.spring.service"/> 非自定义bean,如sqlsessionFac

spring mvc jfreechar注解配置及数据库访问

1.action类,使用注解配置的: package com.t5.manage.action;import java.awt.Font;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.List;import java.util.Map; import javax.annotation.Resource;import javax.servl

Spring学习记录(2) Spring MVC+Mybatis 注解配置

所有XML的配置如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springfr