bean的属性赋值是指给注入到IOC容器中的bean赋值,本文讲解了通过@Value的方式为bean赋值,补充讲解了springboot自动配置中的属性赋值,使用此方式可以非常方便的在yml文件中配置自己的属性值。文章课程链接:尚硅谷spring注解驱动教程(雷神)
例子:
xml方式是在property 标签中指定value属性。
<bean id="person" class="com.atgugui.bean.Person">
<property name="age" value="22"></property>
<property name="name" value="zx"></property>
</bean>
支持多种方式赋值,包括:
@Value(“zx”)
private String name; // 基本数值
@Value("#{ 12 - 6 }")
private double randomNumber; //注入SpEL表达式结果
@Value("${person.name}")
private String username; // 取出配置文件中的值(在运行环境变量中的值)
例子
首先,创建配置文件,取名 person.properties,并赋值
person.introduction=一个刚刚毕业的小白
实体类,加上@Data lombok注解,自动生成get、set方法
@Data
public class Person {
@Value("zx")
private String name;
@Value("#{88-66}")
private Integer age;
@Value("${person.introduction}")
private String introduction;
}
}
最后加上注解@PropertySource(value={“classpath:/person.properties”})引入配置文件生效
//将配置文件中的key/value保存到运行的环境变量中
@PropertySource(value={"classpath:/person.properties"})
@Configuration
public class MainConfigOfPropertyValues {
@Bean
public Person person() {
return new Person();
}
}
相信学习过springboot自动装配原理的同学都都知道一个叫***.***.autoconfigure的包,比如org.mybatis.spring.boot.autoconfigure,如图,其中有一个叫MybatisProperties的类
这里贴出部分源码,发现有一个注解叫@ConfigurationProperties(
prefix = “mybatis”
),就是这个注解,让我们能够在yml配置文件中配置属性值,比如配置typeAliasesPackage、typeHandlersPackage等等。
@ConfigurationProperties(
prefix = "mybatis"
)
public class MybatisProperties {
public static final String MYBATIS_PREFIX = "mybatis";
private static final ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();
private String configLocation;
private String[] mapperLocations;
private String typeAliasesPackage;
private Class<?> typeAliasesSuperType;
private String typeHandlersPackage;
private boolean checkConfigLocation = false;
private ExecutorType executorType;
private Class<? extends LanguageDriver> defaultScriptingLanguageDriver;
private Properties configurationProperties;
@NestedConfigurationProperty
private Configuration configuration;
public MybatisProperties() {
}
}
对应yml配置文件
mybatis:
mapper-locations: classpath:mybatis/mapper/*.xml
type-aliases-package: com.zx.mvc.pojo
springboot如何装配,这里只简单的讲讲,有兴趣的同学可学习相关内容。在包下,还有一个叫MybatisAutoConfiguration的类,部分源码如下,其中@EnableConfigurationProperties({MybatisProperties.class})的作用是,让使用了 @ConfigurationProperties 注解的类生效,并且将该类注入到 IOC 容器中,交由 IOC 容器进行管理
@Configuration
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
@ConditionalOnSingleCandidate(DataSource.class)
@EnableConfigurationProperties({MybatisProperties.class})
@AutoConfigureAfter({DataSourceAutoConfiguration.class, MybatisLanguageDriverAutoConfiguration.class})
public class MybatisAutoConfiguration implements InitializingBean {
private static final Logger logger = LoggerFactory.getLogger(MybatisAutoConfiguration.class);
private final MybatisProperties properties;
private final Interceptor[] interceptors;
private final TypeHandler[] typeHandlers;
private final LanguageDriver[] languageDrivers;
private final ResourceLoader resourceLoader;
private final DatabaseIdProvider databaseIdProvider;
private final List<ConfigurationCustomizer> configurationCustomizers;
public MybatisAutoConfiguration(MybatisProperties properties, ObjectProvider<Interceptor[]> interceptorsProvider, ObjectProvider<TypeHandler[]> typeHandlersProvider, ObjectProvider<LanguageDriver[]> languageDriversProvider, ResourceLoader resourceLoader, ObjectProvider<DatabaseIdProvider> databaseIdProvider, ObjectProvider<List<ConfigurationCustomizer>> configurationCustomizersProvider) {
this.properties = properties;
// 属性赋值
}
@Bean
@ConditionalOnMissingBean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
factory.setDataSource(dataSource);
factory.setVfs(SpringBootVFS.class);
...
return factory.getObject();
}
@Bean
@ConditionalOnMissingBean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
ExecutorType executorType = this.properties.getExecutorType();
return executorType != null ? new SqlSessionTemplate(sqlSessionFactory, executorType) : new SqlSessionTemplate(sqlSessionFactory);
}
1.创建***Properties 类,编写要配置的属性,提供get、set方法,加上注解@ConfigurationProperties(
prefix = “自定义命名,对应yml中的属性名”
),加上@Component或@Configuration(组合注解,包含@Component),加入IOC容器
2.在我们需要使用的地方注入,使用@Autowired 方式注入,如:
@Autowired
private ***Properties properties;
例子,以JWT为例,先创建 JwtProperties ,第二在util中使用该 properties ,获取相应的属性值
@Data
@Configuration
@ConfigurationProperties(
prefix = "jwt"
)
public class JwtProperties {
/**
* 加密秘钥
*/
private String secret;
/**
* 有效时间
*/
private long expire;
/**
* 用户凭证
*/
private String header;
/**
* 发行者
*/
private String issuer;
/**
* token标准前缀
*/
private String prefix;
}
// 使用
@Slf4j
@Data
@Component
public class TokenUtil {
@Autowired
private JwtProperties properties;
/**
* 生成Token签名
* @param id 用户实体 id
*/
public String generateToken(Long id) {
...
}
# 配置
jwt:
header: token
expire: 43200 #单位秒 43200 即12小时
secret: 2aa617f884abcdefg
issuer: zx
prefix: Bea++rer
如果总结的还行,就点个赞呗 @_@ 如有错误,欢迎指点,下一篇spring注解驱动开发-4 Spring 自动装配···