Spring註解驅動開發

Spring註解驅動開發圖譜

說明:

1、@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]

 

to be continue...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章