首页 > 编程 > Java > 正文

Spring Bean基本管理实例详解

2019-11-26 14:55:02
字体:
来源:转载
供稿:网友

本文实例讲述了Spring Bean基本管理。分享给大家供大家参考,具体如下:

一、使用setter方式完成依赖注入

下面是Bean和beans-config.xml文件。

public class HelloBean {   private String helloWord;   //...省略getter、setter方法   }
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans>   <bean id="helloBean"      class="onlyfun.caterpillar.HelloBean">     <property name="helloWord">       <value>Hello!Justin!</value>     </property>   </bean> </beans>
public class SpringDemo {   public static void main(String[] args) {     Resource rs = new FileSystemResource("beans-config.xml");     BeanFactory factory = new XmlBeanFactory(rs);     HelloBean hello = (HelloBean) factory.getBean("helloBean");     System.out.println(hello.getHelloWord());   } }

二、使用constructor方式完成注入

public class HelloBean {   private String name;   private String helloWord;   // 建议有要无参数建构方法   public HelloBean() {   }   public HelloBean(String name, String helloWord) {     this.name = name;     this.helloWord = helloWord;   }   //...省略getter、setter方法   }
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans>   <bean id="helloBean"      class="onlyfun.caterpillar.HelloBean">     <constructor-arg index="0">       <value>Justin</value>     </constructor-arg>     <constructor-arg index="1">       <value>Hello</value>     </constructor-arg>   </bean> </beans>
public class SpringDemo {   public static void main(String[] args) {     ApplicationContext context =       new FileSystemXmlApplicationContext("beans-config.xml");     HelloBean hello = (HelloBean) context.getBean("helloBean");     System.out.print("Name: ");     System.out.println(hello.getName());     System.out.print("Word: ");     System.out.println(hello.getHelloWord());   } }

三、属性参考

public class HelloBean {   private String helloWord;   private Date date;   //...省略getter、setter方法   }
<beans>   <bean id="dateBean" class="java.util.Date"/>   <bean id="helloBean" class="onlyfun.caterpillar.HelloBean">     <property name="helloWord">       <value>Hello!</value>     </property>     <property name="date">       <ref bean="dateBean"/>     </property>   </bean> </beans>
public class SpringDemo {   public static void main(String[] args) {     ApplicationContext context =       new FileSystemXmlApplicationContext("beans-config.xml");     HelloBean hello = (HelloBean) context.getBean("helloBean");     System.out.print(hello.getHelloWord());     System.out.print(" It's ");     System.out.print(hello.getDate());     System.out.println(".");   } }

四、“byType”自动绑定

将“三”中的配置文件改为下面,即可完成bean属性的按类型自动绑定。

<beans>   <bean id="dateBean" class="java.util.Date"/>   <bean id="helloBean" class="onlyfun.caterpillar.HelloBean" autowire="byType">     <property name="helloWord">       <value>Hello!</value>     </property>   </bean> </beans>

五、“byName”自动绑定

将“三”中的配置文件改为下面,即可完成bean属性的按名称自动绑定。

<beans>   <bean id="dateBean" class="java.util.Date"/>   <bean id="helloBean" class="onlyfun.caterpillar.HelloBean" autowire="byName">     <property name="helloWord">       <value>Hello!</value>     </property>   </bean> </beans>

六、“constructor”自动绑定

将“三”中的配置文件改为下面,即可完成bean属性的按构造方法自动绑定。在建立依赖关系时,Srping容器会试图比对容器中的Bean实例类型,及相关的构造方法上的参数类型,看看在类型上是否符合,如果有的话,则选用该构造方法来建立Bean实例。如果无法绑定,则抛出org.springframework.beans.factory.UnsatisfiedDependencyException异常。

<beans>   <bean id="dateBean" class="java.util.Date"/>   <bean id="helloBean" class="onlyfun.caterpillar.HelloBean" autowire="constructor">     <property name="helloWord">       <value>Hello!</value>     </property>   </bean> </beans>

六、“autodetect”自动绑定

将“三”中的配置文件改为下面,即可完成bean属性的自动绑定,这个自动绑定是Spring会尝试用入constructor来处理依赖关系的建立,如果不行,则再尝试用byType类建立依赖关系。

<beans>   <bean id="dateBean" class="java.util.Date"/>   <bean id="helloBean" class="onlyfun.caterpillar.HelloBean" autowire="autodetect">     <property name="helloWord">       <value>Hello!</value>     </property>   </bean> </beans>

七、依赖检查方式

在自动绑定中,由于没办法从定义文件中,清楚地看到是否每个属性都完成设定,为了确定某些依赖关系确实建立,您可以假如依赖检查,在<bean>标签使用时设定"dependency-check",可以有四种依赖检查方式:simple、objects、all、none。

simple:只检查简单的类型(像原生数据类型或字符串对象)属性是否完成依赖关系,。
objects:检查对象类型的属性是否完成依赖关系。
all:则检查全部的属性是否完成依赖关系。
none:设定是默认值,表示不检查依赖性。

<beans>   <bean id="dateBean" class="java.util.Date"/>   <bean id="helloBean" class="onlyfun.caterpillar.HelloBean" autowire="autodetect" dependeny-check="all">     <property name="helloWord">       <value>Hello!</value>     </property>   </bean> </beans>

八、集合对象注入

对于像数组、List、Set、Map等集合对象,在注入前必须填充一些对象至集合中,然后再将集合对象注入至所需的Bean时,也可以交由Spring的IoC容器来自动维护或生成集合对象,并完成依赖注入。

public class SomeBean {   private String[] someStrArray;   private Some[] someObjArray;   private List someList;   private Map someMap;   public String[] getSomeStrArray() {     return someStrArray;   }   public void setSomeStrArray(String[] someStrArray) {     this.someStrArray = someStrArray;   }   public Some[] getSomeObjArray() {     return someObjArray;   }   public void setSomeObjArray(Some[] someObjArray) {     this.someObjArray = someObjArray;   }   public List getSomeList() {     return someList;   }   public void setSomeList(List someList) {     this.someList = someList;   }   public Map getSomeMap() {     return someMap;   }   public void setSomeMap(Map someMap) {     this.someMap = someMap;   } }public class Some {   private String name;   public String getName() {     return name;   }   public void setName(String name) {     this.name = name;   }   public String toString() {     return name;   } }
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans>   <bean id="some1" class="onlyfun.caterpillar.Some">     <property name="name">       <value>Justin</value>     </property>   </bean>   <bean id="some2" class="onlyfun.caterpillar.Some">     <property name="name">       <value>momor</value>     </property>   </bean>   <bean id="someBean" class="onlyfun.caterpillar.SomeBean">     <property name="someStrArray">       <list>         <value>Hello</value>         <value>Welcome</value>       </list>     </property>     <property name="someObjArray">       <list>          <ref bean="some1"/>          <ref bean="some2"/>       </list>     </property>     <property name="someList">       <list>          <value>ListTest</value>          <ref bean="some1"/>          <ref bean="some2"/>       </list>     </property>     <property name="someMap">       <map>          <entry key="MapTest">            <value>Hello!Justin!</value>          </entry>          <entry key="someKey1">            <ref bean="some1"/>          </entry>       </map>     </property>   </bean> </beans>
public class SpringDemo {   public static void main(String[] args) {     ApplicationContext context =       new FileSystemXmlApplicationContext(           "beans-config.xml");     SomeBean someBean =       (SomeBean) context.getBean("someBean");     // 取得数组型态依赖注入对象     String[] strs =       (String[]) someBean.getSomeStrArray();     Some[] somes =       (Some[]) someBean.getSomeObjArray();     for(int i = 0; i < strs.length; i++) {       System.out.println(strs[i] + ","           + somes[i].getName());     }     // 取得List型态依赖注入对象     System.out.println();     List someList = (List) someBean.getSomeList();     for(int i = 0; i < someList.size(); i++) {       System.out.println(someList.get(i));     }     // 取得Map型态依赖注入对象     System.out.println();     Map someMap = (Map) someBean.getSomeMap();     System.out.println(someMap.get("MapTest"));     System.out.println(someMap.get("someKey1"));   } }

希望本文所述对大家Java程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表