spring中的@bean注解
spring的注解分类
从广义上讲,spring注解可以分为两类,一类注解是用于注册bean,一类注解用于使用bean。
假如ioc容器就是一间空屋子,首先这间空屋子里面啥也没有,我们要给这个空屋子添置家具的操作,就相当于每个注册bean的注解的作用,意思就是说,注册bean的注解作用,就是往ioc容器中放置(注册)东西。
用于注册bean的注解,比如@component、@repository、@controller、@service和@configration等,用途都是注册bean并放入到ioc容器中,一来是交给spring统一管理方便解耦,而来是可以重复使用,还是前面的例子,给空屋子添置的家具总不会都是一次性使用的,比如沙发,你只要一次注册了,每次想要休息就往上一躺就好了,而不是每次都到屋子外去搬进来(重新注册),节省了力气(重新注册的资源消耗),这也是为什么在spring里绝大部分bean都是单例模式的原因。
而用于使用bean的注解,比如@autowired、@resource等,用途都是从ioc容器中拿到注册好的bean以方便使用。使用这些注解的前提是ioc容器中有相应的被注册号的bean,如果ioc容器中没有,比如屋子里没有沙发,你还往地板上硬躺,就会很难受甚至受伤(报错)。
@bean注解概述
根据上面的分类,@bean注解应该归类于用于注册bean的注解。
为什么要有@bean注解呢?这是因为类似于@component、@repository、@controller和@service这些注册bean的注解都存在一定的局限性,局限于只能作用于自己编写的类,但是如果是一个jar包的第三方库要加入到ioc容器中的话,这些注解就无能为力了。为了解决这样的问题,@bean注解就产生了(当然了,还有@import注解也可以做到这一点,且更加方便快捷)。
@bean注解是被设计使用在方法上的,在方法上使用@bean注解的时候,该方法就会被告知去产生一个bean对象,然后这个bean对象交给spring管理,且产生这个bean对象的方法在整个spring的生命周期中只会被调用一次,调用完成之后spring会将这个bean对象放在自己的ioc容器中。
class Yanggb { @Bean public YanggbDao createYanggbDaoBean(){ return new YanggbDao(); } }
在上面的例子中,createYanggbDaoBean方法就会产生一个YanggbDao对象,并将这个对象交给Spring管理(放到ioc容器中)。到这里很容易就能明白,@bean注解是使用在方法上的注解,它会明确地告诉被注解的方法去产生一个bean对象并交给spring容器管理。简单点说就是,@bean注解放在方法上,让方法去产生一个bean交给spring容器。
因为@bean注解是使用在方法上的,因此使用@bean注解的另一个好处就是能够动态获取一个bean对象,且能够根据环境不同得到不同的bean对象。
另外,@bean注解和xml配置中的bean标签的作用是一模一样的。
"人的感情很微妙,没有直白的表达,并不代表没有感情。"