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 一个?