1 @Configuration
1.1 作用
- 用于指定当前类是一个Spring的配置类,当创建容器的时候会从该类上加载注解。获取容器的时候需要使用AnnotationApplicationContext(有@Configuration注解的类的.class)。
1.2 属性
- value:用于指定配置类的字节码。
1.3 应用示例
- 示例:
package com.sunxiaping.spring5.config; import org.springframework.context.annotation.Configuration; /** * @Configuration 注解标注的类就代表当前类是一个配置类 */ @Configuration public class SpringConfiguration { }
2 @ComponentScan
2.1 作用
- 用于指定Spring在初始化容器时要扫描的包。作用和在Spring的xml配置文件中的<context-component-scan base-package="com.sunxiaping"/>是一样的。
2.2 属性
- basePackages:用于指定要扫描的包。和该注解中的value属性作用一样。
2.3 应用示例
- 示例:
package com.sunxiaping.spring5.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan("com.sunxiaping.spring5") public class SpringConfiguration { }
3 @Bean
3.1 作用
- 该注解只能写在方法上,表明使用此方法创建一个对象,并且放入到Spring容器中。默认情况下,方法名就是Bean的id。
3.2 属性
- name:给当前@Bean注解方法创建的对象指定一个名称(即Bean的id)。
3.3 应用示例
- 示例:
package com.sunxiaping.spring5.config; import com.mchange.v2.c3p0.ComboPooledDataSource; import org.apache.commons.dbutils.QueryRunner; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; import java.beans.PropertyVetoException; @Configuration @ComponentScan("com.sunxiaping.spring5") public class SpringConfiguration { @Bean public DataSource dataSource() { try { ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true"); dataSource.setDriverClass("com.mysql.cj.jdbc.Driver"); dataSource.setUser("root"); dataSource.setPassword("123456"); return dataSource; } catch (PropertyVetoException e) { throw new RuntimeException(e); } } @Bean public QueryRunner queryRunner(DataSource dataSource) { return new QueryRunner(dataSource); } }
4 @PropertySource
4.1 作用
- 用于加载.properties文件中的配置。例如我们配置数据源的时候,可以把连接信息写到properties文件中,就可以使用此注解指定properties配置文件的位置。
4.2 属性
- value[]:用于指定properties文件位置。如果是在类路径下,需要写上classpath:
4.3 应用示例
- 示例:
- jdbc.properties
jdbc.driverClass=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true jdbc.user=root jdbc.password=123456
- JdbcConfig.java
package com.sunxiaping.spring5.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 org.springframework.context.annotation.PropertySource; import javax.sql.DataSource; import java.beans.PropertyVetoException; @PropertySource("classpath:jdbc.properties") public class JdbcConfig { @Value("${jdbc.driverClass}") private String driverClass; @Value("${jdbc.url}") private String jdbcUrl; @Value("${jdbc.user}") private String user; @Value("${jdbc.password}") private String password; @Bean public DataSource dataSource() { try { ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setJdbcUrl(jdbcUrl); dataSource.setDriverClass(driverClass); dataSource.setUser(user); dataSource.setPassword(password); return dataSource; } catch (PropertyVetoException e) { throw new RuntimeException(e); } } @Bean public QueryRunner queryRunner(DataSource dataSource) { return new QueryRunner(dataSource); } }
5 @Import
5.1 作用
- 导入其他的配置类,在引起其他配置的时候,可以不用再写@Configuration注解。当然,写上也没什么关系。
5.2 属性
- value[]:用于指定其他配置类的字节码
5.3 应用示例
- 示例:
- JdbcConfig.java
package com.sunxiaping.spring5.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 org.springframework.context.annotation.PropertySource; import javax.sql.DataSource; import java.beans.PropertyVetoException; @PropertySource("classpath:jdbc.properties") public class JdbcConfig { @Value("${jdbc.driverClass}") private String driverClass; @Value("${jdbc.url}") private String jdbcUrl; @Value("${jdbc.user}") private String user; @Value("${jdbc.password}") private String password; @Bean public DataSource dataSource() { try { ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setJdbcUrl(jdbcUrl); dataSource.setDriverClass(driverClass); dataSource.setUser(user); dataSource.setPassword(password); return dataSource; } catch (PropertyVetoException e) { throw new RuntimeException(e); } } @Bean public QueryRunner queryRunner(DataSource dataSource) { return new QueryRunner(dataSource); } }
- SpringConfig.java
package com.sunxiaping.spring5.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @Configuration @ComponentScan("com.sunxiaping.spring5") @Import(JdbcConfig.class) public class SpringConfiguration { }
6 通过注解获取容器
- 示例:
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfiguration.class);