Spring的配置注解

  • 相关的注解
  • 组件扫描
  • 创建配置类


相关的注解

@component:表明该类会作为组件类,并告知spring要创建bean
@componentScan:表明开启组件扫描功能,可以指定扫描对应的包或指定的类
@ContextConfiguration:多用于在单元测试类里面引入对应的配置文件和配置类的信息
@ContextConfiguration(Locations="…/applicationContext.xml")
@ContextConfiguration(classes = SimpleConfiguration.class)。

组件扫描

spring应用上下文中所有的bean都会指定一个id
@component注解会将类的小写名作为该bean的id
@Named可以代替@component的注解的作用,给对应的bean进行相关的命名的操作;

@Autowired进行对应的装配的操作
	(a)在构造器上面进行注入
		private CompactDisco cd
		@Autowired
		public CDplayer (CompactDisco cd ){
			this.cd =cd;
		}
	(b)在属性set上面也可以进行注入的操作
		@Autowired
		public void setCompactDisco(CompactDisco cd ){
			this.cd=cd ;
		}
在装配的时候会出现null的空指针的异常,可以在Autowired上面的属性required进行设置

创建配置类

@Configuration表明该类为一个配置类
这里的java配置类我们不再采用componentScan进行对应的扫描的操作

采用
@Bean
public CompactDisco sgtPepprs(){
	return new People();
}
此注解告诉了spring这个方法将会返回一个对象,该对象要注册为spring应用上下文中的bean
对应的bean的id和带有@Bean注解的方法名是一样的,这里的就是sgtPepprs,同样可以在baen的属性里面进行指

@PropertySource
Spring 通过 @PropertySource 读取外部的资源文件:

ignoreResourceNotFound = true 忽略没有找到的配置文件
@PropertySource(value= {“classpath:jdbc.properties”}, ignoreResourceNotFound = true)


@Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个xml文件
@ComponentScan(basePackages = "cn.td.springboot.javaconfig") //配置扫描包
@PropertySource(value= {"classpath:jdbc.properties"}, ignoreResourceNotFound = true) //读取外部文件获取jdbc参数值
public class SpringConfig {

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

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

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

	@Bean(destroyMethod = "close")
	public DataSource dataSource() {
		BoneCPDataSource boneCPDataSource = new BoneCPDataSource();
		// 数据库驱动
		boneCPDataSource.setDriverClass(jdbcDriverClassName);
		// 相应驱动的jdbcUrl
		boneCPDataSource.setJdbcUrl(jdbcUrl);
		// 数据库的用户名
		boneCPDataSource.setUsername(jdbcUsername);
		// 数据库的密码
		boneCPDataSource.setPassword(jdbcUsername);
		// 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0
		boneCPDataSource.setIdleConnectionTestPeriodInMinutes(60);
		// 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0
		boneCPDataSource.setIdleMaxAgeInMinutes(30);
		// 每个分区最大的连接数
		boneCPDataSource.setMaxConnectionsPerPartition(100);
		// 每个分区最小的连接数    
		boneCPDataSource.setMinConnectionsPerPartition(5);
		return boneCPDataSource;
	}

	@Bean // 通过该注解来表明是一个Bean对象,相当于xml中的<bean>
	public UserDAO getUserDAO(){
		return new UserDAO(); // 直接new对象做演示
	}
	  
}


spring的配置的加载
@Bean
public CompactDisco stCompactDisco(){
	return new StCompactDisco();
}

@Bean
public Cdplayer cdPlayer1(){
	return new Cdplayer(stCompactDisco());
}

@Bean
public Cdplayer cdpLayer2(){
	return new Cdplayer(stCompactDisco());
}

因为stCompactDisco上面已经具有注解bean,spring会拦截所有对它的调用,并确保直接返回该方法所创建的bean
而不是每次都对它进行实际的调用
spring默认是单例的因此二个Cdplayer会得到相同的StCompactDisco