博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
尚学堂Spring视频教程(二):Spring控制反转
阅读量:5276 次
发布时间:2019-06-14

本文共 3024 字,大约阅读时间需要 10 分钟。

用Spring来实现IOC

  在上节中我们自定义了一个接口BeanFactory和类ClassPathXmlApplicationContext来模拟Spring,其实它们在Spring中确实是存在的,下面我们具体来看看Spring的控制反转是如何操作的

  其他代码一样,只是配置文件和单元测试的代码有点不同,注意引用其他bean配置的是"ref"属性

配置文件
package com.bjsxt.service;import org.junit.Test;import org.springframework.beans.factory.BeanFactory;import org.springframework.beans.factory.xml.XmlBeanFactory;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.core.io.ClassPathResource;import com.bjsxt.model.User;//Dependency Injection//Inverse of Controlpublic class UserServiceTest {    @Test    public void testAdd() throws Exception {                BeanFactory ctx = new ClassPathXmlApplicationContext("beans.xml");                        UserService service = (UserService)ctx.getBean("userService");                        User u = new User();        u.setUsername("zhangsan");        u.setPassword("zhangsan");        service.add(u);    }}
测试代码

  注:ClassPathXmlApplicationContext继承ApplicationContext,ApplicationContext又继承BeanFactory,所以也可以这样写ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");推荐使用这种写法。其构造函数也可以传入String数组,适用于多个配置文件的情况

 

三种注入方式(setter,构造函数,接口)

  setter已经见过了,接口注入很少用,故此忽略,下面来看一下构造函数注入,在UserService中添加一个构造函数初始化UserDAO属性

package com.bjsxt.service;import com.bjsxt.dao.UserDAO;import com.bjsxt.model.User;public class UserService {            private UserDAO userDAO;          public void add(User user) {        userDAO.save(user);    }    public UserDAO getUserDAO() {        return userDAO;    }    public void setUserDAO(UserDAO userDAO) {        this.userDAO = userDAO;    }        public UserService(UserDAO userDAO) {        super();        this.userDAO = userDAO;    }}
添加构造函数的UserService
配置文件

  注意用的是constructor-arg标签,如果构造函数有多个参数,就按照顺序写,或者指定index

 

Bean的Scope属性

  配置文件中bean有个scope属性,如果配置为singleton,表示该bean只有一个实例,如果配置为prototype,每次取出该bean都会创建一个新的对象。bean的scope属性配置为singleton和prototype,在下面的代码中会分别输出true和false

package com.bjsxt.service;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.bjsxt.model.User;//Dependency Injection//Inverse of Controlpublic class UserServiceTest {    @Test    public void testAdd() throws Exception {        ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");                        UserService service = (UserService)ctx.getBean("userService");        UserService service2 = (UserService)ctx.getBean("userService");                System.out.println(service == service2);                        User u = new User();        u.setUsername("zhangsan");        u.setPassword("zhangsan");        service.add(u);    }}
UserService测试scope属性

转载于:https://www.cnblogs.com/SamFlynn/p/4597718.html

你可能感兴趣的文章
使用XML传递数据
查看>>
TYVJ.1864.[Poetize I]守卫者的挑战(概率DP)
查看>>
0925 韩顺平java视频
查看>>
iOS-程序启动原理和UIApplication
查看>>
mysql 8.0 zip包安装
查看>>
awk 统计
查看>>
模板设计模式的应用
查看>>
实训第五天
查看>>
平台维护流程
查看>>
2012暑期川西旅游之总结
查看>>
12010 解密QQ号(队列)
查看>>
2014年辛星完全解读Javascript第一节
查看>>
装配SpringBean(一)--依赖注入
查看>>
java选择文件时提供图像缩略图[转]
查看>>
方维分享系统二次开发, 给评论、主题、回复、活动 加审核的功能
查看>>
Matlab parfor-loop并行运算
查看>>
string与stringbuilder的区别
查看>>
2012-01-12 16:01 hibernate注解以及简单实例
查看>>
iOS8统一的系统提示控件——UIAlertController
查看>>
PAT甲级——1101 Quick Sort (快速排序)
查看>>