Spring学习--引用其他Bean , 内部Bean

引用其他Bean:

  1. 组成应用程序的 Bean 经常需要相互协作以完成应用程序的功能 , 要使 Bean 能够相互访问, 就必须在 Bean 配置文件中指定对 Bean 的引用。
  2. 在 Bean 的配置文件中 , 可以通过 <ref> 元素或 ref 属性为 Bean 的属性或者构造器参数指定对 Bean 的引用。
  3. 也可以在属性或者构造器里包含 Bean 的声明 , 这样的 Bean 称为内部 Bean。
 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        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 5
 6     <bean id="person" class="com.itdjx.spring.dependency.injection.Person">
 7         <property name="name" value="张三"/>
 8         <property name="age" value="23"/>
 9         <property name="sex" value="男"/>
10         <property name="car" ref="car3"/>
11     </bean>
12
13     <bean id="car3" class="com.itdjx.spring.dependency.injection.Car">
14         <constructor-arg value="BaoMa" index="0"/>
15         <constructor-arg value="HuaChen" index="1"/>
16         <constructor-arg value="230000" index="2" type="double"/>
17     </bean>
18
19     <bean id="car4" class="com.itdjx.spring.dependency.injection.Car">
20         <constructor-arg value="BaoMa" index="0"/>
21         <constructor-arg value="HuaChen" index="1"/>
22         <constructor-arg value="230" type="int"/>
23     </bean>
24
25 </beans>
 1 package com.itdjx.spring.dependency.injection;
 2
 3 /**
 4  * 属性注入
 5  *
 6  * @author Wáng Chéng Dá
 7  * @create 2017-02-28 15:14
 8  */
 9 public class Person {
10
11     private String name;
12
13     private String sex;
14
15     private int age;
16
17     private Car car;
18
19     public String getName() {
20         return name;
21     }
22
23     public void setName(String name) {
24         this.name = name;
25     }
26
27     public String getSex() {
28         return sex;
29     }
30
31     public void setSex(String sex) {
32         this.sex = sex;
33     }
34
35     public int getAge() {
36         return age;
37     }
38
39     public void setAge(int age) {
40         this.age = age;
41     }
42
43
44     public Car getCar() {
45         return car;
46     }
47
48     public void setCar(Car car) {
49         this.car = car;
50     }
51
52     @Override
53     public String toString() {
54         return "Person{" +
55                 "name=‘" + name + ‘\‘‘ +
56                 ", sex=‘" + sex + ‘\‘‘ +
57                 ", age=" + age +
58                 ", car=" + car +
59                 ‘}‘;
60     }
61 }
 1 package com.itdjx.spring.dependency.injection;
 2
 3 /**
 4  * 构造器注入
 5  *
 6  * @author Wáng Chéng Dá
 7  * @create 2017-02-28 15:32
 8  */
 9 public class Car {
10
11     private String brand;
12
13     private String address;
14
15     private double price;
16
17     private int maxSpeed;
18
19
20     public Car(String brand, String address, double price) {
21         this.brand = brand;
22         this.address = address;
23         this.price = price;
24     }
25
26     public Car(String brand, String address, int maxSpeed) {
27         this.brand = brand;
28         this.address = address;
29         this.maxSpeed = maxSpeed;
30     }
31
32     public Car(String brand, double price, int maxSpeed) {
33         this.brand = brand;
34         this.price = price;
35         this.maxSpeed = maxSpeed;
36     }
37
38     public Car() {
39     }
40
41     @Override
42     public String toString() {
43         return "Car{" +
44                 "brand=‘" + brand + ‘\‘‘ +
45                 ", address=‘" + address + ‘\‘‘ +
46                 ", price=" + price +
47                 ", maxSpeed=" + maxSpeed +
48                 ‘}‘;
49     }
50 }
 1 package com.itdjx.spring.dependency.injection;
 2
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.support.ClassPathXmlApplicationContext;
 5
 6 /**
 7  * 依赖注入main
 8  *
 9  * @author Wáng Chéng Dá
10  * @create 2017-02-28 15:16
11  */
12 public class MainIOC {
13
14     public static void main(String[] args) {
15         ApplicationContext app = new ClassPathXmlApplicationContext("applicationConfig.xml");
16         Person person = (Person) app.getBean("person");
17         System.out.println(person);
18
19     }
20 }

控制台输出:

Person{name=‘张三‘, sex=‘男‘, age=23, car=Car{brand=‘BaoMa‘, address=‘HuaChen‘, price=230000.0, maxSpeed=0}}

内部Bean:

 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        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 5
 6     <bean id="person2" class="com.itdjx.spring.dependency.injection.Person">
 7         <property name="name" value="李玉"/>
 8         <property name="age" value="23"/>
 9         <property name="sex" value="女"/>
