@Configuration(proxyBeanMethods =false)// Some conditions ...
public class MyAutoConfiguration {// Auto-configured beans ...
@Configuration(proxyBeanMethods =false)
@ConditionalOnClass(SomeService.class)
public static class SomeServiceConfiguration {
@Bean
@ConditionalOnMissingBean
public SomeService someService(){
return new SomeService();}}}
@Configuration(proxyBeanMethods =false)
public class MyAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public SomeService someService(){
return new SomeService();}}
@ConfigurationProperties("acme")
public class AcmeProperties {/** * Whether to check the location of acme resources. */
private boolean checkLocation =true;/** * Timeout for establishing a connection to the acme server. */
private Duration loginTimeout = Duration.ofSeconds(3);}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
完整示例
本示例主要功能是实现日志记录功能
自动配置类
@Configuration
@EnableConfigurationProperties(LogsProperties.class)
@ConditionalOnProperty(prefix ="logs", name ="enabled", havingValue ="true")
@EnableAspectJAutoProxy
public class LogsAutoConfiguration {
private static final Logger logger = LoggerFactory.getLogger(LogsAutoConfiguration.class);
@Resource
private LogsProperties logsProperties ;
@Bean
public AspectJExpressionPointcutAdvisor logAdvisor(){
AspectJExpressionPointcutAdvisor advisor = new AspectJExpressionPointcutAdvisor();
logger.info("执行表达式:{}", logsProperties.getPointcut());
advisor.setExpression(logsProperties.getPointcut());
advisor.setAdvice(new SystemAroundOperator());
return advisor ;}}