Skip to content

Commit

Permalink
Polish
Browse files Browse the repository at this point in the history
  • Loading branch information
Phillip Webb committed Sep 18, 2013
1 parent b857a90 commit 9a529b4
Show file tree
Hide file tree
Showing 14 changed files with 162 additions and 86 deletions.
1 change: 1 addition & 0 deletions spring-boot-autoconfigure/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-jms_1.1_spec</artifactId>
<optional>true</optional>
</dependency>
<!-- Test -->
<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,34 +41,38 @@
import org.springframework.data.repository.config.RepositoryConfigurationExtension;

/**
* Base {@link ImportBeanDefinitionRegistrar} used to auto-configure Spring Data
* Repositories.
*
* @author Phillip Webb
* @author Dave Syer
*/
public abstract class AbstractRepositoryConfigurationSourceSupport implements
BeanFactoryAware, ImportBeanDefinitionRegistrar, BeanClassLoaderAware {

private ClassLoader beanClassLoader;

private static Log logger = LogFactory
.getLog(AbstractRepositoryConfigurationSourceSupport.class);

private ClassLoader beanClassLoader;

private BeanFactory beanFactory;

@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
final BeanDefinitionRegistry registry) {

final ResourceLoader resourceLoader = new DefaultResourceLoader();
final AnnotationRepositoryConfigurationSource configurationSource = getConfigurationSource();
final RepositoryConfigurationExtension extension = getRepositoryConfigurationExtension();
ResourceLoader resourceLoader = new DefaultResourceLoader();
AnnotationRepositoryConfigurationSource configurationSource = getConfigurationSource();
RepositoryConfigurationExtension extension = getRepositoryConfigurationExtension();
extension.registerBeansForRoot(registry, configurationSource);

final RepositoryBeanNameGenerator generator = new RepositoryBeanNameGenerator();
RepositoryBeanNameGenerator generator = new RepositoryBeanNameGenerator();
generator.setBeanClassLoader(this.beanClassLoader);

Collection<RepositoryConfiguration<AnnotationRepositoryConfigurationSource>> repositoryConfigurations = extension
.getRepositoryConfigurations(configurationSource, resourceLoader);

for (final RepositoryConfiguration<AnnotationRepositoryConfigurationSource> repositoryConfiguration : repositoryConfigurations) {
for (RepositoryConfiguration<AnnotationRepositoryConfigurationSource> repositoryConfiguration : repositoryConfigurations) {
RepositoryBeanDefinitionBuilder builder = new RepositoryBeanDefinitionBuilder(
repositoryConfiguration, extension);
BeanDefinitionBuilder definitionBuilder = builder.build(registry,
Expand All @@ -82,21 +86,11 @@ public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
}
}

@Override
public void setBeanClassLoader(ClassLoader classLoader) {
this.beanClassLoader = classLoader;
}

protected abstract RepositoryConfigurationExtension getRepositoryConfigurationExtension();

protected abstract AnnotationRepositoryConfigurationSource getConfigurationSource();

protected AnnotationRepositoryConfigurationSource getConfigurationSource(
Class<?> annotated, Class<? extends Annotation> annotation) {
StandardAnnotationMetadata metadata = new StandardAnnotationMetadata(annotated,
true);
private AnnotationRepositoryConfigurationSource getConfigurationSource() {
StandardAnnotationMetadata metadata = new StandardAnnotationMetadata(
getConfiguration(), true);
AnnotationRepositoryConfigurationSource configurationSource = new AnnotationRepositoryConfigurationSource(
metadata, annotation) {
metadata, getAnnotation()) {

@Override
public java.lang.Iterable<String> getBasePackages() {
Expand All @@ -117,6 +111,26 @@ protected Iterable<String> getBasePackages() {
return basePackages;
}

/**
* The Spring Data annotation used to enable the particular repository support.
*/
protected abstract Class<? extends Annotation> getAnnotation();

/**
* The configuration class that will be used by Spring Boot as a template.
*/
protected abstract Class<?> getConfiguration();

/**
* The {@link RepositoryConfigurationExtension} for the particular repository support.
*/
protected abstract RepositoryConfigurationExtension getRepositoryConfigurationExtension();

@Override
public void setBeanClassLoader(ClassLoader classLoader) {
this.beanClassLoader = classLoader;
}

@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.beanFactory = beanFactory;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,11 @@

package org.springframework.boot.autoconfigure.data;

import java.lang.annotation.Annotation;

import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.data.jpa.repository.config.JpaRepositoryConfigExtension;
import org.springframework.data.repository.config.AnnotationRepositoryConfigurationSource;
import org.springframework.data.repository.config.RepositoryConfigurationExtension;

/**
Expand All @@ -33,9 +34,13 @@ class JpaRepositoriesAutoConfigureRegistrar extends
AbstractRepositoryConfigurationSourceSupport {

@Override
protected AnnotationRepositoryConfigurationSource getConfigurationSource() {
return getConfigurationSource(EnableJpaRepositoriesConfiguration.class,
EnableJpaRepositories.class);
protected Class<? extends Annotation> getAnnotation() {
return EnableJpaRepositories.class;
}

@Override
protected Class<?> getConfiguration() {
return EnableJpaRepositoriesConfiguration.class;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,11 @@

package org.springframework.boot.autoconfigure.data;

import java.lang.annotation.Annotation;

import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import org.springframework.data.mongodb.repository.config.MongoRepositoryConfigurationExtension;
import org.springframework.data.repository.config.AnnotationRepositoryConfigurationSource;
import org.springframework.data.repository.config.RepositoryConfigurationExtension;

/**
Expand All @@ -32,9 +33,13 @@ class MongoRepositoriesAutoConfigureRegistrar extends
AbstractRepositoryConfigurationSourceSupport {

@Override
protected AnnotationRepositoryConfigurationSource getConfigurationSource() {
return getConfigurationSource(EnableMongoRepositoriesConfiguration.class,
EnableMongoRepositories.class);
protected Class<? extends Annotation> getAnnotation() {
return EnableMongoRepositories.class;
}

@Override
protected Class<?> getConfiguration() {
return EnableMongoRepositoriesConfiguration.class;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,11 @@ public class JmsTemplateAutoConfiguration {
protected static class JmsTemplateCreator {

@Autowired
ConnectionFactory connectionFactory;
private ConnectionFactory connectionFactory;

@Bean
public JmsTemplate jmsTemplate() {
JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
JmsTemplate jmsTemplate = new JmsTemplate(this.connectionFactory);
jmsTemplate.setPubSubDomain(true);
return jmsTemplate;
}
Expand All @@ -56,10 +56,12 @@ public JmsTemplate jmsTemplate() {
@ConditionalOnClass(ActiveMQConnectionFactory.class)
@ConditionalOnMissingBean(ConnectionFactory.class)
protected static class ActiveMQConnectionFactoryCreator {

@Bean
ConnectionFactory connectionFactory() {
return new ActiveMQConnectionFactory("vm://localhost");
}

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,6 @@

package org.springframework.boot.autoconfigure.jms;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import javax.jms.ConnectionFactory;

import org.apache.activemq.ActiveMQConnectionFactory;
Expand All @@ -32,6 +27,11 @@
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.core.JmsTemplate;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

/**
* Tests for {@link JmsTemplateAutoConfiguration}.
*
Expand All @@ -55,10 +55,6 @@ public void testDefaultJmsTemplate() {
assertEquals(jmsTemplate.getConnectionFactory(), connectionFactory);
}

@Configuration
protected static class TestConfiguration {
}

@Test
public void testConnectionFactoryBackoff() {
this.context = new AnnotationConfigApplicationContext();
Expand All @@ -69,18 +65,6 @@ public void testConnectionFactoryBackoff() {
.getBrokerURL());
}

@Configuration
protected static class TestConfiguration2 {
@Bean
ConnectionFactory connectionFactory() {
return new ActiveMQConnectionFactory() {
{
setBrokerURL("foobar");
}
};
}
}

@Test
public void testJmsTemplateBackoff() {
this.context = new AnnotationConfigApplicationContext();
Expand All @@ -91,17 +75,6 @@ public void testJmsTemplateBackoff() {
assertEquals(999, jmsTemplate.getPriority());
}

@Configuration
protected static class TestConfiguration3 {
@Bean
JmsTemplate jmsTemplate(ConnectionFactory connectionFactory) {
JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
jmsTemplate.setPriority(999);
return jmsTemplate;
}

}

@Test
public void testJmsTemplateBackoffEverything() {
this.context = new AnnotationConfigApplicationContext();
Expand Down Expand Up @@ -134,6 +107,33 @@ public void testJmsTemplatePostProcessedSoThatPubSubIsFalse() {
assertFalse(jmsTemplate.isPubSubDomain());
}

@Configuration
protected static class TestConfiguration {
}

@Configuration
protected static class TestConfiguration2 {
@Bean
ConnectionFactory connectionFactory() {
return new ActiveMQConnectionFactory() {
{
setBrokerURL("foobar");
}
};
}
}

@Configuration
protected static class TestConfiguration3 {
@Bean
JmsTemplate jmsTemplate(ConnectionFactory connectionFactory) {
JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
jmsTemplate.setPriority(999);
return jmsTemplate;
}

}

@Configuration
protected static class TestConfiguration4 implements BeanPostProcessor {
@Override
Expand All @@ -152,5 +152,4 @@ public Object postProcessBeforeInitialization(Object bean, String beanName)
return bean;
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -29,19 +29,19 @@
*/
public class JdbcCompilerAutoConfiguration extends CompilerAutoConfiguration {

@Override
public boolean matches(ClassNode classNode) {
return AstUtils.hasAtLeastOneFieldOrMethod(classNode, "JdbcTemplate",
"NamedParameterJdbcTemplate", "DataSource");
}

@Override
public void applyDependencies(DependencyCustomizer dependencies) {
dependencies.ifAnyMissingClasses("org.springframework.jdbc.core.JdbcTemplate")
.add("org.springframework.boot", "spring-boot-starter-jdbc",
dependencies.getProperty("spring-boot.version"));
}

@Override
public boolean matches(ClassNode classNode) {
return AstUtils.hasAtLeastOneFieldOrMethod(classNode, "JdbcTemplate",
"NamedParameterJdbcTemplate", "DataSource");
}

@Override
public void applyImports(ImportCustomizer imports) {
imports.addStarImports("org.springframework.jdbc.core",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,12 @@
*/
public class SpringMvcCompilerAutoConfiguration extends CompilerAutoConfiguration {

@Override
public boolean matches(ClassNode classNode) {
return AstUtils.hasAtLeastOneAnnotation(classNode, "Controller",
"RestController", "EnableWebMvc", "WebConfiguration");
}

@Override
public void applyDependencies(DependencyCustomizer dependencies) {
dependencies
Expand All @@ -47,12 +53,6 @@ public void applyDependencies(DependencyCustomizer dependencies) {
dependencies.getProperty("groovy.version"));
}

@Override
public boolean matches(ClassNode classNode) {
return AstUtils.hasAtLeastOneAnnotation(classNode, "Controller",
"RestController", "EnableWebMvc", "WebConfiguration");
}

@Override
public void applyImports(ImportCustomizer imports) {
imports.addStarImports("org.springframework.web.bind.annotation",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@
public class TransactionManagementCompilerAutoConfiguration extends
CompilerAutoConfiguration {

@Override
public boolean matches(ClassNode classNode) {
return AstUtils.hasAtLeastOneAnnotation(classNode, "EnableTransactionManagement");
}

@Override
public void applyDependencies(DependencyCustomizer dependencies) {
dependencies
Expand All @@ -42,11 +47,6 @@ public void applyDependencies(DependencyCustomizer dependencies) {
dependencies.getProperty("spring-boot.version"));
}

@Override
public boolean matches(ClassNode classNode) {
return AstUtils.hasAtLeastOneAnnotation(classNode, "EnableTransactionManagement");
}

@Override
public void applyImports(ImportCustomizer imports) {
imports.addStarImports("org.springframework.transaction.annotation",
Expand Down
Loading

0 comments on commit 9a529b4

Please sign in to comment.