10         <property name="car" >
11             <bean class="com.itdjx.spring.dependency.injection.Car">
12                 <constructor-arg value="Ferrari" index="0"/>
13                 <constructor-arg value="Italy" index="1"/>
14                 <constructor-arg value="22500000" type="double"/>
15             </bean>
16         </property>
17     </bean>
18
19 </beans>
 1 package com.itdjx.spring.dependency.injection;
 2
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.support.ClassPathXmlApplicationContext;
 5
 6 /**
 7  * 依赖注入main
 8  *
 9  * @author Wáng Chéng Dá
10  * @create 2017-02-28 15:16
11  */
12 public class MainIOC {
13
14     public static void main(String[] args) {
15         ApplicationContext app = new ClassPathXmlApplicationContext("applicationConfig.xml");
16
17         Person person = (Person) app.getBean("person2");
18         System.out.println(person);
19
20     }
21 }

控制台输出:

Person{name=‘李玉‘, sex=‘女‘, age=23, car=Car{brand=‘Ferrari‘, address=‘Italy‘, price=2.25E7, maxSpeed=0}}
时间: 2024-10-24 21:01:42

Spring学习--引用其他Bean , 内部Bean的相关文章

spring学习笔记(3)——bean配置细节注意

1. 一个bean引用另外一个bean 当Person类中有一个属性是Car,那么该如何配置呢 person: package com.zj.spring; public class Person { private String name; private int age; private Car car; public String getName() { return name; } public void setName(String name) { this.name = name;

Spring 学习笔记(五)—— Bean之间的关系、作用域、自动装配

继承 Spring提供了配置信息的继承机制,可以通过为<bean>元素指定parent值重用已有的<bean>元素的配置信息. <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XML

Spring学习笔记(三)之装配Bean

除了组件扫描与自动装配之外还有基于Java代码的装配与基于XML的装配. 有一些场景是我们不能用自动装配的,比如我们要给第三方库中的组件装配到我们的应用中,这时自动装配无效,因为自动装配只能扫描本应用中的包. 这时我们就要在基于代码代码的装配和基于XML的装配中进行选择,前面我们说到了JavaConfig相比XML更强大更安全. 一.基于Java代码的装配Bean(JavaConfig) 但是JavaConfig又与Java有所区别. 概念上  JavaConfig是配置 与应用的其他代码业务逻

Spring学习笔记6---bean配置和bean注入

1 bean与spring容器的关系 Bean配置信息定义了Bean的实现及依赖关系,Spring容器根据各种形式的Bean配置信息在容器内部建立Bean定义注册表,然后根据注册表加载.实例化Bean,并建立Bean和Bean的依赖关系,最后将这些准备就绪的Bean放到Bean缓存池中,以供外层的应用程序进行调用. 1 bean配置 bean配置有三种方法: 基于xml配置Bean 使用注解定义Bean 基于java类提供Bean定义信息 1.1 基于xml配置Bean 对于基于XML的配置,S

Spring学习系列(二) 自动化装配Bean

一.Spring装配-自动化装配 @Component和@ComponentScan 通过spring注解(@Component)来表明该类会作为组件类,并告知Spring要为这类创建bean,不过组件扫描默认是不启动的,需要显式的配置Spring,从而命令Spring去寻找带有(@Component)注解的类,并为其创建bean. 1.定义接口 package com.seven.springTest.service; public interface HelloWorldApi { publ

Spring学习笔记--初始化和销毁Bean

可以使用bean的init-method和destroy-method属性来初始化和销毁bean.定义一个Hero类: package com.moonlit.myspring; public class Hero { public void born() { System.out.println("the hero is born."); } public void defaultBorn() { System.out.println("the hero is born b

Spring 学习指南 第三章 bean的配置 (未完结)

第三章 bean 的配置 ? 在本章中,我们将介绍以下内容: bean 定义的继承: 如何解决 bean 类的构造函数的参数: 如何配置原始类型 (如 int .float 等) .集合类型(如 java.util.List.java.util.Map)等以及自定义类型 (如 Address ) 等的 bean 属性和构造函数参数: 如何通过使用 p 命名空间和 c 命名空间分别指定 bean 属性和构造参数来使用应用程序上下文 XML 文件变得简洁: Spring 的 FactoryBean

Spring学习笔记--通过构造方法创建Bean

如果一个bean没有默认的构造函数,那么可以通过工厂方法来构造一个bean.Spring通过<bean>元素的factory-method属性来装配工厂创建的Bean.下面例子中的Stage是一个工厂类,通过它的getInstance()方法可以获得一个单例,但是他没有共有的构造函数,所以在构造Bean的时候需要通过工厂方法getInstance()来获得一个实例Bean.Stage类作为单例类来实现. package com.moonlit.myspring; public class St

Spring学习一(依赖注入/Bean/注解等)

1.Spring依赖注入的方式. 2.依赖注入的类型 3.Bean的作用域 4.自动注入 5.使用注解的方式 6.在spring配置文件中引入属性文件 1.Spring依赖注入的方式 平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理. spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中.依赖注入的另一种说法是“