spring容器以xml的形式注入bean,然后可以在类中获取,获取的形式主要有二种:第一种最简单--采用@Resource 或@Autowired关键字在加载spring文件时将bean注入到相应的类中;第二种方式是先用FileSystemXmlApplicationContext、ClassPathXmlApplicationContext 实例化ApplicationContext(Spring容器),然后调用其getBean方法获取。
下面直接代码说明:
注意:是在springJUnit的测试环境下。如不是测试环境,在实际中,如果用到@Resource 或@Autowired自动注入的方式,还需在spring容器添加“扫包”,这样项目发布时加载spring容器才会扫描具体的包下面的类,然后将bean注入到该类中。
1 package com.my.test; 2 3 import javax.annotation.Resource; 4 5 import org.junit.Test; 6 import org.junit.runner.RunWith; 7 import org.springframework.context.ApplicationContext; 8 import org.springframework.context.support.ClassPathXmlApplicationContext; 9 import org.springframework.context.support.FileSystemXmlApplicationContext; 10 import org.springframework.test.context.ContextConfiguration; 11 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 12 13 import com.wql.vo.User; 14 15 /** 16 * spring test 17 * 加载文件放在类目录下 18 * @author Lenovo 19 * 20 */ 21 @RunWith(SpringJUnit4ClassRunner.class) 22 @ContextConfiguration("classpath:applicationContext.xml") 23 public class MyTest { 24 @Resource 25 private User user3;//用@Resource关键字自动注入获取bean。注意:引用名是在spring容器中的注入bean的id,不可瞎写! 26 27 @Test 28 public void test1(){//用FileSystemXmlApplicationContext获取bean 29 ApplicationContext ac = new FileSystemXmlApplicationContext("classpath:applicationContext.xml"); 30 System.out.println(ac);//org.springframework.context.support.FileSystemXmlApplicationContext@52c603e7: startup date [Tue Feb 02 09:38:46 CST 2016]; root of context hierarchy 31 } 32 @Test 33 public void test2(){//用ClassPathXmlApplicationContext获取bean 34 ApplicationContext act=new ClassPathXmlApplicationContext("applicationContext.xml"); 35 36 User user=(User)act.getBean("user"); 37 System.out.println(user); 38 } 39 @Test 40 public void test3(){ 41 System.out.println(user3); 42 } 43 44 }
1 package com.my.test; 2 3 import javax.annotation.Resource; 4 5 import org.junit.Test; 6 import org.junit.runner.RunWith; 7 import org.springframework.beans.factory.annotation.Autowired; 8 import org.springframework.context.ApplicationContext; 9 import org.springframework.context.support.ClassPathXmlApplicationContext; 10 import org.springframework.context.support.FileSystemXmlApplicationContext; 11 import org.springframework.test.context.ContextConfiguration; 12 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 13 14 import com.wql.vo.User; 15 /** 16 * spring test2 17 * 加载文件放在WEB-INF目录下 18 * @author Lenovo 19 * 20 */ 21 @RunWith(SpringJUnit4ClassRunner.class) 22 @ContextConfiguration(locations={"file:WebContent/WEB-INF/applicationContext.xml"}) 23 public class MyTest2 { 24 @Resource 25 private User user3; 26 27 @Test 28 public void test1(){ 29 //FileSystemXmlApplicationContext 加载WEB-INF目录下的文件必须是绝对路径 30 ApplicationContext ac = new FileSystemXmlApplicationContext("D:/STS_workspace/mynewdpiTest/WebContent/WEB-INF/applicationContext.xml"); 31 System.out.println(ac); 32 System.out.println(ac.getBean("user")); 33 } 34 @Test 35 public void test2(){//ClassPathXmlApplicationContext 不能加载WEB-INF目录下的文件,只能加载类目录下的文件。 36 ApplicationContext act=new ClassPathXmlApplicationContext("D:/STS_workspace/mynewdpiTest/WebContent/WEB-INF/applicationContext.xml"); 37 System.out.println(act); 38 // User user=(User)act.getBean("user"); 39 // System.out.println(user); 40 } 41 @Test 42 public void test3(){ 43 System.out.println(user3); 44 } 45 46 }
SpringJUnit4加载类目录下(src)和WEF-INF目录下的配置文件二--获取注入的bean的二种方式
原文:http://www.cnblogs.com/wql025/p/5180574.html