读书人

Spring3之 bean定名

发布时间: 2012-08-28 12:37:01 作者: rapoo

Spring3之 bean命名

一、bean的命名采用标准Java命名约定:小写字母开头,首字母大写间隔的命名方式。如accountManager、accountService?etc...;

二、每个bean都有一个或多个id(或称之为标识符或名称,在术语?上可以理解成一回事)。这些id在当前IoC容器中必须唯一。如果?一个bean有多个id,那么其他的id在本质上将被认为是别名;

三、在对bean进行定义时,除了使用id属性来指定名称?之外,为了提供多个名称,需要通过name属性来加以指定?。而所有的这些名称都指向同一个bean;

四、在定义bean时就指定所有的别名并不是总是恰当的。有时我们期望?能在当前位置为那些在别处定义的bean引入别名。在XML配置文件中,可用?<alias/>?元素来完成bean别名的定义。

src下二个配置文件:bean.xml,beanAlias.xml

com.spring305.test.annotationBean包下TestBean.java,com.spring305.test.annotationBean.po包下:BeanA.java,InnerClassA.java,BeanAAnnotaion.java

代码及详细注释如下:

BeanA.java

public class BeanA {private static String name = "BeanA中的static变量";public  void initM(){//staticSystem.out.println(BeanA.class+" in initM() method");}public static void testStatic(){//staticSystem.out.println(BeanA.class+" in testStatic method");}public  void destoryM(){System.out.println(BeanA.class+" in destoryM() method");}//static类型内部类static class InnerClassAImpl implements InnerClassA{@Overridepublic void testInnerClass(){//内部类中可以调用外部类中的变量,方法...etcSystem.out.println(InnerClassA.class+"内部类调用 "+name);testStatic();}}}

?InnerClassA.java

?

public interface InnerClassA {void testInnerClass();}

?

TestBean.java

import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.AnnotationConfigApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.spring305.test.annotationBean.po.BeanA;import com.spring305.test.annotationBean.po.BeanAAnnotaion;import com.spring305.test.annotationBean.po.InnerClassA;public class TestBean {//@Test//xmlpublic void TestBeanXML(){ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"bean.xml","beanAlias.xml"});//通过ID,测试环境,ID//BeanA a = ctx.getBean("beanA",BeanA.class);//通过别名,测试别名//BeanA a = ctx.getBean("beanAName",BeanA.class);//bean使用name 定义//BeanA a = ctx.getBean("beanAName2",BeanA.class);//bean使用name定义多个时//BeanA a = ctx.getBean("toName",BeanA.class);//alias定义别名BeanA a = ctx.getBean("toName2",BeanA.class);//alias定义别名a.destoryM();//测试内部类的beanInnerClassA ica = (InnerClassA)ctx.getBean("innerClass");ica.testInnerClass();}@Test//annotationpublic void TestApplicationContextEnv(){ApplicationContext ctx = new AnnotationConfigApplicationContext(BeanAAnnotaion.class);BeanAAnnotaion aBeanA = (BeanAAnnotaion)ctx.getBean("beanAAnnotaion");System.out.println(aBeanA.test());;String msg = ctx.getBean("test2",String.class);System.out.println("msg "+msg);}}

?BeanAAnnotaion.java

import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class BeanAAnnotaion {@Bean(name = { "test1", "test2", "test3" })public  String test(){return BeanAAnnotaion.class+" in test() method";}}

?

bean.xml

 <!-- 在本文件中也可以定义别名,貌似放在前面与放在后面都不影响初始化 -->     <alias alias="toName2" name="beanAName2"/>          <!-- 当同时存在id与name时,则只会生成以id为名的bean     <bean  id="beanA" name="beanAName" style="margin-top: 0pt; margin-bottom: 0pt;">?

beanAlias.xml

?

?

 <!-- 这个可以在另外一个文件中为其中的一个XML中定义的名为beanAName2的bean来命名别名toName --><alias alias="toName" name="beanAName2"/>      

?

?

<!--EndFragment-->

读书人网 >软件架构设计

热点推荐