@Profile
JVM选项
-Dspring.profiles.active=highschool
package com.apress.prospring5.ch4;
public class Food {
private String name;
public Food() {
}
public Food(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.apress.prospring5.ch4;
import java.util.List;
public interface FoodProviderService {
List<Food> provideLunchSet();
}
package com.apress.prospring5.ch4.highschool;
import java.util.ArrayList;
import java.util.List;
import com.apress.prospring5.ch4.Food;
import com.apress.prospring5.ch4.FoodProviderService;
public class FoodProviderServiceImpl implements FoodProviderService {
@Override
public List<Food> provideLunchSet() {
List<Food> lunchSet = new ArrayList<>();
lunchSet.add(new Food("Coke"));
lunchSet.add(new Food("Hamburger"));
lunchSet.add(new Food("French Fries"));
return lunchSet;
}
}
package com.apress.prospring5.ch4.kindergarten;
import java.util.ArrayList;
import java.util.List;
import com.apress.prospring5.ch4.Food;
import com.apress.prospring5.ch4.FoodProviderService;
public class FoodProviderServiceImpl implements FoodProviderService {
@Override
public List<Food> provideLunchSet() {
List<Food> lunchSet = new ArrayList<>();
lunchSet.add(new Food("Milk"));
lunchSet.add(new Food("Biscuits"));
return lunchSet;
}
}
package com.apress.prospring5.ch4.config;
import com.apress.prospring5.ch4.FoodProviderService;
import com.apress.prospring5.ch4.highschool.FoodProviderServiceImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
/**
* Created by iuliana.cosmina on 3/18/17.
*/
@Configuration
@Profile("highschool")
public class HighschoolConfig {
@Bean
public FoodProviderService foodProviderService(){
return new FoodProviderServiceImpl();
}
}
package com.apress.prospring5.ch4.config;
import com.apress.prospring5.ch4.FoodProviderService;
import com.apress.prospring5.ch4.kindergarten.FoodProviderServiceImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
/**
* Created by iuliana.cosmina on 3/18/17.
*/
@Configuration
@Profile("kindergarten")
public class KindergartenConfig {
@Bean
public FoodProviderService foodProviderService(){
return new FoodProviderServiceImpl();
}
}
package com.apress.prospring5.ch4.config;
import com.apress.prospring5.ch4.Food;
import com.apress.prospring5.ch4.FoodProviderService;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.GenericApplicationContext;
import java.util.List;
/**
* Created by iuliana.cosmina on 3/18/17.
*/
public class ProfileJavaConfigExample {
public static void main(String... args) {
GenericApplicationContext ctx = new AnnotationConfigApplicationContext(
KindergartenConfig.class,
HighschoolConfig.class);
FoodProviderService foodProviderService =
ctx.getBean("foodProviderService", FoodProviderService.class);
List<Food> lunchSet = foodProviderService.provideLunchSet();
for (Food food : lunchSet) {
System.out.println("Food: " + food.getName());
}
ctx.close();
}
}
执行结果
Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'foodProviderService' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:685)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1209)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1093)
at com.apress.prospring5.ch4.config.ProfileJavaConfigExample.main(ProfileJavaConfigExample.java:21)
Process finished with exit code 1
设置spring的profile
-Dspring.profiles.active=highschool
执行结果
Food: Coke
Food: Hamburger
Food: French Fries
-Dspring.profiles.active=kindergarten
执行结果
Food: Milk
Food: Biscuits