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