Spring框架③——依赖注入

一、setter方法依赖注入(常用)

1.建立四个类。分别是业务实现的TestDao;业务调用的TestService;控制层TestController;测试Test;

下面分别列举四个类的代码详情,以及xml文件的配置。

1.1  创建TestDao.java类。代码如下:
     写一个方法test,输出testdao  
    

public class TestDao {
    public void test(){
	System.out.println("testdao");
    }
}

1.2  创建TestService.java类。代码如下:

    实例化TestDao对象,并调用test方法。(这里就和上一篇实例化对象的方式有些不同了。)

    我们配置一下依赖注入的xml文件 applicationContext.xml。

<!--  省略了约束文档的配置  -->
<!--  配置TestDao的bean  -->
<bean id="testDao"  class="com.xuexue.model.dao.TestDao"></bean>
<!--  配置TestService的bean  -->
<bean id="testService" class="com.xuexue.model.service.TestService">
    <property name="testDao" ref="testDao"></property><!--依赖注入dao-->
    <!-- name是TestService类依赖的那个属性;ref配置的是,注入类的bean的id值-->
</bean>

       在使用setter注入方式时,需要提供属性set方法,Spring在实例化时,会调用无参构造器,实例化之后会自动调用属性的set方法,将实例化的对象设置进去。

public class TestService {
        //声明一个TestDao类型的属性,testDao就是配置文件中property标签,name属性的值
	private TestDao testDao;
	//写属性的set方法
	public void setTestDao(TestDao testDao) {
	    this.testDao = testDao;
	}
        //写一个test方法,在里面可以直接使用testDao来调用TestDao类中的test方法了
	public void test(){
	    testDao.test();
	}
}
1.3   创建TestController.java类。代码如下:

    实例化TestService对象,并调用test方法。

    我们配置xml文件 applicationContext.xml。

<bean id="testController" class="com.xuexue.controllers.TestController">
    <property name="testService" ref="testService"></property>
</bean>

public class TestController {
	private TestService testService;
	public void setTestService(TestService testService) {
	    this.testService = testService;
	}
	public void test(){
	    testService.test();
	}
}

1.4  创建Test类。代码如下:

public class Test {
	public static void main(String[] args) {
            //启动spring容器
	    ApplicationContext context =new ClassPathXmlApplicationContext("applicationContext.xml");
           
	    TestController testController=(TestController)context.getBean("testController");
            //调用方法
	    testController.test();
	}
}

2、String、List、Set、Map的依赖注入

    以Controller.java类做例子。代码如下:

public class TestController {
	private TestService testService;        
	private String name;
	private List<String> list;
	private Set<String> set;
	private Map<String,String> map;
	private Properties p;//以key-value存储 
	//set方法
	public void setTestService(TestService testService) {
		this.testService = testService;
	}

	public void setName(String name) {
		this.name = name;
	}

	public void setList(List<String> list) {
		this.list = list;
	}

	public void setSet(Set<String> set) {
		this.set = set;
	}

	public void setMap(Map<String, String> map) {
		this.map = map;
	}

	public void setP(Properties p) {
		this.p = p;
	}
        //测试方法
	public void test(){
		System.out.println("1.");
		testService.test();
		System.out.println("===================");
		
		System.out.println("2.测试String");
		System.out.println("名字:"+name);
		System.out.println("===================");
		
		System.out.println("3. 测试List");
		for (String str : list) {
			System.out.println(str);
		}
		System.out.println("===================");
		
		System.out.println("4.测试Set");
		
		for (String str2 : set) {
			System.out.println(str2);
		}
		System.out.println("===================");
		
		System.out.println("5.测试Map");
		Set<Entry<String, String>> entries = map.entrySet();
		for (Entry<String, String> entry : entries) {
			System.out.println(entry.getKey()+"\t"+entry.getValue());
		}
		System.out.println("===================");
		
		System.out.println("6.测试Properties");
		Set<Entry<Object, Object>> pitems = p.entrySet();
		for (Entry<Object, Object> entry : pitems) {
			System.out.println(entry.getKey()+"\t"+entry.getValue());
		}
	}
}

