• Spring注入方式(2)


    3、引用其他bean

      Bean经常需要相互协作完成应用程序的功能,bean之间必须能够互相访问,就必须在bean配置之间指定对bean的引用,可以通过节点<ref>或者ref来为bean属性指定对bean的引用,也可以在属性或者构造器里包含bean的声明,这样bean称为内部bean。

    bean中引用其他bean,其中Car为对象。

     1 <!-- 通过构造方法配置bean属性 -->
     2     <bean id="car" class="hello.Car">
     3     <constructor-arg value="Audi" index="0"></constructor-arg>
     4     <constructor-arg value="ShangHai" index="1"></constructor-arg>
     5     <constructor-arg value="300000" type="double" ></constructor-arg>
     6         
     7 </bean>
     8 
     9 <bean id="person" class="hello.Person">
    10     <property name="name" value = "Tom"></property>
    11     <property name="age" value = "24"></property>
    12     <property name="car" ref="car"></property>
    13 </bean>
    View Code

    内部bean

     1 <bean id="person" class="hello.Person">
     2         <property name="name" value = "Tom"></property>
     3         <property name="age" value = "24"></property>
     4         <!--  
     5         <property name="car" ref="car"></property>-->
     6         
     7         <!-- 内部bean -->
     8         <property name="car">
     9             <!-- 内部bean不能被外部bean使用 -->
    10             <bean id="car3" class="hello.Car">
    11                 <constructor-arg value="Ford"></constructor-arg>
    12                 <constructor-arg value="Changan"></constructor-arg>
    13                 <constructor-arg value="200000" type="double"></constructor-arg>
    14                 
    15             </bean>
    16         </property>
    17 </bean>
    View Code

    4、集合属性

    在Spring中可以通过<list>、<set>或者<map>来配置集合属性。

    通过list配置集合属性

    Person.java

     1 package com.spring;
     2 
     3 import java.util.List;
     4 
     5 public class Person {
     6     private String name;
     7     private int age;
     8     private List<Car> cars;
     9     public String getName() {
    10         return name;
    11     }
    12     public void setName(String name) {
    13         this.name = name;
    14     }
    15     public int getAge() {
    16         return age;
    17     }
    18     public void setAge(int age) {
    19         this.age = age;
    20     }
    21     public List<Car> getCars() {
    22         return cars;
    23     }
    24     public void setCars(List<Car> cars) {
    25         this.cars = cars;
    26     }
    27     @Override
    28     public String toString() {
    29         return "Person [name=" + name + ", age=" + age + ", cars=" + cars + "]";
    30     }
    31     
    32     
    33     
    34 }
    View Code

    Car.java

     1 package com.spring;
     2 
     3 public class Car {
     4     private String brand;
     5     private double price;
     6     private int maxSpeed;
     7     public String getBrand() {
     8         return brand;
     9     }
    10     public void setBrand(String brand) {
    11         this.brand = brand;
    12     }
    13     public double getPrice() {
    14         return price;
    15     }
    16     public void setPrice(double price) {
    17         this.price = price;
    18     }
    19     public int getMaxSpeed() {
    20         return maxSpeed;
    21     }
    22     public void setMaxSpeed(int maxSpeed) {
    23         this.maxSpeed = maxSpeed;
    24     }
    25     @Override
    26     public String toString() {
    27         return "Car [brand=" + brand + ", price=" + price + ", maxSpeed=" + maxSpeed + "]";
    28     }
    29     
    30 }
    View Code

    beans-collection.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xmlns:util="http://www.springframework.org/schema/util"
     5     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     6         http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
     7     
     8     <bean id="car1" class="com.spring.Car">
     9         <property name="brand" value="audi"></property>
    10         <property name="price" value="400000"></property>
    11         <property name="maxSpeed" value="240"></property>
    12     </bean>
    13     
    14     <bean id="car2" class="com.spring.Car">
    15         <property name="brand" value="baoma"></property>
    16         <property name="price" value="700000"></property>
    17         <property name="maxSpeed" value="270"></property>
    18     </bean>
    19     
    20     <bean id="person" class="com.spring.Person">
    21         <property name="name" value="Jerry"></property>
    22         <property name="age" value="41"></property>
    23         <property name="cars">
    24             <list>
    25                 <ref bean="car1" />
    26                 <ref bean="car2" />
    27             </list>
    28         </property>
    29     </bean>
    30 </beans>
    View Code

    结果:

    通过map配置属性

    Person.java

     1 package com.spring;
     2 
     3 import java.util.Map;
     4 
     5 public class Person {
     6     private String name;
     7     private int age;
     8     private Map<String, Car> carMap;
     9     public String getName() {
    10         return name;
    11     }
    12     public void setName(String name) {
    13         this.name = name;
    14     }
    15     public int getAge() {
    16         return age;
    17     }
    18     public void setAge(int age) {
    19         this.age = age;
    20     }
    21     public Map<String, Car> getCarMap() {
    22         return carMap;
    23     }
    24     public void setCarMap(Map<String, Car> carMap) {
    25         this.carMap = carMap;
    26     }
    27     @Override
    28     public String toString() {
    29         return "Person [name=" + name + ", age=" + age + ", carMap=" + carMap + "]";
    30     }
    31 }
    View Code

    beans-collection

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xmlns:util="http://www.springframework.org/schema/util"
     5     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     6         http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
     7     
     8     <bean id="car1" class="com.spring.Car">
     9         <property name="brand" value="audi"></property>
    10         <property name="price" value="400000"></property>
    11         <property name="maxSpeed" value="240"></property>
    12     </bean>
    13     
    14     <bean id="car2" class="com.spring.Car">
    15         <property name="brand" value="baoma"></property>
    16         <property name="price" value="700000"></property>
    17         <property name="maxSpeed" value="270"></property>
    18     </bean>
    19     
    20     <bean id="person" class="com.spring.Person">
    21         <property name="name" value="Jerry"></property>
    22         <property name="age" value="41"></property>
    23         <property name="carMap">
    24             <map>
    25                 <entry key="1" value-ref="car1"></entry>
    26                 <entry key="2" value-ref="car2"></entry>
    27             </map>
    28         </property>
    29     </bean>
    30 </beans>
    View Code

    结果:

    配置Set属性,和配置list一样。

    5、p名字空间注入,也需要setter方法。

    Student.java

     1 package com.spring;
     2 
     3 public class Student {
     4     private String name;
     5     private String number;
     6     
     7     public String getName() {
     8         return name;
     9     }
    10     public void setName(String name) {
    11         this.name = name;
    12     }
    13     public String getNumber() {
    14         return number;
    15     }
    16     public void setNumber(String number) {
    17         this.number = number;
    18     }
    19     
    20     @Override
    21     public String toString() {
    22         return "Student [name=" + name + ", number=" + number + "]";
    23     }
    24     
    25     
    26 }
    View Code

    Main.java

     1 package com.spring;
     2 
     3 import org.springframework.context.ApplicationContext;
     4 import org.springframework.context.support.ClassPathXmlApplicationContext;
     5 
     6 public class Main {
     7     public static void main(String[] args) {
     8         ApplicationContext ac = new ClassPathXmlApplicationContext("beans-p.xml");
     9         Student student = (Student) ac.getBean("student");
    10         System.out.println(student);
    11     }
    12 }
    View Code

    beans-p.xml

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <beans xmlns="http://www.springframework.org/schema/beans"
    3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4     xmlns:p="http://www.springframework.org/schema/p"
    5     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    6     
    7     <bean id="student" class="com.spring.Student" p:name="Merry" p:number="1120141314"></bean>
    8 
    9 </beans>
    View Code

     执行结果

    6、property注入

    Student.java

     1 package com.spring;
     2 
     3 import java.util.Properties;
     4 
     5 public class Student {
     6     private String name;
     7     private String number;
     8     private Properties properties;
     9     
    10     public String getName() {
    11         return name;
    12     }
    13     public void setName(String name) {
    14         this.name = name;
    15     }
    16     public String getNumber() {
    17         return number;
    18     }
    19     public void setNumber(String number) {
    20         this.number = number;
    21     }
    22     public Properties getProperties() {
    23         return properties;
    24     }
    25     public void setProperties(Properties properties) {
    26         this.properties = properties;
    27     }
    28     @Override
    29     public String toString() {
    30         return "Student [name=" + name + ", number=" + number + ", properties=" + properties + "]";
    31     }
    32     
    33     
    34     
    35     
    36     
    37     
    38 }
    View Code

    beans-p.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xmlns:p="http://www.springframework.org/schema/p"
     5     xmlns:util="http://www.springframework.org/schema/util"
     6     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     7         http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
     8     <bean id="student" class="com.spring.Student">
     9         <property name="name" value="Merry"></property>
    10         <property name="number" value="1120141213"></property>
    11         <property name="properties" >
    12             <props>
    13                 <prop key="user">root</prop>
    14                 <prop key="psw">1234</prop>
    15                 <prop key="jdbcUrl">jdbc:mysql:///test</prop>
    16                 <prop key="driverClass">com.mysql.jdbc.Driver</prop>
    17             </props>
    18         </property>
    19         
    20     </bean>
    21 </beans>
    View Code

    执行结果

    7、c命名空间注入

  • 相关阅读:
    多线程之旅:避免死锁——简单的锁分级(锁排序)
    和我一起来学iOS(三)UIView及其子类(上)
    谈谈.NET中常见的内存泄露问题——GC、委托事件和弱引用
    和我一起来学iOS(二)iOS中的一些约定、模式与三种回调机制
    多线程之旅六——异步编程模式,自己实现IAsyncResult
    详解JavaScript中的函数与闭包
    和我一起来学iOS(一)ObjectC的语法
    浅谈SQL SERVER中的物理联接算法
    多线程之旅之三——Windows内核对象同步机制
    深入 聚集索引与非聚集索引(一)
  • 原文地址:https://www.cnblogs.com/Hxinguan/p/5936039.html
Copyright © 2020-2023  润新知