sc4933,一亩等于多少平米,李小璐隆胸过程
<bean class=""> <property name="" value=""></property> </bean>
这种方式比较常见,通常用@controller、@component、@service等等
比如下面的代码往容器中注册一个person对象
@bean public person person(){ return new person("张三", 20); }
默认情况下,使用方法【person()】名person作为person对象的注册id
也可以通过修改方法名或者使用@bean(“custombeanname”)
public interface factorybean<t> { t getobject() throws exception; class<?> getobjecttype(); boolean issingleton(); } // sample public class personfactorybean implements factorybean<person> { .... }
实现上述接口的3个方法,并把personfactorybean注册到容器中,就可以把person也注册到容器中。
具体创建person过程的源码可以看factorybeanregistrysupport#getobjectfromfactorybean方法。
// 如下代码拿到的是person对象 applicationcontext.getbean("personfactorybean") // 如果想要拿到personfactorybean对象,可以再前面加& applicationcontext.getbean("&personfactorybean")
先来看看源码:
@target(elementtype.type) @retention(retentionpolicy.runtime) @documented public @interface import { /** * {@link configuration}, {@link importselector}, {@link importbeandefinitionregistrar} * or regular component classes to import. */ class<?>[] value(); }
源码注释写的也很清楚,可以引入 配置类、importselector、importbeandefinitionregistrar,甚至是普通class。 通过@import,我们可以使用如下方式注册组件:
@import({person.class, myimportselector.class,myimportbeandefinitionregistrar.class})
其中:
myimportselector实现了importselector接口,selectimports方法返回类全名的string[]都会被注册到容器中
myimportbeandefinitionregistrar实现了importbeandefinitionregistrar接口
// sample public class myimportbeandefinitionregistrar implements importbeandefinitionregistrar { @override public void registerbeandefinitions(annotationmetadata importingclassmetadata, beandefinitionregistry registry) { // 指定bean定义信息 rootbeandefinition beandefinition = new rootbeandefinition(person.class); // 注册一个bean,指定bean名 registry.registerbeandefinition("person", beandefinition); } }
这是一个非常重要的注解,在spring源码中,哪哪都能看到他的身影。
如 @enableaspectjautoproxy注解
@target(elementtype.type) @retention(retentionpolicy.runtime) @documented @import(aspectjautoproxyregistrar.class) public @interface enableaspectjautoproxy { ... }
enableaspectjautoproxy通过@import引入了aspectjautoproxyregistrar类[实现了 importbeandefinitionregistrar],这个registrar里面又会向spring容器中注册annotationawareaspectjautoproxycreator(spring aop注解实现的功臣)。
如 @enablewebmvc注解。通过import引入的是一个配置类
@retention(retentionpolicy.runtime) @target(elementtype.type) @documented @import(delegatingwebmvcconfiguration.class) public @interface enablewebmvc { }
如 @enableasync注解。通过import引入的是asyncconfigurationselector[实现了importselector接口]
@target(elementtype.type) @retention(retentionpolicy.runtime) @documented @import(asyncconfigurationselector.class) public @interface enableasync { ... }
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
浅析我对 String、StringBuilder、StringBuffer 的理解
使用IDEA搭建SSM框架的详细教程(spring + springMVC +MyBatis)
Springboot整合freemarker 404问题解决方案
引入mybatis-plus报 Invalid bound statement错误问题的解决方法
网友评论