xml的配置。代码如下:

<bean id="testController" class="com.xuexue.controllers.TestController">
    <property name="testService" ref="testService"></property>
    <!--String的配置 name是属性的值,value是赋给的值-->
    <property name="name" value="啦啦"></property>
    <!--List<String>的配置 name是类型,value是值-->
    <property name="list" >
        <list>
            <value>tom</value>
            <value>jack</value>
            <value>lucy</value>
            <value>lily</value>
        </list>
    </property>
    <!--Set<String>的配置 name是类型,value是值-->
    <property name="set">
        <set>
            <value>tom2</value>
            <value>jack2</value>
            <value>lucy2</value>
            <value>lily2</value>
        </set>
    </property>
    <!--Map<String>的配置 key是键,value是值-->
    <property name="map">
        <map>
            <entry key="m1">
                <value>tom3</value>
            </entry>
            <entry key="m2">
                <value>jack3</value>
            </entry>
            <entry key="m3">
                <value>lucy3</value>
            </entry>
            <entry key="m4">
                <value>lily3</value>
            </entry>
        </map>
    </property>
    <!--Properties的配置 key是键,value是值-->
    <property name="p">
        <props>
            <prop key="p1">tom4</prop>
            <prop key="p2">jack4</prop>
            <prop key="p3">lucy4</prop>
            <prop key="p4">lily4</prop>
        </props>
    </property>
</bean>

二、构造器依赖注入(不常用)

    以TestDao和TestService为例子,TestDao注入TestService。代码如下:

public class TestService {
    private TestDao testDao;
    public MyService(TestDao testDao){
        this.testDao = testDao;
    }
    public void test(){
        testDao.test();
    }
}
     xml配置文件。代码如下:
<bean id="testService" class="com.xuexue.model.service.TestService">
    <constructor-arg>
        <ref bean="myDao"/>
    </constructor-arg>
</bean>

三、注解方式实现依赖注入

1、建立四个类。分别是业务实现的UserDao;业务调用的UserService;控制层UsertController;测试TestUser

xml配置文件。代码如下:

<!--省略约束文档的配置-->
<context:component-scan base-package="com.xuexue.model.dao"></context:component-scan>
<context:component-scan base-package="com.xuexue.model.service"></context:component-scan>
<context:component-scan base-package="com.xuexue.controllers"></context:component-scan>

base-package的值是包名。

这样配置后,这些包就都配置好了。使用详情,代码如下:

UserDao.java类

@Repository
public class UserDao {
	public void usertest(){
		System.out.println("usertest");
	}
}
注:1、在类的前面写上:@Repository等注解,只有写上了,才被Spring管理   2、不用写set方法了

@Component->通用组件
@Controller->控制器
@Service-> Service
@Repository -> DAO

UserService.java类

@Service
public class UserService {
	@Autowired
	private UserDao userDao;
	public void usertest(){
		userDao.usertest();
	}
}

UsertController.java类

@Controller
public class UserController {
	@Autowired
	private UserService userService;
	public void setUserService(UserService userService) {
		this.userService = userService;
	}
}

        属性上面写上@Autowired

TestUser.java类

public class TestUser {
	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserController userController=(UserController)context.getBean("userController");
		userController.usertest();
	}
}

四、Spring多个配置文件的结合

在做web项目时,Spring会管理很多东西,就有很多的内容需要配置,这样都写在一个配置文件里,就会到时配置文件内容太多,不好打理。除了在开启容器时传参配置文件的数组之外,在总配置文件中引入其他xml文件也可以解决这个问题。

<beans>  
       <import resource="Dao.xml"/>  
       <import resource="Service.xml"/>  
       <import resource="Controller.xml"/> 
</beans> 

<import>标签写在<beans>标签内部,所有<bean>标签前面。






  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值