首页 > 代码库 > Spring第一个例子的补充

Spring第一个例子的补充

1.首先导入需要的包:

技术分享

 2.文件结构:

技术分享

3.先看xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" " http://www.springframework.org/dtd/spring-beans-2.0.dtd ">
<beans>
    <!-- 让Spring来管理对象的创建和依赖关系,必须在Spring配置文件中定义 -->
    <!-- 配置需要被Spring管理的bean(创建,创建后放在了Spring IOC容器里面) -->
    <bean name="hello" class="com.wangcf.HelloWorld">
        <!-- 配置该bean需要注入的属性(是通过set方法来注入的) -->
        <property name="name" value="direct"/>
    </bean>
    
    <bean name="userDao" class="com.wangcf.Dao.UserDao"></bean>
    <bean name="userManager" class="com.wangcf.UserManager">
        <!-- 注入Dao的值,value是注入常量值,ref注入引用值 -->
        <property name="userDao" ref="userDao"></property>
    </bean>
</beans>

4.1看HelloWorld部分:

package com.wangcf;

public class HelloWorld {
    private String name;
    
    public HelloWorld(){
        System.out.println("HelloWorld 构造器开始创建。。。");
    }
    public void setName(String name) {
        System.out.println("setName..把name的值注入....");
        this.name = name;
    }
    
    public void show(){
        System.out.println("HolloWorld show..."+name);
    }
    
    
}
package com.wangcf.Test;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.wangcf.HelloWorld;

import junit.framework.TestCase;

public class HolloWorldTest extends TestCase{
    public void test1(){
        //获取Spring的applicationContext配置文件,注入IOC容器中
        BeanFactory factory=new ClassPathXmlApplicationContext("applicationContext.xml");
        /**完成上面的步骤,就会打印:
        *HelloWorld 构造器开始创建。。。
        *setName..
        *说明一开始就把类的属性,注入了
        **/
        //通过BeanFactory的getBean方法,从IOC容器里面获取Bean
        Object obj=factory.getBean("hello");
        System.out.println(obj.getClass().getName());
        HelloWorld hw=(HelloWorld) obj;
        System.out.println(hw);
        hw.show();
        //通过BeanFactory的getBean方法,从IOC容器里面获取Bean
        HelloWorld hw2=(HelloWorld) factory.getBean("hello");
        System.out.println(hw2);
    }
}

打印:

技术分享

由此可见,在执行

 BeanFactory factory=new ClassPathXmlApplicationContext("applicationContext.xml");

的时候,就把配置文件里面的东西执行了。

5.1看UserManager部分:

package com.wangcf;

import com.wangcf.Dao.UserDao;

public class UserManager {
    
    private UserDao userDao;
    //通过set方法注入Dao,这里注入的不是常量值,而是引用值
    public void setUserDao(UserDao userDao) {
        System.out.println("UserManager UserDao setUserDao..把Dao注入到UserManager容器");
        this.userDao = userDao;
    }
    
    public void addUser(){
        System.out.println("UserManager addUser");
        userDao.addUser();
    }
    
    public UserManager(){
        System.out.println("UserManager 开始创建....");
    }
}
package com.wangcf.Dao;

public class UserDao {
     public void addUser(){
         System.out.println("UserDao addUser");
     }
     
     public UserDao(){
         System.out.println("UserDao开始创建.....");
     }
}
package com.wangcf.Test;

import junit.framework.TestCase;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.wangcf.UserManager;

public class UserManagerTest extends TestCase{
    
    public void testAddUser(){
        BeanFactory factory=new ClassPathXmlApplicationContext("applicationContext.xml");
        UserManager userManager=(UserManager) factory.getBean("userManager");
        System.out.println("------------");
        userManager.addUser();
    }
}

 打印

技术分享

 总结:


UserManager类和HelloWorld类的属性都是通过依赖注入的。

对象的实例化是依赖注入的,就不用每次new 一个?

Spring第一个例子的补充