Spring In [email protected]条件化Bean

@Conditional
根据某个条件来决定是否创建Bean实例

代码下载地址:http://download.csdn.net/download/poiuy1991719/9965794

创建一个Bean类:

package com.bean.conditional;

import org.springframework.context.annotation.Conditional;
import org.springframework.stereotype.Component;

@Component("magicBeanName")//重命名:配置类里面的方法与之对应
@Conditional(MagicCheck.class)//决定是否创建Bean的条件类
public class MagicBean {
    private String name="MagicBean";
    public MagicBean() {
        System.out.println("MagicBean:实例化");
    }

    public void showName(){
        System.out.println("Show Name is:"+name);
    }
}

创建一个Config配置类:配置类指定了一个Check类:

package com.bean.conditional;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackages={"com.bean"})
public class BeanConfigs {

    @Bean
    @Conditional(MagicCheck.class)//决定是否创建Bean对象
    public MagicBean magicBeanName(){//方法名来源,Bean类的注解:@Component("magicBeanName")
        return new MagicBean();
    }
}

Check类决定是否创建Bean的实例:Check类需是Condition类的一个实现:

package com.bean.conditional;

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

//决定Bean的创建,需是Condition的一个接口
public class MagicCheck implements Condition {

    public boolean matches(ConditionContext arg0, AnnotatedTypeMetadata arg1) {
        return true;//创建Bean实例
//        return false;//不创建Bean实例
    }
}

测试类:

package test;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.bean.conditional.BeanConfigs;
import com.bean.conditional.MagicBean;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={BeanConfigs.class})
public class test {
	@Autowired
	MagicBean mb;

	@Test
	public void selfTest(){
		if(mb==null){
			System.out.println("MagicCheck类决定了Bean的创建,MagicCheck类方法返回:false");
		}else{
			System.out.println("MagicCheck类决定了Bean的创建,MagicCheck类方法返回:true");
			mb.showName();
		}
	}
}

  

时间: 2024-10-08 10:17:01

Spring In [email protected]条件化Bean的相关文章

Spring In [email protected]注解给Bean命名

package soundsystem; import org.springframework.stereotype.Component; //@Component注解会告诉Spring创建这个类的实例bean(注意,启动Component注解功能需要在xml里面配置) @Component("newName") public class SgtPeppers implements CompactDisc { private String title="Pepper's Lo

[转]Spring注解[email protected]注解、@Bean注解以及配置自动扫描、bean作用域

1.@Configuration标注在类上,相当于把该类作为spring的xml配置文件中的<beans>,作用为:配置spring容器(应用上下文) package com.test.spring.support.configuration; @Configuration public class TestConfiguration { public TestConfiguration(){ System.out.println("spring容器启动初始化...");

Spring高级装配(二) 条件化的bean

如果你希望一个bean在特定的条件下才会出现: 应用的类路径下包含特定的库时才创建 只有当某个特定的bean也声明之后才会创建 某个特定的环境变量设定之后才创建某个bean 在Spring 4之前,很难实现这种级别的条件化配置,但是Spring4引入了一个新的@Conditional注解,它可以用到带有@Bean注解的方法上.如果给定的条件计算结果为true,就会创建这个bean,否则的话,这个bean会被忽略. 示例:设置了magic环境属性才去实例化MagicBean 1 @Bean 2 @

条件化bean

天行健,君子以自强不息.--<周易> 应用场景 假设你希望一个或多个bean只有在应用的类路径下包含特定的库时才创建,希望某个bean只有当某个特定的bean也声明了之后才会创建,或者只有某个特定的环境变量设置之后才会创建bean.Spring 4 引入了@Conditional注解,它可以用到带有@Bean注解的方法上,如果给定的条件满足才会创建bean,反之则会被忽略. 条件化配置bean的代码如下: package chapter3; import org.springframework

Spring In [email&#160;protected]注解

//@Component注解会告诉Spring创建这个类的实例bean(注意,启动Component注解功能需要在xml里面配置,下面会将)@Component package com.zte.springinaction.soundsystem.imp; import org.springframework.stereotype.Component; import com.zte.springinaction.soundsystem.CompactDisc; //@Component注解会告诉

Spring框架[email&#160;protected]

使用@Resource注解,实现组件装配,默认按照名称匹配. 下面的类都是使用到注解的类: 1 package dao.impl; 2 3 import org.springframework.stereotype.Repository; 4 5 import dao.UserDao; 6 import entity.User; 7 8 /** 9 * 用户DAO类,实现IDao接口,负责User类的持久化操作 10 */ 11 @Repository("userDao") 12 pu

在Listener(监听器)定时启动的TimerTask(定时任务)中使用[email&#160;protected]注解的bean

1.有时候在项目中需要定时启动某个任务,对于这个需求,基于JavaEE规范,我们可以使用Listener与TimerTask来实现,代码如下: public class TestTaskListener implements ServletContextListener { //Context()初始化方法 @Override public void contextInitialized(ServletContextEvent sce) { //新建一个定时管理器 new TestTimerMa

Spring AOP @[email&#160;protected]@[email&#160;protected]@afterthrowing执行顺序

public Object aop(Method method,Object object) { try { try { /*doAround start*/ doBefore(); method.invoke(object); /*doAround end*/ } finally { doAfter(); } doAfterReturning(); } catch (Exception e) { doAfterThrowing(); } } 原文地址:https://www.cnblogs.c

Spring4 In [email&#160;protected]单例、多例Bean

Spring In [email protected]单例.多例Bean 代码下载地址:http://download.csdn.net/download/poiuy1991719/9967494 Singleton:单例    @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)@Scope("singleton") Prototype:每次注入都会创建新的   @Scope(ConfigurableBeanFactory.SCOPE_PRO