学习springboot必备---spring注解驱动开发1-bean的创建

这篇文章主要介绍spring的基础注解的使用,为springboot的学习打下基础
如果小伙伴们看springboot中大量的底层基础注解感觉懵懵的话,那么看这篇文章就对了,这篇文章是复习spring的一些注解,可以对学习springboot有帮助。

spring Bean的创建方式

在之前我们注册一个bean可能是这样的:
在spring的配置文件中写一下内容:

<bean id="school" class="com.xxx.school">
	<property name="name" value="xxx"></property>
	<property name="address" value="xxx"></property>
</bean>

那么没有了spring的配置文件,通过类来注册bean需要怎么样呢

//配置类 == 配置文件
//这个注解的作用就是告诉spring,这是一个配置类
@configuration
public class MyConfig{

	//给容器中注册一个bean,类型是返回值的类型,id默认是方法名	
	@Bean
	public School school(){
		return new School("xxx","xxx");
	}
}

在以前三大框架整合(ssm)的时候,小伙伴肯定会配置过一下内容

<context:component-scan base-package="com.xxx">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> 
</context:component-scan>

这段配置的意思就是:配置包扫描,除了@controller注解的。那么用java类怎么写呢:

//配置类==配置文件
@Configuration
@ComponentScan(value="com.xxx",excludeFilters={
		@Filter(type = FilterType.ANNOTATION,classes={Controller.class})
})

@ComponentScan : 意思是进行包扫描
@Filter:过滤条件
这段代码小伙伴可以品位一下,代表的意思和上面的xml配置是一致的

通过以上根据和之前ssm框架的配置文件进行简单的对比,想必小伙伴可以知道通过注解进行配置这么一回事啦,接下来继续复习:

默认的Bean都是单例的
如果需要改变,则在bean上加个@scope注解。


	/**
	 * 	scope注解中可以写一个属性来标识bean的作用域
	 * 1.prototype:多例的,ioc启动并不会调用方法去创建对象放在容器中,而是在每次获取
	 * 		的时候才会调用方法创建对象
	 * 2.singleton:单实例(默认值),ioc容器启动会调用方法创建对象放在容器中,以后每次获取都是直接从容器中拿出。
	 * 3.request:同一个请求创建一个实例
	 * 4.session:同一个session创建一个实例
	 */
	@scope
	@Bean
	public School school(){
		return new School("xxx","xxx");
	}

	/**
	 *由于单实例的bean是在初始化ioc容器的时候就创建,所以可以设置懒加载:加上@Lazy注解
	 */
	@Lazy 
	@Bean
	public School school(){
		return new School("xxx","xxx");
	}

根据条件创建一些bean
可以根据自定义条件判断是否要创建bean,参数需要一个实现condition的实现类,用来判断规则。


	@Conditional({MyCondition.class})
	@Bean
	public School school(){
		return new School("xxx","xxx");
	}

	/**
	 * 上面的MyCondition是一个Condition接口的实现类
	 */
public class MyCondition implements Condition{
	@Override
	public boolean matches(ConditionContext context, 
				AnnotatedTypeMetadata metadata){
		//根据返回值决定是否加载school这个bean是否加进ioc容器中
		//true:加,false:不加,这里演示 所以直接返回true
		return true;
	}
}

**以上介绍了几种向容器中加载bean的方法,来引出spring的注解驱动,下面介绍一下给容器中创建组件的几种方式:
**

  • 包扫描+组件标注注解(@Controller/@Service/@Repository/@Component)
  • @Bean 导入组件
  • @Import 快速给容器中导入一个组件
    • @Import(要导入到容器中的组件),容器中就会自动注册这个组件,id默认是全类名
    • ImportSelector:返回需要导入的组件的全类名数组
    • ImportBeanDefinitionRegistrar:手动注册bean到容器中
  • 使用Spring提供的FectoryBean(工厂Bean)

详细介绍上面的几种方式
1.import的方式(其中import中还可以填个实现了importSelector的类,进行批量导入,还可以填个实现了ImportBeanDefinitionRegisterar的类):

@Import({Color.class,Red.class})
//@Import方式的导入组件,id默认是全类名
@configuration
public class MyConfig{

	//给容器中注册一个bean,类型是返回值的类型,id默认是方法名	
	@Bean
	public School school(){
		return new School("xxx","xxx");
	}
}

2.实现了FactoryBean方式的:(这个就不再import注解中写了,需要像之前一样的加Bean注解):

public class MyColorBean implements FectoryBean<Color> {
	//返回一个Color对象,这个对象会被添加到容器中
	@Override
	public Color getObject() throws Exception {
		return new Color();
	}
}

//需要写一个bean注解:
public MyColorBean myColorBean(){
	return new MyColorBean();
}

题后话,由于作者水平有限,文章中难免会有歧义的地方,欢迎大家批评指正,作者定会及时改正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值