首页 > 代码库 > java-Spring-IOC

java-Spring-IOC

//1. 创建 Spring 的 IOC 容器
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
  
//2. 从 IOC 容器中获取 bean 的实例
HelloWorld helloWorld = (HelloWorld) ctx.getBean("helloWorld3");
  
//根据类型来获取 bean 的实例: 要求在  IOC 容器中只有一个与之类型匹配的 bean, 若有多个则会抛出异常. 
//一般情况下, 该方法可用, 因为一般情况下, 在一个 IOC 容器中一个类型对应的 bean 也只有一个.
//3. 使用 bean
helloWorld.hello();

 

//以下为beans.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:util="http://www.springframework.org/schema/util"
 xmlns:p="http://www.springframework.org/schema/p"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
 
 <!-- 配置一个 bean -->
 <bean id="helloWorld" class="com.atguigu.spring.helloworld.HelloWorld">
    <!-- 为属性赋值 -->
    <property name="user" value="http://www.mamicode.com/Jerry"></property>
 </bean>
 
 <!-- 配置一个 bean -->
 <bean id="helloWorld2" class="com.atguigu.spring.helloworld.HelloWorld">
    <!-- 为属性赋值 -->
    <!-- 通过属性注入: 通过 setter 方法注入属性值 -->
    <property name="user" value="http://www.mamicode.com/Tom"></property>
 </bean>
 
 <!-- 通过构造器注入属性值 -->
 <bean id="helloWorld3" class="com.atguigu.spring.helloworld.HelloWorld">
    <!-- 要求: 在 Bean 中必须有对应的构造器.  -->
    <constructor-arg value="http://www.mamicode.com/Mike"></constructor-arg>
 </bean>
 
 <!-- 若一个 bean 有多个构造器, 如何通过构造器来为 bean 的属性赋值 -->
 <!-- 可以根据 index 和 value 进行更加精确的定位. (了解) -->
 <bean id="car" class="com.atguigu.spring.helloworld.Car">
    <constructor-arg value="http://www.mamicode.com/KUGA" index="1"></constructor-arg>
    <constructor-arg value="http://www.mamicode.com/ChangAnFord" index="0"></constructor-arg>
    <constructor-arg value="http://www.mamicode.com/250000" type="float"></constructor-arg>
 </bean>
 
 <bean id="car2" class="com.atguigu.spring.helloworld.Car">
    <constructor-arg value="http://www.mamicode.com/ChangAnMazda"></constructor-arg>
    <!-- 若字面值中包含特殊字符, 则可以使用 DCDATA 来进行赋值. (了解) -->
    <constructor-arg>
       <value><![CDATA[<ATARZA>]]></value>
    </constructor-arg>
    <constructor-arg value="http://www.mamicode.com/180" type="int"></constructor-arg>
 </bean>
 
 <!-- 配置 bean -->
 <bean id="dao5" class="com.atguigu.spring.ref.Dao"></bean>

 <bean id="service" class="com.atguigu.spring.ref.Service">
    <!-- 通过 ref 属性值指定当前属性指向哪一个 bean! -->
    <property name="dao" ref="dao5"></property>
 </bean>
 
 <!-- 声明使用内部 bean -->
 <bean id="service2" class="com.atguigu.spring.ref.Service">
    <property name="dao">
       <!-- 内部 bean, 类似于匿名内部类对象. 不能被外部的 bean 来引用, 也没有必要设置 id 属性 -->
       <bean class="com.atguigu.spring.ref.Dao">
          <property name="dataSource" value="http://www.mamicode.com/c3p0"></property>
       </bean>
  </property>
 </bean>
 
 <bean id="action" class="com.atguigu.spring.ref.Action">
    <property name="service" ref="service2"></property>
    <!-- 设置级联属性(了解) -->
    <property name="service.dao.dataSource" value="http://www.mamicode.com/DBCP2"></property>
 </bean>
 
 <bean id="dao2" class="com.atguigu.spring.ref.Dao">
    <!-- 为 Dao 的 dataSource 属性赋值为 null, 若某一个 bean 的属性值不是 null, 使用时需要为其设置为 null(了解) -->
    <property name="dataSource"><null/></property>
 </bean>
 
 <!-- 装配集合属性 -->
 <bean id="user" class="com.atguigu.spring.helloworld.User">
    <property name="userName" value="http://www.mamicode.com/Jack"></property>
    <property name="cars">
     <!-- 使用 list 元素来装配集合属性 -->
     <list>
        <ref bean="car"/>
        <ref bean="car2"/>
     </list>
  </property>
 </bean>
 
 <!-- 声明集合类型的 bean -->
 <util:list id="cars">
    <ref bean="car"/>
    <ref bean="car2"/>
 </util:list>
 
 <bean id="user2" class="com.atguigu.spring.helloworld.User">
    <property name="userName" value="http://www.mamicode.com/Rose"></property>
    <!-- 引用外部声明的 list -->
    <property name="cars" ref="cars"></property>
 </bean>
 
 <bean id="user3" class="com.atguigu.spring.helloworld.User"
  p:cars-ref="cars" p:userName="Titannic"></bean>
  
 <!-- bean 的配置能够继承吗 ? 使用 parent 来完成继承 --> 
 <bean id="user4" parent="user" p:userName="Bob"></bean>
 
 <bean id="user6" parent="user" p:userName="维多利亚"></bean>
 
 <!-- 测试 depents-on --> 
 <bean id="user5" parent="user" p:userName="Backham" depends-on="user6"></bean>
 
</beans>

java-Spring-IOC