Spring注解驱动开发
Spring注解驱动开发图谱
对于一些复杂、重要、难懂的注解进行详细说明:
- @Conditional
package com.anotation.bean;
public class Person {
private String name;
private Integer age;
private String nickName;
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Person(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
public Person() {
super();
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", nickName=" + nickName + "]";
}
}
package com.anotation.condition;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.env.Environment;
import org.springframework.core.type.AnnotatedTypeMetadata;
public class LinuxCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
ConfigurableListableBeanFactory beanFactory = context.getBeanFactory();
ClassLoader classLoader = context.getClassLoader();
Environment environment = context.getEnvironment();
BeanDefinitionRegistry registry = context.getRegistry();
String property = environment.getProperty("os.name");
boolean definition = registry.containsBeanDefinition("person");
if(property.contains("Mac OS X")){
return true;
}
return false;
}
}
package com.anotation.condition;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.env.Environment;
import org.springframework.core.type.AnnotatedTypeMetadata;
public class WindowsCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
Environment environment = context.getEnvironment();
String property = environment.getProperty("os.name");
if(property.contains("Windows")){
return true;
}
return false;
}
}
package com.anotation.config;
import com.anotation.bean.Person;
import com.anotation.condition.LinuxCondition;
import com.anotation.condition.WindowsCondition;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MainConfig2 {
/**
* 比尔盖茨搞windows系统
* @return
*/
@Bean("bill")
@Conditional({WindowsCondition.class})
public Person person01(){
return new Person("Bill Gates",62);
}
/**
* mac搞mac系统
* @return
*/
@Conditional(LinuxCondition.class)
@Bean("mac")
public Person person02(){
return new Person("mac", 48);
}
}
package com.atguigu.test;
import com.anotation.bean.Blue;
import com.anotation.bean.Person;
import com.anotation.config.MainConfig;
import com.anotation.config.MainConfig2;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;
import java.util.Map;
public class IOCTest {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig2.class);
@Test
public void test03(){
ConfigurableEnvironment environment = applicationContext.getEnvironment();
String property = environment.getProperty("os.name");
System.out.println(property);
Person person = applicationContext.getBean(Person.class);
System.out.println(person);
}
}
运行结果:
Mac OS X
Person [name=mac, age=48, nickName=null]
- BeanPostProcessor
很重要的一个高级接口
to be continue...